Projetando Sistemas Distribuídos
Padrões e paradigmas para sistemas escaláveis e confiáveis usando Kubernetes
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
Sobre o autor
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 ▶






