Communitygithub.com

karlem/skills

Revisão de replicação, consistência, particionamento, transações e processamento de mensagens. Use quando escritas podem ser repetidas, consumidores podem falhar, réplicas podem atrasar ou um design alega efeitos exatamente uma vez.

O que é skills?

Esta skill oferece um procedimento sistemático para revisar a correção de sistemas distribuídos, com foco em replicação, consistência, transações e processamento de mensagens. Ela é projetada para desenvolvedores e engenheiros de software que lidam com sistemas que afirmam garantir efeitos 'exatamente uma vez' ou onde falhas como repetições de escrita, travamentos de consumidores e atrasos de réplicas são possíveis. A skill começa com a definição de invariantes e escopo, guia o usuário por um processo de revisão detalhado (desde o desenho do caminho de escrita até a enumeração de janelas de falha e verificação de idempotência), e fornece saídas como invariantes violadas e correções mínimas. Ela também inclui verificações pré-recomendação para armadilhas comuns, como IDs de operação reutilizados e tokens de fencing, e faz referência a recursos externos e ao livro 'Designing Data-Intensive Applications'. A skill é independente de plataforma e pode ser usada em qualquer ambiente onde conceitos de sistemas distribuídos se aplicam.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Corretude de dados distribuídos

Comece pelo contrato

Escreva o invariante, seu escopo e as falhas que ele deve suportar. "Um pedido é cobrado no máximo uma vez" é útil; "consistência forte" é insuficiente. Identifique o registro autoritativo, as visões derivadas, os atores e cada limite de commit/confirmação. Pergunte se os clientes precisam de leia-suas-escritas, ordem causal, operações linearizáveis, transações serializáveis, ou apenas convergência eventual.

Procedimento de revisão

  1. Desenhe o caminho de escrita, incluindo commit no banco, confirmação do broker e efeitos colaterais externos. Registre o que cada resposta bem-sucedida garante após uma falha de processo, perda de máquina ou failover de réplica. Um tempo limite significa resultado desconhecido, não necessariamente execução falha.
  2. Enumere as janelas de falha antes e depois de cada etapa durável. Para cada uma, repita a operação e verifique o invariante. Teste tentativas concorrentes, bem como retentativas sequenciais. Use o registro de falhas.
  3. Mantenha um efeito de negócio e seu marcador de deduplicação em uma transação quando eles compartilham um banco de dados. Para eventos de saída, considere uma caixa de saída transacional. Para efeitos remotos, exija um contrato de idempotência durável do provedor ou uma máquina de estados de reconciliação. As garantias de entrega do broker param no seu limite de transação documentado.
  4. Identifique o escopo de ordenação: chave, partição, stream ou global. Escolha o escopo mais restrito que preserve o invariante. Um log particionado ordena suas partições; ele não ordena automaticamente eventos relacionados em partições diferentes.
  5. Para replicação e failover, inspecione eleição, fencing, política de confirmação e recuperação. R + W > N fornece interseção de conjuntos sob associação fixa; isso sozinho não estabelece linearizabilidade. Veja consistência.
  6. Para sharding, verifique localidade de transação, chaves quentes, rebalanceamento e aplicação de unicidade. Meça o shard mais ocupado, não apenas a taxa de transferência agregada.
  7. Produza o menor contraexemplo para uma garantia duvidosa e um teste que exercite-o. Separe garantias exigidas de obsolescência aceitável.

Saída da revisão

Retorne: invariante → suposições → linha do tempo de falha → garantia violada → correção mínima → custos → validação. Inclua um caminho de recuperação para dados já inconsistentes. Nomeie qualquer comportamento que dependa de uma versão de banco, broker ou provedor.

Verifique antes de recomendar

  • Uma requisição repetida pode reutilizar seu ID de operação estável com parâmetros alterados?
  • Um detentor de lease precisa de um token de fencing monotonicamente crescente imposto pelo recurso? A expiração do lease sozinha não pode parar um processo pausado.
  • Réplicas podem servir valores obsoletos imediatamente após uma escrita bem-sucedida?
  • Registros de tombstone ou deduplicação expiram antes do horizonte de repetição?
  • Um invariante de múltiplos registros exige uma transação ou coordenação explícita?

Escopo e referências

Cobertura parcial alinhada com Designing Data-Intensive Applications, 2ª ed. (Kleppmann e Riccomini). Estes procedimentos originais usam notas de curso públicas do autor e documentação primária adicional; o livro completo não estava disponível. Leia fontes para atribuição exata. Esta skill não fornece uma implementação de consenso nem assume tolerância a falhas bizantinas.

Individual skills in this repo

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

Habilidades Relacionadas