Exactitude des données distribuées
Commencez par le contrat
Formulez l'invariant, son périmètre et les défaillances qu'il doit survivre. « Une commande n'est facturée qu'une seule fois » est utile ; « forte cohérence » est insuffisant. Identifiez l'enregistrement faisant autorité, les vues dérivées, les acteurs et chaque frontière de validation/acquittement. Demandez-vous si les clients ont besoin de lisez-vos-écritures, d'ordre causal, d'opérations linéarisables, de transactions sérialisables, ou simplement d'une convergence éventuelle.
Procédure de révision
- Dessinez le chemin d'écriture, incluant la validation en base de données, l'acquittement du courtier et les effets secondaires externes. Enregistrez ce que chaque réponse réussie garantit après un crash de processus, une perte de machine ou un basculement de réplique. Un délai d'attente signifie un résultat inconnu, pas nécessairement une exécution échouée.
- Énumérez les fenêtres de crash avant et après chaque étape durable. Pour chacune, rejouez l'opération et vérifiez l'invariant. Testez les tentatives concurrentes ainsi que les nouvelles tentatives séquentielles. Utilisez le carnet de défaillances.
- Gardez un effet métier et son marqueur de déduplication dans une seule transaction lorsqu'ils partagent une base de données. Pour les événements sortants, envisagez une boîte d'envoi transactionnelle. Pour les effets distants, exigez un contrat d'idempotence durable du fournisseur ou une machine d'état de réconciliation. Les garanties de livraison du courtier s'arrêtent à leur frontière de transaction documentée.
- Identifiez le périmètre d'ordonnancement : clé, partition, flux ou global. Choisissez le périmètre le plus restreint qui préserve l'invariant. Un journal partitionné ordonne ses partitions ; il n'ordonne pas automatiquement les événements liés dans différentes partitions.
- Pour la réplication et le basculement, inspectez l'élection, le fencing, la politique d'acquittement et la récupération.
R + W > Ndonne une intersection d'ensemble sous adhésion fixe ; cela n'établit pas à lui seul la linéarisabilité. Voir cohérence. - Pour le partitionnement, vérifiez la localité des transactions, les clés chaudes, le rééquilibrage et le respect de l'unicité. Mesurez la partition la plus chargée, pas seulement le débit agrégé.
- Produisez le plus petit contre-exemple à une garantie douteuse et un test qui l'exerce. Séparez les garanties requises du retard acceptable.
Résultat de la révision
Retournez : invariant → hypothèses → chronologie des défaillances → garantie violée → correctif minimal → coûts → validation. Incluez un chemin de récupération pour les données déjà incohérentes. Nommez tout comportement qui dépend d'une version de base de données, de courtier ou de fournisseur.
À vérifier avant de recommander
- Une requête retentée peut-elle réutiliser son ID d'opération stable avec des paramètres modifiés ?
- Un détenteur de bail a-t-il besoin d'un jeton de fencing monotoniquement croissant imposé par la ressource ? L'expiration du bail seule ne peut pas arrêter un processus en pause.
- Les répliques peuvent-elles servir des valeurs obsolètes immédiatement après une écriture réussie ?
- Les tombstones ou les enregistrements de déduplication expirent-ils avant l'horizon de rejeu ?
- Un invariant multi-enregistrements nécessite-t-il une transaction ou une coordination explicite ?
Périmètre et références
Couverture partielle alignée avec Designing Data-Intensive Applications, 2e éd. (Kleppmann et Riccomini). Ces procédures originales utilisent des notes de cours publiques de l'auteur et une documentation primaire supplémentaire ; le livre complet n'était pas disponible. Lisez sources pour l'attribution exacte. Cette compétence ne fournit pas d'implémentation de consensus ni ne suppose une tolérance aux pannes byzantines.