Conception et Architecture Système
Expliquez la différence entre les architectures Monolithique et Microservices. Quels sont les avantages et les inconvénients de chacune ?
Réponse :
L'architecture monolithique est une application unique et étroitement couplée. Avantages : plus simple à développer et à déployer initialement. Inconvénients : difficile à faire évoluer, à maintenir et à mettre à jour. L'architecture microservices est une collection de petits services faiblement couplés. Avantages : déploiement, scalabilité et diversité technologique indépendants. Inconvénients : complexité accrue dans le développement, le déploiement et la surveillance.
Réponse :
Le théorème CAP stipule qu'un magasin de données distribué ne peut garantir que deux des trois propriétés : Cohérence (Consistency), Disponibilité (Availability) et Tolérance aux Partitions (Partition Tolerance). Dans un système distribué, il faut choisir quelles deux propriétés prioriser en cas de partition réseau. La plupart des systèmes distribués modernes privilégient la Disponibilité et la Tolérance aux Partitions (AP) plutôt que la Cohérence forte (CP).
Décrivez différents types d'algorithmes d'équilibrage de charge (load balancing) et leurs cas d'utilisation.
Réponse :
Les algorithmes courants d'équilibrage de charge incluent le Round Robin (distribue les requêtes séquentiellement), le Least Connections (envoie au serveur ayant le moins de connexions actives), et l'IP Hash (distribue en fonction de l'adresse IP du client). Le Round Robin est simple pour des charges uniformes. Le Least Connections est bon pour des temps de traitement de requêtes variables. L'IP Hash assure la persistance de session sans gestion explicite de session.
Qu'est-ce que la cohérence éventuelle (eventual consistency), et où est-elle couramment utilisée ?
Réponse :
La cohérence éventuelle est un modèle de cohérence où, si aucune nouvelle mise à jour n'est apportée à un élément de données donné, toutes les lectures de cet élément finiront par retourner la dernière valeur mise à jour. Elle est couramment utilisée dans les systèmes distribués hautement disponibles comme les bases de données NoSQL (par exemple, Cassandra, DynamoDB) et le DNS, où la cohérence immédiate n'est pas critique et où la disponibilité est prioritaire.
Expliquez le concept de mise à l'échelle Horizontale vs. Verticale.
Réponse :
La mise à l'échelle verticale (scaling up) consiste à ajouter plus de ressources (CPU, RAM) à un serveur existant. C'est plus simple mais a des limites. La mise à l'échelle horizontale (scaling out) consiste à ajouter plus de serveurs pour distribuer la charge. Elle offre une plus grande scalabilité et tolérance aux pannes mais ajoute de la complexité dans la gestion des systèmes distribués.
Que sont les files de messages (message queues), et pourquoi sont-elles utilisées dans la conception de systèmes ?
Réponse :
Les files de messages (par exemple, Kafka, RabbitMQ) permettent une communication asynchrone entre différentes parties d'un système. Elles découplent les services, mettent en mémoire tampon les requêtes lors des pics de charge, améliorent la tolérance aux pannes en réessayant les opérations échouées, et facilitent les architectures pilotées par les événements. Cela améliore la scalabilité et la fiabilité.
Réponse :
Le sharding de base de données consiste à diviser une grande base de données en morceaux plus petits et plus gérables (shards) sur plusieurs serveurs. Les avantages incluent une meilleure scalabilité, performance et isolation des pannes. Les défis incluent une complexité accrue dans la distribution des données, le routage des requêtes, les jointures inter-shards et le rééquilibrage.
Réponse :
Un CDN est un réseau géographiquement distribué de serveurs proxy et de centres de données. Il améliore les performances du système en mettant en cache le contenu statique (images, vidéos, CSS, JS) plus près de l'utilisateur final, en réduisant la latence et en déchargeant le trafic du serveur d'origine. Cela se traduit par une livraison de contenu plus rapide et une meilleure expérience utilisateur.
Discutez de l'importance de l'idempotence dans la conception d'API pour les systèmes distribués.
Réponse :
L'idempotence signifie qu'une opération peut être appliquée plusieurs fois sans changer le résultat au-delà de la première application. Dans les systèmes distribués, où les problèmes de réseau ou les réessais sont courants, les API idempotentes empêchent les effets secondaires indésirables (par exemple, des paiements dupliqués) si une requête est envoyée plusieurs fois. Les méthodes HTTP comme GET, PUT et DELETE sont intrinsèquement idempotentes.
Quel est le pattern 'circuit breaker' (disjoncteur), et quand l'utiliseriez-vous ?
Réponse :
Le pattern circuit breaker empêche un système d'essayer de manière répétée d'exécuter une opération susceptible d'échouer, économisant ainsi des ressources et prévenant les défaillances en cascade. Il surveille les appels à un service ; si les échecs dépassent un seuil, il se 'déclenche' (s'ouvre), empêchant d'autres appels pendant une période. Il est utilisé lors de l'intégration avec des services externes ou peu fiables.
Expliquez le concept de mise en cache (caching) dans la conception de systèmes. Quelles sont les différentes stratégies de mise en cache ?
Réponse :
La mise en cache stocke les données fréquemment consultées dans un stockage temporaire plus rapide pour réduire la latence et la charge de la base de données. Les stratégies incluent : Write-Through (écrit simultanément dans le cache et la base de données), Write-Back (écrit dans le cache, puis de manière asynchrone dans la base de données), et Cache-Aside (l'application gère les lectures/écritures du cache, en vérifiant d'abord le cache). Les politiques d'éviction comme LRU (Least Recently Used - Moins récemment utilisé) sont également cruciales.