micro-serviços e a infra INTERAÇÃO ENTRE CLIENTES No nosso domínio a interação entre os clientes é baixa PADRÕES DE DADOS Cada micro serviço é responsável por salvar um tipo de dado dos clientes DIVIDIR POR CLIENTE O melhor caminho foi separar a infra por grupos de clientes Plano de escalabilidade
são os piores gargalos CAMADA DE ROTEAMENTO Os serviços teriam que saber rotear queries e escritas pro banco certo DIVIDIR O BANCO DE DADOS Cada micro-serviço teria que se conectar com N bancos Database Shards? db shard 1 microservice db shard 0 db shard 2
todos microsserviços ALTO RISCO Migração com alto risco de introduzir bugs e acoplar código de negócio com código de infraestrutura RESOLVE APENAS 1 PROBLEMA Resolve apenas o problema de gargalo do banco mas não resolve os problemas de mensageria Database Shards? db shard 1 micro-service db shard 0 db shard 2 problemas com essa solução
do banco de dados MAIS ESCALABILIDADE Unidades de infraestrutura idênticas e facilmente criadas ISOLAMENTO DE RISCOS Mais difícil uma falha afetar o Nubank inteiramente Infrastructure Shards! service 1 service 2 service 3 shard 03 service 1 service 2 service 3 shard 02 service 1 service 2 service 3 shard 01
da JVM. PRODUCTIVE Simples e fácil de aprender e possui um workflow focado em produtividade usando REPL FUNCIONAL Enforça o paradigma funcional. Possui estrutura de dados imutáveis Clojure
dados STORAGE DESACOPLADO Roda em cima da camada de storage o que nos permite usar diferentes tipos de storage para diferentes environments QUERIES NO PASSADO Essa característica permite que a gente consulte como o dado estava meses atrás Datomic
os serviços do Nubank. Praticamente toda interação crítica entre serviços é via kafka RESILIÊNCIA Kafka trás muita resiliência para nossos sistemas. Além de algumas implementações como Deadletters & Circuit-breakers MENSAGENS PERSISTENTES As mensagens são persistidas em disco e ficam lá mesmo após serem consumidas. A mesmas mensagem pode ser consumida várias vezes Kafka
e todo IO fica isolado ADAPTERS Transforma os dados para adaptá-los do mundo externo para o mundo interno e vice-versa PORTS Por onde os dados entram e saem da aplicação Arquitetura de Microserviço
kubernetes e precisamos atualizar todos os clusters? ALTERAR SYSTEM UNITS A gente precisa mudar a forma como os serviços enviam logs pro nosso centralizador de logs? ATUALIZAR VERSÕES A gente precisa atualizar a versão de algum componente crítico na nossa infra? (Docker, CoreOS, Kafka...)
quando o volume de máquinas que a empresa tem é baixo. Porém pode dar muito errado caso for feito sem cuidado. SCRIPTS DE AUTOMAÇÃO? Pode gerar estados inconsistentes. Gerando crashes que precisam de solução imediata e que serão difíceis de debugar.
ter feedbacks rápidos sobre as mudanças SEGURO PARA GRANDES MUDANÇAS ter feedbacks rápidos e ser fácil de se recuperar traz segurança para fazermos grandes mudanças com confiança FÁCIL DE SE RECUPERAR quando as coisas saem errado é fácil de se recuperar e reduzir o impacto para os clientes
Aprendidas Velocidade Nós somos tão rápidos quanto nossa automação Autonomia Infraestrutura como código para empoderar as pessoas Resiliência Arquitetura planejada para falhas parciais