Microsserviços

História

  • Termo Micro-Webservices citado em 2005

  • Nascimento do termo microsserviço em 2011

  • Começou ser utilizado na Netflix e na Amazon

Definições

  • Aplicação como uma suíte de serviços, cada um rodando em seu próprio processo

  • Comunicação através de mecanismos leves como HTTP/Rest

  • Divisão das responsabilidades de uma aplicação

Pontos fortes

  • Melhor modularização

  • Componentização com serviços

  • Escalabilidade mais precisa

  • Interoperabilidade

  • Facilitar implantação

Dificuldades

  • Divisão correta dos serviços

  • Desenvolvimento de serviços distribuídos

  • Estado, consistência e confiabilidade da rede requerem novas hipóteses

  • Desafios operacionais

Arquitetura Cloud

  • Necessidade de mais velocidade para implantar novas versões

  • Menor preocupação com a infraestrutura

  • Migração de sistemas de AppServer para o Cloud

Microsserviço vs Monolítico

  • Monolítico: unidade de implantação única:

    • WAR único

    • WebApplication .Net

    • Banco de dados único

Microsserviço vs SOA

  • Os serviços SOA são implantados como monolitos

  • A lógica de negócio está concentrada no meio de comunicação

Ilustração de um ESB

SOA ESB

Patterns de Microsserviços

  • Decomposição

  • Implantação

  • Configuração

  • Comunicação

  • Dados

  • Monitoramento

Decomposição

  • Como dividir um sistema em microsserviços?

    • Decomposição por assuntos negociais

    • Decomposição por subdominíos

    • Decomposição por reuso não funcional

Evolução da decomposição

A decomposição pode evoluir ao longo do tempo:

  • Alguns serviços podem ser divididos porque crescem

  • Serviços podem ser reagrupados pois estão mais ligados que previsto

  • Novos sub-assuntos podem ser descobertos

Implantação

Como implantar os microsserviços?

  • Serviços em um ou mais VMs

  • Containerização

  • Plataforma aplicativa (Cattle, Kubernetes)

Implantação

  • Frameworks aplicativos

    • Netflix OSS

    • Spring Cloud

  • Service Mesh

    • Istio

    • Linkerd

Service Mesh

ServiceMesh

Spring Cloud Sidecar

Sidecar SpringCloud

DevOps

  • Minimizar o desafio de entregar rapidamente

  • Developers + Operators (+ Profissionais de Segurança)

  • Unificação da Cadeia de Produção

Pipelines de Implantação

  • Manifestação automatizada do processo de entrega

  • Colaboração entre as áreas envolvidas no pipeline

  • Automação do Processo = Retorno rápido

Configuração

  • Configuração externalizada

  • Configuração centralizada

  • Suporte Versionamento

Comunicação

  • Service Registry and Discovery

  • API gateway

  • Circuit Breaker

  • Integração por transações

Service Registry

  • Os serviços precisam se localizar para executar comandos remotos

  • Esse registro deve ser dinâmico

Service Discovery

  • Client-side discovery (Eureka Client)

  • Platform-provided Service Discovery (DNS + Routing)

Service Registry and Discovery

Service Discovery

API Gateway - Introdução

Chamar muitos serviços, requer:

  • Configuração de CORS

  • Conhecimento de muitos detalhes, endereços

  • Gestão de segurança “espalhada”

API Gateway - Vantagens

Simplifica acesso aos serviços:

  • Ponto de contato único

  • Gestão centralizada da autenticação

  • Não precisa de CORS

API Gateway - Implementação

  • Pattern implementado: Fachada

  • Integração com SSO + Geração de Token JWT

  • Pode ter um gateway por tipo de cliente (Pattern: Backend for Frontend)

  • Pode ser utilizado para implementar o Strangler Application Pattern

Comunicação - Visão Geral

Microsservicos Visao Geral

Circuit Breaker

  • Resiliência e Tolerância a falhas

  • Também Client-Side e na Plataforma

  • Proteção com as falhas em cascata

  • Abre o circuito em caso de falha = tira componente com defeito

  • Fecha o circuito de volta depois de um intervalo

  • Uso de Fallbacks em caso de falha

Circuit Breaker - Stats

Com um uptime de 99,95%:

  • Único serviço: 22 min. de downtime/mês

  • 30 serviços: 11 horas de downtime/mês

  • 100 serviços: 36 horas de downtime/mês (ouch!)

Integração por transações

  • CDC (Change Data Capture)

  • Transaction Log

  • Kafka Connect

Dados

A parte mais complexa dos microsserviços!!

  • Database por serviço

  • API Composition

  • Saga

  • CQRS

  • Event sourcing

API Composition

  • Permite juntar dados oriundos de vários serviços

  • Efetua pesquisas em vários serviços para juntar os dados

  • Exemplo: query para retornar dados básicos de um processo com pessoas envolvidas e pagamentos efetuados

  • Ponto importante: quem atua como API Composer?

API Composition - Exemplo

APIComposition

SAGA

  • Permite resolver o problema de consistência dos dados

  • Evita o uso de transação distribuída

  • Usa compensação de transação para Rollback

CQRS

Command Query Responsibility Segregation

  • Separa a lógica de recuperação e de modificação dos dados

  • Mantém uma View somente leitura dos dados

  • Resolve os problemas de performance da API Composition

Event Sourcing

  • Eventos como fonte de verdade

  • O estado é uma agregação de eventos

  • Histórico agregado

  • Arquitetura Lambda

CQRS + Domain Event

Sincronização de uma View usando Domain Events

CQRS DomainEvent

Monitoramento

  • Agregação de Logs

  • Métricas da Aplicação

  • Auditoria

  • Tracing Distribuído

  • API Health check