Projetando Sistemas Distribuídos

Padrões e paradigmas para sistemas escaláveis e confiáveis usando Kubernetes

Projetando Sistemas Distribuídos
× Projetando Sistemas Distribuídos

Projetando Sistemas Distribuídos

Compartilhar

Autor: Brendan Burns

ISBN impresso: 978-85-7522-954-5
ISBN ebook: 978-85-7522-955-2
Ano: 2025
Páginas: 200
Preço impresso: R$ 85,00 O ebook deste livro está disponível na Amazon.

Opine sobre este livro

Descrição do livro

Todo sistema distribuído busca confiabilidade, desempenho e qualidade, mas é difícil construir um sistema assim. Estabelecer um conjunto de padrões de projeto permite que os desenvolvedores de software e arquitetos de sistemas usem uma linguagem comum para descrever seus sistemas e aprender com os padrões e práticas desenvolvidos por outros.

A popularidade dos contêineres e do Kubernetes abre caminho para padrões de sistemas distribuídos essenciais e componentes conteinerizados reutilizáveis. Este guia prático apresenta uma coleção de padrões genéricos e repetíveis para ajudar a orientar os sistemas que você construir com o uso de padrões e práticas comuns extraídos de alguns dos sistemas distribuídos de maior desempenho em uso atualmente.

Esses padrões comuns tornarão os sistemas muito mais acessíveis e eficientes, mesmo se você nunca tiver construído um sistema distribuído. O autor Brendan Burns demonstra como podemos adaptar padrões de projeto de software existentes para projetar e construir aplicações distribuídas confiáveis. Engenheiros de sistemas e desenvolvedores de aplicações aprenderão como esses padrões de longa data podem fornecer uma linguagem e um framework comuns para aumentar drasticamente a qualidade do sistema.

Esta segunda edição totalmente atualizada inclui novos capítulos sobre inferência de IA, treinamento de IA e construção de sistemas robustos para o mundo real.

• Compreenda como padrões e componentes reutilizáveis possibilitam o desenvolvimento rápido de sistemas distribuídos confiáveis

• Use os padrões sidecar, adapter e ambassador para dividir sua aplicação em um grupo de contêineres em uma única máquina

• Explore padrões distribuídos com vários nós e fracamente acoplados para replicação, escalabilidade e comunicação entre componentes

• Aprenda padrões de sistemas distribuídos para processamento de dados em lote de larga escala, abrangendo filas de trabalho, processamento baseado em eventos e fluxos de trabalho coordenados

“Pode ser difícil aprender sobre sistemas distribuídos, mas, ao introduzir padrões tradicionais fáceis de entender e de usar, Brendan Burns torna a tarefa mais segura, simples e acessível.”

Anne Currie, CEO da Strategically Green Learning and Development e autora de Building Green Software

Ver menos ▲

Sumário

  • Prefácio
  • Parte I: Conceitos básicos
  • Capítulo 1: Introdução
  • Breve história do desenvolvimento de sistemas
  • Breve história dos padrões no desenvolvimento de softwares
    • Formalização da programação algorítmica
    • Padrões para a programação orientada a objetos
    • O surgimento do software open source
  • O valor dos padrões, práticas e componentes
    • Baseando-se em experiências anteriores
    • Uma linguagem compartilhada para a discussão de nossa prática
    • Componentes compartilhados para fácil reutilização
  • Resumo
  • Capítulo 2: Conceitos importantes dos sistemas distribuídos
  • APIs e RPCs
  • Latência
  • Confiabilidade
  • Percentis
  • Idempotência
  • Semântica da entrega
  • Integridade relacional
  • Consistência de dados
  • Orquestração e Kubernetes
  • Verificações de integridade
  • Resumo
  • Parte II: Padrões de nó único
  • Capítulo 3: Padrão sidecar
  • Exemplo de sidecar: adicionando o HTTPS a um serviço legado
  • Configuração dinâmica com sidecars
  • Contêineres de aplicação modulares
    • Mãos à obra: implantando o contêiner topz
  • Construindo uma PaaS simples com sidecars
  • Projetando sidecars para modularidade e reutilização
    • Contêineres parametrizados
    • Defina a API de cada contêiner
    • Documentando seus contêineres
  • Resumo
  • Capítulo 4: Ambassadors
  • Usando um ambassador para fragmentar um serviço
    • Mãos à obra: implementando um Redis fragmentado
  • Usando um ambassador para intermediação de serviços
  • Usando um ambassador para fazer experimentações ou a divisão de requisições
    • Mãos à obra: implementando experimentos de 10%
  • Resumo
  • Capítulo 5: Adapters
  • Monitoramento
    • Mãos à obra: usando o Prometheus para monitoramento
  • Logging
    • Mãos à obra: normalizando diferentes formatos de logging com fluentd
  • Adicionando um monitor de integridade
    • Mãos à obra: adicionando um monitoramento de integridade sofisticado para o MySQL
  • Resumo
  • Parte III: Padrões de serviço
  • Capítulo 6: Serviços replicados com balanceamento de carga
  • Serviços stateless
    • Sondagens de prontidão para balanceamento de carga
    • Mão à obra: criando um serviço replicado no Kubernetes
  • Serviços com rastreamento de sessão
  • Serviços replicados no nível da aplicação
  • Introduzindo uma camada de cache
    • Implantando seu cache
    • Mãos à obra: implantando a camada de cache
  • Expandindo a camada de cache
    • Limitação de taxa e defesa contra negação de serviço
    • Terminação SSL
    • Mãos à obra: implantando o nginx e a terminação SSL
  • Resumo
  • Capítulo 7: Serviços fragmentados
  • Cache fragmentado
    • Por que você pode precisar de um cache fragmentado
    • O papel do cache no desempenho do sistema
    • Caches fragmentados replicados
    • Mão à obra: implantando um ambassador e um memcache para um cache fragmentado
  • Uma análise das funções de sharding
    • Selecionando uma chave
    • Funções de hashing consistentes
    • Mãos à obra: construindo um proxy de sharding HTTP consistente
  • Serviço fragmentado replicado
  • Sistemas de sharding quente
  • Resumo
  • Capítulo 8: Scatter/Gather
  • Scatter/Gather com distribuição da raiz
    • Mãos à obra: busca distribuída em documento
  • Scatter/Gather com sharding de folha
    • Mãos à obra: busca em documento fragmentado
    • Selecionando o número certo de folhas
  • Dimensionando o scatter/gather para o fornecimento de confiabilidade e escala
  • Resumo
  • Capítulo 9: Funções e Processamento Orientado a Eventos
  • Determinando quando a FaaS faz sentido
    • Os benefícios da FaaS
    • Os desafios da FaaS
    • A necessidade de processamento em segundo plano
    • A necessidade de conter dados na memória
    • Os custos do processamento sustentado baseado em requisições
  • Padrões para a FaaS
    • Padrão decorator: transformação de requisição ou resposta
    • Mãos à obra: adicionando padrões de requisição antes do processamento de requisições
    • Manipulando eventos
    • Mãos à obra: implementando a autenticação de dois fatores
    • Pipelines baseados em eventos
    • Mãos à obra: implementando um pipeline para a inscrição de um novo usuário
  • Resumo
  • Capítulo 10: Eleição de propriedade
  • Determinando se você precisa de eleição de líder
  • Aspectos básicos da eleição de líder
    • Mãos à obra: implantando o etcd
    • Implementando locks
    • Mãos à obra: implementando locks no etcd
    • Implementando a propriedade
    • Mãos à obra: implementando leases no etcd
  • Tratando a manipulação de dados concorrentes
  • Resumo
  • Parte IV: Padrões computacionais de lote
  • Capítulo 11: Sistemas de fila de tarefas
  • Um sistema genérico de fila de tarefas
    • Interface do contêiner de origem
    • API da fila de tarefas
    • A interface do contêiner de workers
    • Infraestrutura de fila de tarefas compartilhada
  • Mãos à obra: implementando um gerador de miniaturas de vídeo
  • Dimensionamento dinâmico dos workers
  • Padrão multiworker
  • Resumo
  • Capítulo 12: Processamento em lote orientado a eventos
  • Padrões de processamento orientado a eventos
    • Copiador
    • Filtro
    • Divisor
    • Sharder
    • Merger
  • Mãos à obra: construindo um fluxo orientado a eventos para a inscrição de novos usuários
  • Infraestrutura de publicador/assinante
  • Mãos à obra: implantando o Kafka
  • Resiliência e desempenho nas filas de tarefas
    • Roubo de trabalho
    • Erros, prioridade e novas tentativas
  • Resumo
  • Capítulo 13: Processamento de lote coordenado
  • Join (ou sincronização de barreira)
  • Reduce
    • Mãos à obra: contagem
    • Soma
    • Histograma
    • Mãos à obra: pipeline de marcação e processamento de imagens
  • Resumo
  • Parte V: Conceitos universais
  • Capítulo 14: Padrões de monitoramento e observabilidade
  • Aspectos básicos do monitoramento e da observabilidade
    • Logging
    • Métricas
    • Monitoramento básico de requisições
    • Monitoramento avançado de requisições
    • Alertas
      • Alerta básico
      • Alertas para anomalias
    • Rastreamento
  • Informações de agregação
  • Resumo
  • Capítulo 15: Serviço e inferência de IA
  • Aspectos básicos dos sistemas de IA
  • Hospedando um modelo
  • Distribuindo um modelo
  • Desenvolvimento com modelos
  • Geração Aumentada por Recuperação
  • Teste e implantação
  • Resumo
  • Capítulo 16: Padrões de falha comuns
  • A manada ensurdecedora
  • A ausência de erros é um erro
  • Erros “do cliente” e erros “esperados”
  • Erros de versão
  • O mito dos componentes opcionais
  • Opa, “limpamos” tudo
  • Desafios com a amplitude das entradas
  • Processando trabalho obsoleto
  • O problema do “segundo sistema”
  • Resumo
  • Conclusão: um novo começo?
  • Índice remissivo
Ver sumário completo ▼

Sobre o autor

Brendan Burns

Brendan Burns é um dos criadores do Kubernetes e Distinguished Engineer na Microsoft Azure, onde lidera equipes com foco em DevOps, Open Source e Microsserviços.… Ver perfil completo ▶