Communitygithub.com

karlem/compétences

Examen de la réplication, de la cohérence, du partitionnement, des transactions et du traitement des messages. À utiliser lorsque les écritures peuvent être retentées, que les consommateurs peuvent planter, que les répliques peuvent prendre du retard, ou qu'une conception revendique des effets exactement une fois.

Qu'est-ce que compétences ?

Cette compétence fournit un processus structuré pour vérifier l'exactitude des systèmes distribués, en se concentrant sur la réplication, la cohérence, le partitionnement, les transactions et le traitement des messages. Elle est utile lorsqu'une conception implique des écritures retentées, des consommateurs sujets à des pannes, des répliques avec latence, ou des affirmations d'effets 'exactement une fois'. Basée sur les principes du livre *Designing Data-Intensive Applications*, elle guide les développeurs et les utilisateurs d'agents IA à travers une procédure de révision en sept étapes, depuis la définition du contrat d'invariant jusqu'à la production de contre-exemples et de correctifs. La compétence couvre des plateformes et concepts comme l'outbox transactionnelle, les garanties de courtier, le partitionnement de logs, la réplication avec consensus, la linéarisabilité, et les transactions sérialisables. Elle n'impose pas d'implémentation spécifique mais offre une liste de vérification et des références pour évaluer les garanties et les échecs potentiels, avec des liens vers des modèles d'échec, la cohérence et les sources.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/karlem/skills/tree/HEAD/architecture/distributed-systems

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

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

  1. 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.
  2. É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.
  3. 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.
  4. 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.
  5. Pour la réplication et le basculement, inspectez l'élection, le fencing, la politique d'acquittement et la récupération. R + W > N donne une intersection d'ensemble sous adhésion fixe ; cela n'établit pas à lui seul la linéarisabilité. Voir cohérence.
  6. 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é.
  7. 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.

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

Skills associés