Oyun Kitabı

DDD en production : systèmes distribués et stratégies de modernisation (Ddd EN Production Systemes Distribues Et Strategies DE Modernisation)

Comment implémenter DDD dans un environnement de production ? Guide de conversion hérité avec Event Storming, Saga, Transactional Outbox, Anti-Corruption Layer et Strangler Fig.

DDD - Langage commercial du logiciel

Partie 4 de 4

Production DDD practices for event discovery, legacy modernization, and safe distributed change

The map for this chapter

This chapter is not a list of patterns to memorize. It follows how business truth inside a monolith can move safely while the system changes.

Monolith
   ↓
Event Storming
   ↓
Bounded Context
   ↓
Saga
   ↓
Outbox
   ↓
Strangler Fig
   ↓
Production

La vraie question en Production

Tracer des limites avec DDD est le début. En production, le véritable test consiste à maintenir la confiance du système et des utilisateurs à mesure que ces limites changent. Il peut être tentant de réécrire du jour au lendemain un flux de commandes au sein du monolithe existant ; Mais c’est généralement l’option la plus risquée.```text Monolith → mevcut iş gerçeği Yeni bağlam → daha temiz model Kademeli geçiş → ölçülebilir güven


## Concepts à la première mention```text
📦 Event Storming
İş olaylarını, komutları ve riskleri birlikte görünür kılan keşif atölyesi.

📦 Saga
Dağıtık bir iş akışındaki yerel işlemleri ve başarısızlıktaki iş telafisini yöneten model.

📦 Transactional Outbox
Veri değişikliği ile yayınlanacak event'i aynı yerel transaction içinde kaydeden desen.

📦 Strangler Fig
Legacy sistemi tek seferde değiştirmek yerine yeni sınırlarla adım adım saran dönüşüm stratejisi.
```Un événement de domaine est un fait commercial écrit au passé : `SiparişOnaylandı`. La commande est l'intention : `SiparişiOnayla`. Cette distinction est nécessaire ; Parce que l’intention peut être rejetée, un fait qui s’est produit constitue un enregistrement auquel d’autres contextes peuvent réagir avec confiance.

## Trouvez d'abord le flux invisible avec Event Storming

La transformation de la production commence par le workflow, et non par l'inventaire du code. Le produit, les opérations et l’ingénierie sont sur le même mur, répertoriant les événements au passé ; Ajoute des commandes, des acteurs, des systèmes externes et des points chauds rouges.```text
SiparişOnaylandı ← SiparişiOnayla ← Customer
       ↓
StokRezerveEdildi ← StokRezerveEt
       ↓
ÖdemeAlındı ← ÖdemeyiAl ← Payment Gateway
```Lisez également le flux de bout en bout. Récit inversé ; Il rend visible les décisions cachées par le chemin heureux, telles que le remboursement, le paiement partiel, le délai d'attente et l'intervention manuelle. Un contexte limité n'est pas un nom de table ; La décision se trouve là où la langue et la propriété changent.

## Saga : pas de rollback, compensation du travail

Il n’existe pas de transaction ACID unique lorsque le paiement, l’inventaire et la livraison se déroulent dans des contextes différents. 2PC peut promettre une forte cohérence ; Cependant, en cas de défaillance du coordinateur ou du participant, des frais de rétention et d'accessibilité du verrou sont facturés. Saga définit plutôt une compensation pour chaque étape locale.```text
Reserve inventory → Capture payment → Create shipment
                 payment fails → Release inventory
````ReleaseInventory` doit également être idempotent ; Si le même événement se produit deux fois, le stock ne devrait pas augmenter deux fois. Dans les flux courts et locaux, la chorégraphie peut suffire. Orchestration dans des processus en plusieurs étapes et à visibilité critique ; fournit une machine à états et un point d’observation unique.

## Boîte d'envoi et traçabilité : rendre la migration prouvable

Si le courtier est inaccessible pendant la validation d'une commande, un espace de double écriture se produit entre la base de données et la publication du message. C'est pourquoi Outbox existe.```text
Local transaction
  → Order'ı kaydet
  → OrderConfirmed'i Outbox'a yaz
  → Commit

Relay → Broker → Consumer → Projection
```Les consommateurs doivent s’attendre à des messages en double lors de la livraison au moins une fois. L’ID de l’événement, la version globale et l’impact commercial doivent être vérifiés. L'ID de corrélation indique la partie d'un flux de bout en bout et l'ID de causalité indique la décision qui a produit l'événement. Ce ne sont pas des champs de journal ; "Ce qui s'est passé?" au moment des faits. et "pourquoi est-ce arrivé?" est la réponse à vos questions.

## Conversion héritée avec Strangler Fig

La transformation big-bang représente le risque de perdre les anciens comportements avant que les règles métier ne soient découvertes. Importez le nouveau contexte à côté de l'héritage ; mesurez d’abord les données et la différence de comportement, puis générez du trafic.```text
1. Replication only  → yeni modele veri akıt
2. Shadow reads      → eski ve yeni cevabı karşılaştır
3. Partial reads     → küçük trafik yüzdesini yönlendir
4. Write migration   → yeni sınırda yaz, geri uyumu koru
5. Full cutover      → metriklerle doğrulanmış geçiş
6. Decommission      → köprüleri ve eski kodu kaldır
```La couche anti-corruption est ici le bouclier du nouveau modèle. Plutôt que de déplacer les champs ambigus de l'héritage directement vers le domaine, cela se traduit : `LEGACY_ORDER_STATE=7` devient un `FulfilmentStatus` significatif dans le nouveau contexte. Ainsi, l’effet du modèle sale reste sur un seul adaptateur.

## Critère d'acceptation : capacité de restauration, pas seulement déploiement

Le succès de la migration ne dépend pas seulement de la réactivité du nouveau point de terminaison. Le taux de différence de lecture fantôme, la différence de délai P95, le décalage du consommateur, la profondeur DLQ et le plan de restauration doivent être visibles. Le coût de relecture est de O(n) en fonction du nombre d'événements ; Un instantané ou une relecture segmentée peut réduire ce coût, mais ne remplace pas un historique vérifié.

Un système qui ne peut pas être observé ne peut pas être géré. Chaque contrat d'événement doit avoir un propriétaire, une stratégie de publication, une alerte et un runbook de relecture.

## Correspondances qui créent une fausse confiance```text
❌ DDD = mikroservis dönüşümü
✓ DDD önce iş dilini ve karar sınırını korur; mikroservis bazen sonuçtur.

❌ Saga = teknik rollback
✓ Saga, geri alınamayan iş etkisini telafi eden iş akışıdır.

❌ Outbox = exactly-once teslimat
✓ Outbox event kaybını önler; consumer yine duplicate için idempotent olmalıdır.

❌ Shadow read = test tamamlandı
✓ Karşılaştırma, canlı trafikte davranış farkını ölçen uzun süreli kanıttır.

❌ ACL = gereksiz katman
✓ ACL, legacy dilinin yeni domain'i kirletmesini engeller.

Liste de contrôle pour la préparation de la production

  1. Les points chauds et les systèmes externes autres que le chemin heureux sont-ils visibles dans Event Storming ?
  2. Une compensation idempotente est-elle définie pour chaque étape de la Saga ?
  3. La boîte d'envoi comble-t-elle l'écart entre l'enregistrement de la base de données et l'événement en cas de défaillance du courtier ?
  4. Existe-t-il une observabilité pour l'ID de corrélation, l'ID de causalité, le décalage du consommateur et le DLQ ?
  5. Le nouveau contexte protège-t-il le modèle existant avec ACL ?
  6. Des seuils mesurables ont-ils été établis pour la lecture fantôme, le trafic en cascade et la restauration ?
  7. La date et le propriétaire des vieux ponts sont-ils clairs ?

La complexité d’une transformation ne se mesure pas au nombre de services. Le changement indépendant est mesuré par l’isolement des erreurs et la preuve de retour.

Ce qu'il faut retenir de cet article

  1. DDD en production signifie que le modèle reste fidèle au langage commercial en cours de changement.
  2. Event Storming découvre les décisions et les risques qui sont invisibles avant le code.
  3. Saga, Outbox et idempotency acceptent les échecs distribués comme entrée de conception.
  4. Strangler Fig et ACL divisent la conversion héritée en étapes vérifiables plutôt qu'en un seul saut.

La modernisation ne consiste pas à détruire l'ancien système ; est d'établir un rythme de changement plus sûr sans perdre la valeur de l'entreprise.

FAQ

Frequently asked questions

Qu’est-ce que l’Event Storming ?

Atelier découverte qui rend visibles ensemble les événements métiers, les commandes et les risques.

Qu’est-ce que Saga ?

Modèle qui gère les opérations locales et la récupération des tâches en cas d'échec dans un flux de travail distribué.

« DDD=conversion microservice » est-il correct ?

DDD préserve d'abord le langage métier et les limites de décision ; le microservice en est parfois le résultat.

Que corrige cette section ?

Le but n’est pas de produire plus de services. L’objectif est que lorsque la langue de l’entreprise change, le système puisse également changer en toute sécurité. DDD in Production signifie que le modèle reste fidèle au langage commercial en évolution. Tracer des limites avec DDD est le début. En production, le véritable test consiste à maintenir la confiance du système et des utilisateurs à mesure que ces limites changent. Il peut être tentant de réécrire du jour au lendemain un flux de commandes au sein du monolithe existant ; Mais c’est généralement l’option la plus risquée.

Principes d'ingénierie appris

  • La production DDD exige que les événements et les limites conservent leur signification commerciale en cas d'erreur.
  • Saga, Outbox et idempotence ; Il reconnaît que la livraison distribuée est la norme et non l’exception.
  • Avec Strangler Fig, ACL maintient le changement dans la transformation héritée à un niveau réduit, mesurable et réversible.

Continuer la lecture

Continuer la lecture

Suivant en série

Même série

Même série

Paylaş