Quiz d'architecture
Mettez vos connaissances à l'épreuve avec des questions à choix multiples sur les patterns, les décisions et les concepts d'architecture logicielle.
Objectif
Ce quiz couvre les concepts fondamentaux de l’architecture logicielle abordés dans les sections précédentes. Utilisez-le pour évaluer votre compréhension et repérer les domaines où vous avez besoin d’approfondir.
Chaque question comporte une explication détaillée — ne vous contentez pas de la bonne réponse, lisez le pourquoi.
Section 1 : Fondamentaux
Question 1
Quelle est la principale différence entre un monolithe et des microservices ?
- A) Les microservices utilisent davantage de technologies
- B) Les microservices se déploient de manière indépendante
- C) Les monolithes ne peuvent pas monter en charge
- D) Les microservices sont toujours plus rapides
Voir la réponse
Réponse : B
La différence fondamentale réside dans le déploiement indépendant. Chaque microservice peut être déployé, mis à l’échelle et mis à jour sans affecter les autres. Un monolithe se déploie comme une seule unité.
Les monolithes peuvent tout à fait monter en charge (verticalement ou avec plusieurs instances). Les microservices ne sont pas intrinsèquement plus rapides — en réalité, la communication réseau ajoute de la latence.
Question 2
Quel principe architectural suggère que les modules de haut niveau ne doivent pas dépendre des modules de bas niveau ?
- A) Single Responsibility Principle
- B) Open/Closed Principle
- C) Dependency Inversion Principle
- D) Interface Segregation Principle
Voir la réponse
Réponse : C
Le Dependency Inversion Principle (DIP) établit que :
- Les modules de haut niveau ne doivent pas dépendre des modules de bas niveau. Les deux doivent dépendre d’abstractions.
- Les abstractions ne doivent pas dépendre des détails. Les détails doivent dépendre des abstractions.
En pratique, cela signifie utiliser des interfaces ou des contrats entre les couches, plutôt que des dépendances directes vers des implémentations concrètes.
Question 3
Quand est-il approprié de choisir un monolithe plutôt que des microservices ?
- A) Jamais — les microservices sont toujours supérieurs
- B) Lorsque l’équipe est réduite et que le domaine n’est pas bien défini
- C) Uniquement pour des prototypes jetables
- D) Lorsque vous n’avez pas de budget pour le cloud
Voir la réponse
Réponse : B
Un monolithe (en particulier un monolithe modulaire) est un excellent choix lorsque :
- L’équipe est réduite (< 8 personnes)
- Le domaine n’est pas bien défini (les frontières des services vont changer)
- La vitesse de développement importe plus que la mise à l’échelle indépendante
- Vous ne disposez pas de l’infrastructure pour opérer des systèmes distribués
Les microservices ajoutent une complexité opérationnelle considérable. Si vous n’en avez pas besoin, ne l’ajoutez pas.
Section 2 : Patterns
Question 4
Quel pattern utiliseriez-vous pour empêcher qu’un service externe lent ne fasse s’effondrer votre système ?
- A) Saga Pattern
- B) Circuit Breaker
- C) Outbox Pattern
- D) CQRS
Voir la réponse
Réponse : B
Le Circuit Breaker détecte lorsqu’un service externe est en panne ou répond lentement, et « ouvre le circuit » pour cesser de lui envoyer des requêtes. Cela évite que les threads ne se bloquent en attendant des réponses qui n’arrivent pas, protégeant votre système d’une cascade de pannes.
États du circuit breaker :
- Fermé : tout fonctionne normalement, les requêtes passent
- Ouvert : le service est en panne, les requêtes sont rejetées immédiatement
- Semi-ouvert : une requête de test est autorisée pour vérifier si le service s’est rétabli
Question 5
Quel est l’objectif principal du pattern Outbox ?
- A) Envoyer des e-mails de manière asynchrone
- B) Garantir la cohérence entre la base de données et le message broker
- C) Stocker les messages ayant échoué pour les réessayer
- D) Séparer les lectures des écritures
Voir la réponse
Réponse : B
L’Outbox Pattern résout le problème de la double écriture : lorsque vous devez à la fois mettre à jour la base de données ET publier un événement, et que les deux opérations doivent être atomiques.
Au lieu de publier directement vers le broker, vous écrivez l’événement dans une table « outbox » au sein de la même transaction de base de données. Un processus distinct lit la table outbox et publie les événements vers le broker. Si la publication échoue, elle est réessayée. Si la transaction échoue, l’événement n’a jamais été écrit dans l’outbox.
Question 6
Quel pattern permet à un service de traiter différemment les requêtes de lecture et d’écriture ?
- A) Saga
- B) Event Sourcing
- C) CQRS
- D) API Gateway
Voir la réponse
Réponse : C
CQRS (Command Query Responsibility Segregation) sépare le modèle de lecture du modèle d’écriture. Cela permet de :
- Optimiser les lectures avec des modèles dénormalisés
- Mettre à l’échelle les lectures et les écritures de manière indépendante
- Utiliser des bases de données différentes pour chaque modèle
CQRS ne nécessite pas Event Sourcing, bien que les deux soient souvent utilisés conjointement.
Section 3 : Résilience et opérations
Question 7
Quelle stratégie de retry est la plus appropriée pour les appels vers des services externes ?
- A) Retry immédiat sans limite
- B) Retry avec backoff exponentiel et jitter
- C) Retry toutes les secondes, au maximum 100 fois
- D) Aucun retry — si ça échoue, ça échoue
Voir la réponse
Réponse : B
Le backoff exponentiel avec jitter est la stratégie recommandée parce que :
- Backoff exponentiel : chaque nouvel essai attend plus longtemps (1s, 2s, 4s, 8s…), laissant au service le temps de se rétablir
- Jitter : ajoute une composante aléatoire au délai pour éviter que tous les clients ne réessaient au même moment (thundering herd)
- Limite de tentatives : définissez toujours un maximum (3 à 5 tentatives en général)
Un retry immédiat sans limite peut aggraver le problème en surchargeant un service qui est déjà en difficulté.
Question 8
Quels sont les trois piliers de l’observabilité ?
- A) CPU, mémoire et disque
- B) Logs, métriques et traces
- C) Alertes, dashboards et rapports
- D) Uptime, latence et throughput
Voir la réponse
Réponse : B
Les trois piliers de l’observabilité sont :
- Logs : enregistrements textuels d’événements discrets (ce qui s’est passé)
- Métriques : valeurs numériques agrégées dans le temps (combien, à quelle vitesse)
- Traces : suivi d’une requête à travers plusieurs services (par où elle est passée)
Ensemble, ils permettent de comprendre le comportement d’un système distribué. Les alertes, dashboards et rapports sont des outils qui consomment ces données, mais ne sont pas des piliers en tant que tels.
Question 9
Quelle est la différence entre une disponibilité de 99,9 % et de 99,99 % ?
- A) Il n’y a aucune différence pratique
- B) 99,9 % autorise ~8,7 heures d’indisponibilité par an ; 99,99 % autorise ~52 minutes
- C) 99,99 % nécessite des microservices ; 99,9 % non
- D) 99,99 % est impossible à atteindre
Voir la réponse
Réponse : B
La différence est significative :
- 99,9 % (trois neuf) : ~8,7 heures d’indisponibilité par an (~43 minutes par mois)
- 99,99 % (quatre neuf) : ~52 minutes d’indisponibilité par an (~4,3 minutes par mois)
- 99,999 % (cinq neuf) : ~5,2 minutes d’indisponibilité par an
Chaque « neuf » supplémentaire exige un investissement exponentiellement plus important en redondance, monitoring et automatisation. La plupart des applications n’ont pas besoin de plus de trois neuf.
Section 4 : Sécurité
Question 10
Où l’authentification doit-elle être validée dans une architecture de microservices ?
- A) Uniquement dans le frontend
- B) Dans chaque microservice individuellement
- C) Dans l’API Gateway, en propageant l’identité vers les services internes
- D) Uniquement dans la base de données
Voir la réponse
Réponse : C
Le pattern recommandé est le suivant :
- L’API Gateway valide le token d’authentification (JWT, session, etc.)
- S’il est valide, il propage l’identité de l’utilisateur (userId, rôles) vers les services internes via les headers
- Les services internes font confiance à l’identité propagée et appliquent l’autorisation selon leurs règles métier
Valider dans chaque service est redondant et coûteux. Valider uniquement dans le frontend est risqué — le backend doit toujours vérifier.
Résultats
Comptez vos bonnes réponses :
| Score | Niveau | Recommandation |
|---|---|---|
| 9-10 | Avancé | Vous êtes prêt pour les défis avancés |
| 7-8 | Intermédiaire | Bon niveau — revoyez les sujets où vous avez échoué |
| 5-6 | Basique | Révisez les sections sur les fondamentaux et les patterns |
| < 5 | Débutant | Commencez depuis le début — chaque section vous aidera |
Ne vous souciez pas du score — l’important est d’identifier quels sujets vous devez renforcer et de revenir aux sections correspondantes.