Slide 1

Slide 1 text

Cloud Native Banking Alexandre Cisneiros Software Engineer Diogo Beato Software Engineer Como o Nubank usa imutabilidade na nuvem para atender milhões de clientes

Slide 2

Slide 2 text

Internacional, sem taxas e controle total pelo app. Eleito o cartão de crédito favorito dos brasileiros pela PNCC Cartão de Crédito

Slide 3

Slide 3 text

um programa de pontos totalmente diferente de outras experiências no mercado brasileiro. 100% digital, simples e intuitivo. Rewards

Slide 4

Slide 4 text

nossa visão de uma conta de banco simples e inteligente. Seu dinheiro rendendo sempre Nuconta

Slide 5

Slide 5 text

O Maior Banco Digital Independente do Mundo

Slide 6

Slide 6 text

Autonomia Times empoderados para executar independentemente Cloud Native Banking Velocidade Sistemas evoluindo rapidamente e de forma incremental Segurança Bancos precisam de reputação Estratégia Baixo custo inicial e time to market

Slide 7

Slide 7 text

Crescimento acelerado em um domínio crítico 30M+ aplicações únicas 12M+ clientes 198 países

Slide 8

Slide 8 text

Crescimento acelerado em um domínio crítico 1B+ requisições http/dia 270+ microsserviços 260+ engenheiro(a)s 700M+ mensagens kafka consumidas/dia 50+ deploys/dia

Slide 9

Slide 9 text

Message System Lags de mensageria impactando a UX Database Limite no throughput de escrita do banco Problemas de escalabilidade

Slide 10

Slide 10 text

DIVIDIR O TRABALHO Era preciso dividir a carga entre os 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

Slide 11

Slide 11 text

GARGALO NO BANCO DE DADOS Vazão de escrita no banco 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

Slide 12

Slide 12 text

MUITO ESFORÇO Teria que ter um enorme esforço para mudar 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

Slide 13

Slide 13 text

CÓPIAS DA INFRA TODA Ao invés de fazer sharding apenas 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

Slide 14

Slide 14 text

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 auth compras boletos global Nubank Cloud

Slide 15

Slide 15 text

Fácil de Escalar shard 03 shard 02 shard 01 global routing layer Nubank Cloud shard 04

Slide 16

Slide 16 text

Reduz o Blast Radius shard 03 shard 02 shard 01 global routing layer Nubank Cloud shard 04 X

Slide 17

Slide 17 text

Tecnologias & Arquitetura Entendendo a tecnologia por baixo de tudo.

Slide 18

Slide 18 text

JVM LISP É uma linguagem lisp que roda em cima 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

Slide 19

Slide 19 text

GIT PARA DADOS Mantém todo o histórico de alteração de 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

Slide 20

Slide 20 text

CANAL DE COMUNICAÇÃO Kafka é o canal de comunicação entre 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

Slide 21

Slide 21 text

PORTS & ADAPTERS Aplicação é a parte central do código 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

Slide 22

Slide 22 text

Shard Infrastructure shard 03 shard 02 shard 01 global routing layer Nubank Cloud shard 04

Slide 23

Slide 23 text

Shard Infrastructure PERSISTENCE LAYER EPHEMERAL LAYER Kubernetes Kafka

Slide 24

Slide 24 text

Shard Infrastructure Nubank Cloud shard 01 shard 02 shard 03 shard 04 global routing layer

Slide 25

Slide 25 text

Mas e se ...? VULNERABILIDADE ZERO-DAY sai uma CVE do 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...)

Slide 26

Slide 26 text

Engenharia triste :( SSH PRA CADA MÁQUINA? Simples e resolve 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.

Slide 27

Slide 27 text

Infraestrutura Imutável Estado mutável é a raiz de todo o mal!

Slide 28

Slide 28 text

Imutabilidade Dar um passo a frente com a possibilidade de dar um passo atrás caso as coisas deem errado É como um save-as… button

Slide 29

Slide 29 text

Infraestrutura Imutável s3 s2 s1 global Nubank Cloud DNS

Slide 30

Slide 30 text

Infraestrutura Imutável s3 s2 s1 global Nubank Cloud DNS s3 s2 s1 global

Slide 31

Slide 31 text

Infraestrutura Imutável s3 s2 s1 global Nubank Cloud DNS s3 s2 s1 global

Slide 32

Slide 32 text

Infraestrutura Imutável s3 s2 s1 global Nubank Cloud DNS s3 s2 s1 global

Slide 33

Slide 33 text

Infraestrutura Imutável Nubank Cloud DNS s3 s2 s1 global

Slide 34

Slide 34 text

Infraestrutura imutável RÁPIDOS FEEDBACKS podemos testar e com segurança e 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

Slide 35

Slide 35 text

Automação Automação é o Plano de Contingência que protege sistemas de software das falhas humanas

Slide 36

Slide 36 text

Infraestrutura como código deploy Projeto interno para provisionar infraestrutura definition Projeto interno com a infraestrutura declarativa

Slide 37

Slide 37 text

Infraestrutura como código Toda infraestrutura configurada de forma versionada e declarativa

Slide 38

Slide 38 text

Infraestrutura como código {:name :staging :shards {:global [:global] :sharded [:s0 :s1] :defaults {:workload [:burst :small]}} {:name :prod :shards {:global [:global] :sharded [:s0 :s1 :s2 :s3 :s4 :s5 :s6] :defaults {:workload [:generic :large] :scaling {:min-size 2} :jvm {:flags [“-Xfuture"]}}} Definição declarativa dos environments

Slide 39

Slide 39 text

Infraestrutura como código {:name :billing :squad :bills :envs {:prod :sharded :staging :sharded} :jvm {:strategy :g1} :scaling {:min-size 8}} {:name :auth :squad :infosec :envs {:prod :global :staging :global} :workload [:nitro :2x-large] :scaling-policies [:cpu_high_alarm :cpu_low_alarm]} Definição declarativa dos microsserviços

Slide 40

Slide 40 text

Provisionamento deploy Projeto interno para provisionar infraestrutura definition Projeto interno com a infraestrutura declarativa

Slide 41

Slide 41 text

Migrando para Kubernetes Aplicando tudo o que vimos até então!

Slide 42

Slide 42 text

Kubernetes Orquestrador de containers Autoscaling rápido e dinâmico Pronto para microserviços Direciona para infraestrutura imutável Iterações curtas Capacidades de autorremediação

Slide 43

Slide 43 text

EC2s Cloud Formation Provisionamento deploy Internal Clojure project wrapping cloud APIs definition Internal Clojure project with all declarative infra

Slide 44

Slide 44 text

Cloud Formation Provisionamento deploy Internal Clojure project wrapping cloud APIs definition Internal Clojure project with all declarative infra Kubernetes

Slide 45

Slide 45 text

Migração Kubernetes Nubank Cloud s1 s2 s3

Slide 46

Slide 46 text

Migração Kubernetes Nubank Cloud s1 s2 s3

Slide 47

Slide 47 text

Migração Kubernetes Nubank Cloud s1 s2 s3

Slide 48

Slide 48 text

Migração Kubernetes Nubank Cloud s1 s2 s3

Slide 49

Slide 49 text

Migração Kubernetes Nubank Cloud s1 s2 s3

Slide 50

Slide 50 text

Escalabilidade A nuvem é tão escalável quanto nossa arquitetura Lições 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

Slide 51

Slide 51 text

Quer fazer parte da empresa mais inovadora da América Latina? sou.nu/jobs-at-nubank

Slide 52

Slide 52 text

No content