Criando Microsserviços – 2ª Edição
Projetando sistemas com componentes menores e mais especializados
Descrição do livro
À medida que as empresas passam de aplicações monolíticas para microsserviços menores e autocontidos, os sistemas distribuídos começam a ter um número maior de componentes. No entanto, o desenvolvimento desses novos sistemas traz consigo o seu próprio conjunto de problemas. Esta segunda edição expandida apresenta uma visão holística dos assuntos que você deve considerar ao criar, gerenciar e escalar arquiteturas de microsserviços.
Por meio de exemplos claros e conselho práticos, o autor Sam Newman oferece a todos – de arquitetos a desenvolvedores ou profissionais da área de teste e operadores de TI – uma base sólida sobre os conceitos. Você explorará as soluções mais recentes para modelagem, integração, testes, implantação e monitoração de seus próprios serviços autônomos. Casos reais revelam como as empresas atualmente conseguem tirar o máximo de proveito dessas arquiteturas.
As tecnologias associadas aos microsserviços continuam mudando rapidamente. Este livro deixará você em dia com as últimas novidades.
• Obtenha novas informações sobre interfaces de usuário, orquestração de contêineres e a tecnologia serverless.
• Alinhe o design de seus sistemas com os objetivos de sua empresa.
• Explore opções para integrar um serviço ao seu sistema.
• Saiba como implantar microsserviços de forma independente.
• Analise as complexidades dos testes e da monitoração de serviços distribuídos.
• Administre a segurança com mais conteúdo a respeito de modelos de usuário para serviço e de serviço para serviço.
Ver menos ▲Sumário
- Prefácio
- Conceitos básicos
- Capítulo 1 ■ O que são microsserviços?
- Apresentação rápida dos microsserviços
- Conceitos essenciais dos microsserviços
- Implantações independentes
- Modelagem com base em um domínio de negócios
- Responsáveis pelo próprio estado
- Tamanho
- Flexibilidade
- Alinhamento entre arquitetura e organização
- Sistema monolítico
- Sistema monolítico com um único processo
- Sistema monolítico modular
- Sistema monolítico distribuído
- Sistemas monolíticos e desavença nas entregas
- Vantagens dos sistemas monolíticos
- Tecnologias que viabilizam os microsserviços
- Agregação de logs e tracing distribuído
- Contêineres e Kubernetes
- Streaming
- Nuvem pública e produtos serverless
- Vantagens dos microsserviços
- Heterogeneidade de tecnologias
- Robustez
- Escalabilidade
- Facilidade de implantação
- Alinhamento organizacional
- Composição
- Complexidades dos microsserviços
- Experiência dos desenvolvedores
- Sobrecarga tecnológica
- Custos
- Relatórios
- Monitoração e resolução de problemas
- Segurança
- Testes
- Latência
- Consistência dos dados
- Devo usar microsserviços?
- A quem os microsserviços talvez não sejam apropriados
- Quando os microsserviços funcionam bem
- Resumo
- Capítulo 2 ■ Como modelar microsserviços
- Apresentando a MusicCorp
- O que é uma boa fronteira para um microsserviço?
- Ocultação de informações
- Coesão
- Acoplamento
- Interação entre acoplamento e coesão
- Tipos de acoplamento
- Acoplamento de domínio
- Acoplamento de passagem
- Acoplamento de dados em comum
- Acoplamento de conteúdo
- Apenas o suficiente sobre design orientado a domínios
- Linguagem ubíqua
- Agregado
- Contexto delimitado
- Mapeando agregados e contextos delimitados aos microsserviços
- Event storming
- Design Orientado a Domínios no caso dos microsserviços
- Alternativas às fronteiras baseadas em domínios de negócios
- Volatilidade
- Dados
- Tecnologia
- Estrutura organizacional
- Combinando modelos e exceções
- Resumo
- Capítulo 3 ■ Dividindo o sistema monolítico
- Tenha um objetivo
- Migração gradual
- O sistema monolítico raramente é o inimigo
- Perigos de uma decomposição prematura
- O que separar antes?
- Decomposição por camadas
- Código antes
- Dados antes
- Padrões convenientes para decomposição
- Padrão strangler fig
- Execução paralela
- Flag de funcionalidade
- Preocupações na decomposição de dados
- Desempenho
- Integridade dos dados
- Transações
- Ferramentas
- Banco de dados para relatórios
- Resumo
- Capítulo 4 ■ Estilos de comunicação entre microsserviços
- Da comunicação interna ao processo à comunicação entre processos
- Desempenho
- Alterando as interfaces
- Tratamento de erros
- Tecnologias para comunicação entre processos: muitas opções
- Estilos de comunicação entre microsserviços
- Estilos mistos
- Padrão: síncrono bloqueante
- Vantagens
- Desvantagens
- Quando usar
- Padrão: assíncrono não bloqueante
- Vantagens
- Desvantagens
- Quando usar
- Padrão: comunicação por meio de dados em comum
- Implementação
- Vantagens
- Desvantagens
- Quando usar
- Padrão: comunicação por meio de requisição-resposta
- Implementação: síncrono versus assíncrono
- Quando usar
- Padrão: comunicação orientada a eventos
- Implementação
- O que há em um evento?
- Quando usar
- Prossiga com cautela
- Resumo
- Implementação
- Capítulo 5 ■ Implementando a comunicação entre microsserviços
- Em busca da tecnologia ideal
- Facilite a compatibilidade com versões anteriores
- Deixe sua interface explícita
- Mantenha suas APIs independentes de tecnologia
- Deixe seu serviço simples para os consumidores
- Oculte detalhes de implementação internos
- Opções de tecnologia
- Remote procedure calls
- REST
- GraphQL
- Brokers de mensagens
- Formatos de serialização
- Formatos textuais
- Formatos binários
- Esquemas
- Incompatibilidades de contrato estruturais versus semânticas
- Devemos usar esquemas?
- Lidando com mudanças entre microsserviços
- Evitando mudanças que causam incompatibilidade
- Mudanças com expansão
- Leitor tolerante
- Tecnologia correta
- Interface explícita
- Identifique rapidamente as mudanças que causam incompatibilidades acidentais
- Gerenciando mudanças que causam incompatibilidade
- Implantação sincronizada
- Permitir a coexistência de versões incompatíveis de microsserviços
- Emular a interface antiga
- Qual é a minha abordagem preferida?
- Contrato social
- Monitorando o uso
- Medidas extremas
- DRY e os perigos da reutilização de código em um mundo de microsserviços
- Compartilhando código por meio de bibliotecas
- Descoberta de serviços
- Domain Name System (DNS)
- Registros dinâmicos de serviços
- Não se esqueça das pessoas!
- Service meshes e gateways de API
- Gateways de API
- Service meshes
- E quanto aos outros protocolos?
- Documentação dos serviços
- Esquemas explícitos
- Sistema que se autodescreve
- Resumo
- Capítulo 6 ■ Fluxo de trabalho
- Transações em bancos de dados
- Transações ACID
- Ainda ACID, mas sem atomicidade?
- Transações distribuídas – commit de duas fases
- Transações distribuídas – simplesmente diga não
- Sagas
- Modos de falha das sagas
- Implementando sagas
- Sagas versus transações distribuídas
- Resumo
- Capítulo 7 ■ Construção
- Uma rápida introdução à integração contínua
- Você realmente coloca a CI em prática?
- Modelos de branching
- Pipelines de construção e entrega contínua
- Ferramentas
- Relação de custo-benefício e ambientes
- Criação de artefatos
- Mapeando códigos-fontes e builds aos microsserviços
- Um repositório gigante, uma build gigante
- Padrão: um repositório por microsserviço (também conhecido como multirepo)
- Padrão: monorepo
- Qual abordagem devo utilizar?
- Resumo
- Capítulo 8 ■ Implantação
- Do lógico ao físico
- Várias instâncias
- Banco de dados
- Ambientes
- Princípios da implantação de microsserviços
- Execução isolada
- Foco na automação
- Infraestrutura como código
- Implantação sem downtime
- Gerenciamento de estado desejado
- Opções para implantação
- Máquinas físicas
- Máquinas virtuais
- Contêineres
- Contêineres de aplicações
- Plataforma como Serviço (PaaS)
- Função como Serviço (FaaS)
- Qual é a opção de implantação correta para você?
- Kubernetes e a orquestração de contêineres
- Razões para a orquestração de contêineres
- Uma visão simplificada dos conceitos do Kubernetes
- Multitenancy e federação
- Cloud Native Computing Foundation
- Plataformas e portabilidade
- Helm, Operator e CRDs, minha nossa!
- E o Knative
- Futuro
- Devo usá-lo?
- Entrega progressiva
- Diferenciando implantação de lançamento
- Em direção a uma entrega progressiva
- Flags de funcionalidade
- Lançamento canário
- Execução paralela
- Resumo
- Capítulo 9 ■ Testes
- Tipos de testes
- Escopo dos testes
- Testes de unidade
- Testes de serviço
- Testes fim a fim
- Custo-benefício
- Implementando testes de serviço
- Mocks ou stubs
- Um serviço de stubs mais inteligente
- Implementando (aqueles complicados) testes fim a fim
- Testes frágeis e instáveis
- Quem escreve esses testes fim a fim?
- Por quanto tempo os testes fim a fim devem ser executados?
- Acúmulo de alterações
- Metaversão
- Incapacidade de testar de forma independente
- Devemos evitar testes fim a fim?
- Testes de contrato e CDCs
- Palavra final
- Experiência dos desenvolvedores
- Dos testes em pré-produção aos testes em produção
- Tipos de testes no ambiente de produção
- Deixando os testes em produção seguros
- MTTR em vez de MTBF?
- Testes multifuncionais
- Testes de desempenho
- Testes de robustez
- Resumo
- Capítulo 10 ■ Da monitoração à observabilidade
- Instabilidade, pânico e confusão
- Um único microsserviço, um único servidor
- Um único microsserviço, vários servidores
- Vários serviços, vários servidores
- Observabilidade versus monitoração
- Os pilares da observabilidade? Espere um pouco
- Blocos de construção para a observabilidade
- Agregação de logs
- Agregação de métricas
- Tracing distribuído
- Estamos indo bem?
- Alertas
- Monitoração semântica
- Testes no ambiente de produção
- Padronização
- Seleção de ferramentas
- Democráticos
- Fáceis de integrar
- Fornecem contexto
- Tempo real
- Apropriados para a sua escala
- Inteligência na máquina
- Por onde começar
- Resumo
- Capítulo 11 ■ Segurança
- Princípios básicos
- Princípio do privilégio mínimo
- Defesa em profundidade
- Automação
- Incluindo a segurança no processo de entregas
- As cinco funções da cibersegurança
- Identificar
- Proteger
- Detectar
- Responder
- Recuperar-se
- Fundamentos da segurança de aplicações
- Credenciais
- Patching
- Backups
- Reconstrução
- Confiança implícita versus confiança zero
- Confiança implícita
- Confiança zero
- É um espectro
- Protegendo os dados
- Dados em trânsito
- Dados em repouso
- Autenticação e autorização
- Autenticação de serviço a serviço
- Autenticação de pessoas
- Implementações comuns de SSO
- Gateway de SSO
- Autorizações mais específicas
- Problema do confused deputy
- Autorização upstream centralizada
- Descentralizando a autorização
- JSON Web Tokens
- Resumo
- Capítulo 12 ■ Resiliência
- O que é resiliência?
- Robustez
- Recuperação
- Extensibilidade com elegância
- Adaptabilidade sustentável
- E a arquitetura de microsserviços
- As falhas estão em todos os lugares
- Quando é demais?
- Degradação das funcionalidades
- Padrões de estabilidade
- Timeouts
- Novas tentativas
- Bulkheads
- Circuit breakers
- Isolamento
- Redundância
- Middleware
- Idempotência
- Diluindo o seu risco
- Teorema CAP
- Sacrificando a consistência
- Sacrificando a disponibilidade
- Sacrificando a tolerância à partição?
- AP ou CP?
- Não é uma questão de tudo ou nada
- E o mundo real
- Engenharia de caos
- Game Days
- Experimentos no ambiente de produção
- Partindo da robustez e indo além
- Acusações
- Resumo
- Capítulo 13 ■ Escalabilidade
- Quatro eixos da escalabilidade
- Escalabilidade vertical
- Duplicação horizontal
- Partição de dados
- Decomposição funcional
- Combinando modelos
- Comece em pequena escala
- Caching
- Para desempenho
- Para escalabilidade
- Para robustez
- Onde usar um cache
- Invalidação
- Regra de ouro do caching
- Dados atualizados versus otimização
- Envenenamento de cache: uma lição
- Escalabilidade automática
- Começando de novo
- Resumo
- Pessoas
- Capítulo 14 ■ Interfaces de usuário
- Em direção ao digital
- Modelos de responsabilidade
- Razões para haver equipes dedicadas de frontend
- Em direção a equipes alinhadas a fluxos
- Compartilhando especialistas
- Garantindo a consistência
- Resolvendo os desafios técnicos
- Padrão: frontend monolítico
- Quando usar
- Padrão: microfrontends
- Implementação
- Quando usar
- Padrão: decomposição baseada em páginas
- Quando usar
- Padrão: decomposição baseada em widgets
- Implementação
- Quando usar
- Limitações
- Padrão: gateway de agregação central
- Responsabilidade
- Diferentes tipos de interfaces de usuário
- Preocupações variadas
- Quando usar
- Padrão: backend para frontend (BFF)
- Quantos BFFs?
- Reutilização de código e BFFs
- BFFs para web desktop e além
- Quando usar
- GraphQL
- Uma abordagem híbrida
- Resumo
- Capítulo 15 ■ Estruturas organizacionais
- Empresas com baixo acoplamento
- Lei de Conway
- Evidências
- Tamanho das equipes
- Entendendo a lei de Conway
- Equipes pequenas, empresa grande
- Sobre a autonomia
- Responsabilidade forte versus coletiva
- Responsabilidade forte
- Responsabilidade coletiva
- No nível de uma equipe versus no nível organizacional
- Achando um equilíbrio entre os modelos
- Equipes de capacitação
- Comunidades de prática
- A plataforma
- Microsserviços compartilhados
- Difícil demais para separar
- Alterações abrangentes
- Gargalos na entrega
- Open source interno
- Papel dos core committers
- Maturidade
- Ferramentas
- Microsserviços modulares e plugáveis
- Revisões de alterações
- Serviço órfão
- Estudo de caso: realestate com au
- Distribuição geográfica
- Lei de Conway ao inverso
- Pessoas
- Resumo
- Capítulo 16 ■ O arquiteto em evolução
- O que há em um nome?
- O que é arquitetura de software?
- Tornando as mudanças possíveis
- Uma visão evolucionária para o arquiteto
- Definindo as fronteiras do sistema
- Uma construção social
- Habitabilidade
- Uma abordagem com princípios
- Objetivos estratégicos
- Princípios
- Práticas
- Combinado princípios e práticas
- Um exemplo do mundo real
- Direcionando uma arquitetura em evolução
- Arquitetura em uma empresa alinhada a fluxos
- Construindo uma equipe
- Padrão necessário
- Monitoração
- Interfaces
- Segurança na arquitetura
- Governança e a estrada pavimentada
- Exemplares
- Template personalizado para os microsserviços
- Estrada pavimentada em escala
- Débito técnico
- Tratamento de exceções
- Resumo
- Posfácio: reunindo tudo
- Bibliografia
- Glossário
- Índice remissivo
Sobre o autor
Depois de ter trabalhado em várias startups e durante doze anos na ThoughtWorks, Sam Newman atualmente atua como consultor independente. Especialista em microsserviços, nuvem e entrega contínua, Sam ajuda os clientes no mundo todo a entregar softwares de modo mais rápido e confiável por meio de treinamento e consultoria. É um palestrante experiente,… Ver perfil completo ▶
Livros relacionados
Recursos
Opinião dos leitores
Jose R A
Excelente livro






