Construindo Microsserviços Orientados a Eventos – 2ª Edição
Utilizando dados organizacionais em escala
Descrição do livro
“O guia definitivo sobre arquiteturas de streaming de dados. Leitura obrigatória para qualquer profissional que atue na área.” – Jay Kreps, cofundador e CEO da Confluent
“O segredo dos especialistas para gerenciar escala e domar a complexidade.” – K. Scott Morrison, consultor e ex-CTO da PHEMI Systems
“Este livro oferece tudo o que você precisa para compreender microsserviços orientados a eventos, desde os conceitos básicos de modelagem de dados como eventos até as questões práticas de testes e implantação em produção.” – Martin Kleppmann, professor associado na Universidade de Cambridge e autor de Designing Data-Intensive Applications
Microsserviços orientados a eventos oferecem a abordagem ideal para aproveitar fluxos de eventos, reagindo e respondendo a mudanças à medida que elas ocorrem em sua organização. Com este guia totalmente revisado e atualizado, você aprenderá a aplicar os princípios da arquitetura orientada a eventos para criar fluxos de eventos e construir aplicações poderosas baseadas em microsserviços.
O autor Adam Bellemare conduz o leitor por todo o processo de criação de arquiteturas de microsserviços orientados a eventos, desde os conceitos básicos até aplicações avançadas. Ao abordar eventos, fluxos de eventos e microsserviços, este livro apresenta padrões poderosos e reutilizáveis para compartilhar e utilizar dados importantes em toda a organização.
• A teoria e os conceitos básicos das arquiteturas orientadas a eventos.
• Como projetar e construir arquiteturas de microsserviços orientados a eventos para entregar valor excepcional ao negócio.
• Padrões de design de eventos e de fluxos de eventos, incluindo esquemas e evolução ao longo do tempo.
• Padrões de aplicações de microsserviços, tanto como serviços isolados quanto como uma coleção de múltiplos serviços.
• Ferramentas e técnicas para colocar em funcionamento o ecossistema de microsserviços orientados a eventos e pavimentar o caminho para o sucesso.
• Integração de aplicações orientadas a eventos na arquitetura existente.
Ver menos ▲Sumário
Sumário
- Apresentação
- Prefácio
- PARTE I: Introdução a microsserviços orientados a eventos
- CAPÍTULO 1: Por que microsserviços orientados a eventos?
- O que são microsserviços orientados a eventos?
- Introdução ao design orientado a domínio e contextos delimitados
- Microsserviços, fronteiras e estruturas de comunicação
- Estruturas de comunicação de negócio
- Estruturas de comunicação de implementação
- Estruturas de comunicação de dados
- Lei de Conway e estruturas de comunicação
- Estruturas de comunicação na computação tradicional
- Opção 1: Criar um novo serviço
- Opção 2: Adicioná-lo ao serviço existente
- Vantagens e desvantagens de cada opção
- Cenário da equipe (continuação)
- Comunicação de dados orientada a eventos
- Exemplo de equipe utilizando microsserviços orientados a eventos
- Microsserviços de solicitação-resposta
- Desvantagens dos microsserviços de solicitação-resposta
- Vantagens dos microsserviços de solicitação-resposta
- Resumo
- CAPÍTULO 2: Fundamentos de eventos e fluxos de eventos
- O que é um evento?
- O que é um fluxo de eventos?
- Sistemas de mensageria efêmeros
- Enfileiramento
- Filas por meio de brokers de filas modernos
- Filas via Apache Kafka
- Estrutura de um evento
- Eventos sem chave
- Eventos com chave
- Eventos de entidade
- Reparticionamento de fluxos de eventos
- Coparticionamento de fluxos de eventos
- Agregando estado a partir de eventos com chave
- Materializando o estado a partir de eventos de entidade
- Exclusão de eventos e compactação de fluxos de eventos
- Arquitetura kappa
- Arquitetura lambda
- Definições de dados de eventos e esquemas
- Impulsionando microsserviços com o broker de eventos
- Escolhendo um broker de eventos
- Ferramentas de suporte
- Serviços hospedados
- Bibliotecas de cliente e frameworks de processamento
- Suporte da comunidade
- Armazenamento indefinido e em camadas
- Resumo
- CAPÍTULO 3: Fundamentos de microsserviços orientados a eventos
- Conceitos básicos de microsserviços orientados a eventos
- Produtor/consumidor básico
- Microsserviço orientado a eventos baseado em processamento de fluxo
- Consulta SQL em streaming
- Aplicação legada
- Topologias e microsserviços orientados a eventos
- Topologia de microsserviço
- Topologia de negócio
- Responsabilidades de microsserviços orientados a eventos
- Qual deve ser o tamanho de um microsserviço?
- Gerenciando microsserviços em escala
- Colocando microsserviços em contêineres
- Colocando microsserviços em máquinas virtuais
- Gerenciando contêineres e máquinas virtuais
- Arcando com o custo estrutural dos microsserviços
- Contratos de serviço
- Resumo
- PARTE II: Eventos e fluxos de eventos
- CAPÍTULO 4: Esquemas e contratos de dados
- Breve introdução sobre serialização e desserialização
- O que é um esquema?
- Quais são as opções de tecnologia de esquemas?
- Protocol Buffers do Google, também conhecido como Protobuf
- Apache Avro
- JSON Schema
- Evolução de esquemas: alterando esquemas ao longo do tempo
- O que é um contratos de dados?
- Negociando uma mudança drástica de esquema
- 1ª Etapa: Projetar o novo esquema
- 2ª Etapa: Consultar os consumidores existentes e obter aprovação
- 3ª Etapa: Planejar o lançamento, a migração e a descontinuação
- 4ª Etapa: Disponibilizar os novos fluxos de eventos
- Papel do registro de esquemas
- Criptografia em nível de campo
- Integração com catálogos de dados
- Resumo
- CAPÍTULO 5: Projetando eventos
- Introdução a tipos de eventos
- Eventos de estado e transferência de estado transportada por eventos
- Eventos de estado atual
- Eventos de estado antes/depois
- Eventos delta
- Eventos delta para event sourcing
- Problemas com eventos delta
- Em que contextos utilizar eventos delta e eventos de estado?
- Eventos híbridos: eventos de estado com um pouco de delta
- Eventos de medição
- Eventos de medição viabilizam agregações
- Fontes de eventos de medição podem ser suscetíveis a perdas
- Eventos de medição podem sustentar aplicações sensíveis ao tempo
- Eventos de notificação
- Design de eventos para privacidade de dados e o direito ao esquecimento
- Resumo
- CAPÍTULO 6: Integrando arquiteturas orientadas a eventos com sistemas existentes
- O que é liberação de dados?
- Antipadrão de escrita dupla
- Padrões de liberação de dados
- Frameworks de liberação de dados
- Liberação de dados utilizando captura de dados de mudança (CDC)
- Criando um snapshot do estado inicial do conjunto de dados
- Vantagens da captura de dados de mudança utilizando logs do repositório de dados
- Desvantagens da captura de dados de mudança utilizando logs do repositório de dados
- Liberação de dados com consulta por meio de polling
- Atualização incremental
- Vantagens da atualização baseada em consultas
- Desvantagens da atualização baseada em consultas
- Liberação de dados utilizando tabelas outbox transacionais
- Considerações de desempenho
- Isolando modelos de dados internos
- Garantindo compatibilidade de esquemas
- Capturando dados de mudança utilizando triggers
- Realizando mudanças de definição de dados em conjuntos de dados sob captura
- Concessões na liberação de dados
- Destinando dados de eventos para repositórios de dados
- Impactos da destinação e da extração em um negócio
- Resumo
- CAPÍTULO 7: Desnormalização e eventificação
- Eventificação na tabela outbox transacional
- Eventificação em um serviço dedicado
- O que deve entrar no evento? E o que deve ficar de fora?
- Dimensões de mudança lenta
- Tipo 1: Sobrescreve com o novo valor
- Tipo 2: Adiciona o novo valor
- Resumo
- CAPÍTULO 8: Microsserviços com estado orientados a eventos
- Partições de fluxos de eventos e atribuições de consumidores
- Reparticionamento de fluxos de eventos
- Coparticionamento de fluxos de eventos
- Atribuindo partições dentro de um grupo de consumidores
- Selecionando um repositório de estado para o microsserviço
- Materializando estado em um repositório de estado interno
- Utilizando um fluxo de eventos de changelog para recuperação de estado
- Materializando estado global
- Vantagens dos repositórios de estado internos
- Desvantagens dos repositórios de estado internos
- Escalonamento e recuperação de estado interno
- Materializando estado em um repositório de estado externo
- Vantagens do estado externo
- Desvantagens do estado externo
- Escalonamento e recuperação com repositórios de estado externos
- Reconstruindo o repositório de estado externo
- Transações e processamento do tipo effectively once
- Exemplo: para um serviço de contabilidade de estoque
- Processamento do tipo effectively once com transações cliente-broker
- Processamento do tipo effectively once sem transações cliente-broker
- Resumo
- CAPÍTULO 9: Processamento determinístico de fluxos
- Determinismo com fluxos de trabalho orientados a eventos
- Timestamps
- Sincronizando timestamps distribuídos
- Agendamento de eventos e processamento determinístico
- Agendadores de eventos personalizados
- Processamento com base no tempo do evento, de processamento e de ingestão
- Extração de timestamps pelo consumidor
- Chamadas de solicitação-resposta a sistemas externos
- Watermarks
- Watermarks no processamento paralelo
- Tempo do fluxo
- Eventos fora de ordem e eventos que chegam atrasados
- Eventos que chegam atrasados com watermarks e tempo do fluxo
- Causas e impactos de eventos fora de ordem
- Funções sensíveis ao tempo e janelamento
- Tratando eventos que chegam atrasados
- Reprocessamento versus processamento quase em tempo real
- Falhas intermitentes e eventos que chegam atrasados
- Problemas de conectividade entre produtor e broker de eventos
- Resumo e leituras adicionais recomendadas
- CAPÍTULO 10: Construindo fluxos de trabalho com microsserviços
- Padrão de coreografia
- Modificando um fluxo de trabalho coreografado
- Monitorando um fluxo de trabalho coreografado
- Padrão de orquestração
- Exemplo simples de orquestração orientada a eventos
- Exemplo simples de orquestração por solicitação-resposta
- Modificando um fluxo de trabalho de orquestração
- Monitorando um fluxo de trabalho de orquestração
- Orquestração por solicitação-resposta versus orientada a eventos
- Transações distribuídas e padrão saga
- Sagas por meio de coreografia
- Sagas por meio de orquestração
- Padrão de fluxo de trabalho de compensação
- Implementando orquestração por meio de um mecanismo de execução durável
- Event sourcing por meio de log durável do tipo append-only
- Considerações adicionais sobre execução durável
- Resumo
- PARTE III: Frameworks de microsserviços orientados a eventos
- CAPÍTULO 11: Microsserviços de produtor/consumidor básico
- Cenários em que os BPCs funcionam bem
- Integração com sistemas existentes utilizando o padrão sidecar
- Lógica de negócio com estado que não depende da ordem dos eventos
- Quando o repositório de dados executa grande parte do trabalho
- Escalonamento independente do processamento e do repositório de dados
- Resumo
- CAPÍTULO 12: Microsserviços com frameworks pesados
- Evolução dos frameworks pesados
- Exemplo: janelamento de sessão de cliques e visualizações
- Funcionamento interno de frameworks pesados
- Vantagens e desvantagens
- Opções de configuração de cluster e modos de execução
- Utilizar um serviço hospedado
- Construir e gerenciar o próprio cluster
- Modos de submissão de aplicações
- Modo driver
- Modo cluster
- Tratando estado e utilizando checkpoints
- Escalonando aplicações e tratando partições de fluxo de eventos
- Escalonando uma aplicação por meio de reinicialização
- Escalonando uma aplicação enquanto ela está em execução
- Escalonamento automático de aplicações
- Recuperando-se de falhas
- Considerações sobre multitenancy
- Linguagens e sintaxe
- Escolhendo um framework
- Resumo
- CAPÍTULO 13: Microsserviços com frameworks leves
- Exemplo: join de dados de Product com dados de Brand utilizando uma chave estrangeira
- Funcionalidades internas dos frameworks leves
- Shuffle e reparticionamento de eventos
- Tratando estado e utilizando changelogs
- Escalonando e recuperando-se de falhas
- Atribuição de estado
- Replicação de estado e réplicas quentes
- Resumo
- CAPÍTULO 14: SQL em streaming
- Conceitos básicos de consulta contínua
- Transformando fluxos em tabelas para consultas SQL em streaming
- Exemplo: enriquecimento de dados com Flink SQL
- Executando código SQL em streaming
- Executando código SQL pela interface de linha de comando
- Executando código SQL dentro da aplicação
- Executando código SQL a partir de um notebook
- Executando código SQL por meio de um gateway
- SQL como sidecar
- Chamadas a funções definidas pelo usuário
- Resumo
- CAPÍTULO 15: Microsserviços utilizando funções como serviço (FaaS)
- Por que utilizar funções como serviço?
- Construindo microsserviços com funções
- Inicializações a frio e inicializações a quente
- Encerramento e desligamento
- Escolhendo um provedor de FaaS
- Iniciando funções com triggers
- Acionamento baseado em novos eventos: o listener de fluxo de eventos
- Acionamento baseado no lag do grupo de consumidores
- Acionamento baseado em agendamento
- Acionamento utilizando webhooks
- Acionamento baseado em eventos de recursos
- Escalonando soluções de FaaS
- Mantendo estado
- Funções chamando outras funções
- Padrão de comunicação assíncrona orientada a eventos
- Padrão de chamada direta
- Tratando falhas de funções de FaaS
- Orquestradores de funções duráveis
- Codificando o orquestrador em um documento proprietário
- Codificando o orquestrador em um código-fonte
- Resumo
- PARTE IV: Consistência, dados incorretos e ferramentas de apoio
- CAPÍTULO 16: Consistência eventual
- Convergindo para a consistência, um evento por vez
- Estratégias para lidar com a consistência eventual
- Utilizar tipos de eventos de estado
- Expor a consistência eventual na resposta do servidor
- Utilizar comunicação orientada a eventos em vez de solicitação-resposta
- Prevenir falhas para evitar inconsistências
- Resumo
- CAPÍTULO 17: Integrando microsserviços orientados a eventos e de solicitação-resposta
- Transformando solicitações em eventos
- Transformando solicitações em eventos utilizando um proxy REST
- Integrando APIs de solicitação-resposta de terceiros
- Disponibilizando dados por meio de uma API de solicitação-resposta
- Atendendo a solicitações com repositórios de estado internos
- Atendendo a solicitações com repositórios de estado externos
- Tratando solicitações em um fluxo orientado a eventos
- Processando eventos para interfaces de usuário
- Exemplo: fluxo de trabalho de publicação de um jornal
- Exemplo: separando serviços de aprovação do editor e do anunciante
- Micro-frontends para aplicações de solicitação-resposta
- Exemplo: aplicação de busca e avaliação de atrações
- Vantagens dos micro-frontends
- Desvantagens dos micro-frontends
- Resumo
- CAPÍTULO 18: Lidando com dados incorretos em fluxos de eventos
- Principais tipos de dados incorretos em fluxos de eventos
- Tipo 1: Dados corrompidos
- Tipo 2: Evento sem esquema
- Tipo 3: Evento com esquema inválido
- Tipo 4: Evolução de esquema incompatível
- Tipo 5: Valor logicamente inválido em um campo
- Tipo 6: Valor logicamente válido, mas semanticamente incorreto
- Tipo 7: Eventos ausentes
- Tipo 8: Eventos que não deveriam ter sido produzidos
- Prevenindo dados incorretos com esquemas, validação e testes
- Prevenindo dados incorretos dos Tipos 1 a 5 com esquemas e evolução de esquemas
- semanticamente incorreto)
- deveriam ter sido produzidos)
- Prevenindo dados incorretos dos Tipos 1 a 5 com esquemas e evolução de esquemas
- Papel do design de eventos na correção de dados incorretos
- Corrija uma vez e corrija corretamente com eventos de estado
- Construir para frente: desfazendo deltas incorretos com novos deltas
- Último recurso: retroceder, reconstruir e tentar novamente
- Retroceder, reconstruir e tentar novamente a partir de fonte externa
- Retroceder, reconstruir e tentar novamente com o tópico como fonte
- Resumo
- CAPÍTULO 19: Ferramentas de suporte
- Escolhendo a infraestrutura: construir versus comprar
- Infraestrutura como código para clusters e serviços
- Gerenciamento de identidade e acesso
- Sistema de atribuição de microsserviços para equipes
- Criação e modificação de fluxos de eventos
- Marcação de metadados de fluxos de eventos e microsserviços
- Cotas
- Registro de esquemas
- Gerenciando permissões de fluxos de eventos
- Notificações de criação e modificação de esquemas
- Gerenciamento de offsets de consumidores
- Gerenciamento de estado e redefinição da aplicação
- Monitoramento de lag de offset do consumidor
- Simplificando o processo de criação de microsserviços
- Controles de gerenciamento de contêineres
- Implantações multicluster e replicação de fluxos de eventos
- Rastreamento de dependências e visualização de topologia
- Resumo
- CAPÍTULO 20: Realizando testes em microsserviços orientados a eventos
- Princípios gerais de realização de testes
- Realizando testes unitários em funções de microsserviços
- Realizando testes unitários em funções sem estado
- Realizando testes unitários em funções com estado
- Realizando testes na topologia completa orientada a eventos
- Realizando testes de evolução e compatibilidade de esquemas
- Realizando testes de integração em microsserviços orientados a eventos
- Realizando testes de integração local
- Criando um ambiente de teste dentro do tempo de execução do código de teste
- Criando um ambiente de teste com contêineres
- Integrando serviços hospedados, gerenciados e SaaS
- Testes utilizando serviços de nuvem totalmente remotos
- Criar de forma programática um ambiente temporário de testes single-tenant
- Realizando testes em um ambiente multitenant durável
- Realizando testes utilizando o ambiente de produção
- Escolhendo uma estratégia de testes de integração totalmente remota
- Resumo
- CAPÍTULO 21: Implantando microsserviços orientados a eventos
- Princípios da implantação de microsserviços
- Componentes arquiteturais da implantação de microsserviços
- Sistemas de integração contínua, entrega contínua e implantação contínua
- Sistemas de gerenciamento de contêineres e hardware de commodity
- Padrão básico de implantação com parada total
- Padrão Rolling Update
- Padrão de mudança drástica de esquema
- Variante 1: Gravar os eventos com mudança drástica no mesmo fluxo antigo
- Variante 2: Gravar os eventos com mudança drástica em um novo fluxo
- Variante 3: Gravar os eventos antigos e novos em paralelo
- Reprocessando dados históricos para mudanças drásticas de esquema
- Padrão de implantação azul-verde
- Resumo
- CAPÍTULO 22: Conclusão
- Estrutura de comunicação de dados
- Domínios de negócio e contextos delimitados
- Ferramentas, infraestrutura e custo estrutural dos microsserviços
- Design de eventos
- Eventos esquematizados
- Liberação de dados é a única fonte da verdade
- Microsserviços
- Opções de implementação de microsserviços
- Realização de testes
- Implantação
- Considerações finais
- Índice remissivo
Sobre o autor
Adam Bellemare é líder técnico sênior na Confluent. Além de Construindo Microsserviços Orientados a Eventos, é autor do livro Building an Event-Driven Data Mesh. Antes disso, trabalhou com engenheiro de plataformas de dados e streaming de dados na Shopify e na Flipp, construindo, desenvolvendo e promovendo arquiteturas e microsserviços orientados… Ver perfil completo ▶
Livros relacionados
Recursos
Opinião dos leitores
Ailton T
O livro “Construindo Microsserviços Orientados a Eventos – 2ª Edição” apresenta uma abordagem muito prática sobre arquiteturas distribuídas e comunicação assíncrona entre serviços. O conteúdo mostra bem os benefícios e desafios de sistemas orientados a eventos, principalmente em cenários que exigem escalabilidade, desacoplamento e maior resiliência. Achei interessante como o livro explora não apenas a parte técnica da implementação, mas também questões relacionadas a consistência, rastreabilidade, observabilidade e governança dos eventos. Isso ajuda bastante a entender os impactos arquiteturais desse modelo no dia a dia de sistemas corporativos. A leitura é bastante relevante para quem trabalha com microsserviços, mensageria e integrações modernas, trazendo exemplos e discussões alinhadas com problemas reais enfrentados em ambientes distribuídos. No geral, considero um material muito útil para profissionais que desejam aprofundar conhecimentos em arquiteturas orientadas a eventos e entender melhor as boas práticas envolvidas nesse tipo de solução.






