Slide 1

Slide 1 text

NUBANK microsserviços uma arquitetura de produtos em Construindo

Slide 2

Slide 2 text

Marina Limeira Software Engineer @marinalimeira_ Isabella Mendonça Software Engineer @isamendonca

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

Requisições/dia 200M Mainframes 0 Clientes 8.5M Mensagens/segundo 50K Microsserviços 270 Engenheiros 230

Slide 6

Slide 6 text

Microsserviços

Slide 7

Slide 7 text

monolito microsserviços

Slide 8

Slide 8 text

monolito microsserviços Nos permite mudar um pedaço de cada vez

Slide 9

Slide 9 text

monolito microsserviços Nos permite criar um pedaço de cada vez

Slide 10

Slide 10 text

monolito microsserviços Nos permite dividir os serviços por time

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Pagamento Fatura (Nuconta) Saldo (Nuconta) Kafka produz consom e {:id-cliente Uuid :agencia Num :numero Num :valor Num} {:id-cliente Uuid :agencia Num :numero Num :valor Num :status Num} Fatura (Cartão de Crédito) consome

Slide 13

Slide 13 text

Empréstimo

Slide 14

Slide 14 text

2019 Fevereiro

Slide 15

Slide 15 text

Dados espalhados em vários serviços

Slide 16

Slide 16 text

Dados espalhados em vários serviços Juros rotativo, financiamento, de atraso.

Slide 17

Slide 17 text

Dados espalhados em vários serviços Juros rotativo, financiamento, de atraso. Analistas e cientistas de dados consomem esses dados nos serviços.

Slide 18

Slide 18 text

DynamoDB Juros

Slide 19

Slide 19 text

DynamoDB Juros Propostas Datomic

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

DynamoDB Juros Propostas Datomic

Slide 22

Slide 22 text

DynamoDB Juros Empréstimos Propostas Datomic Datomic

Slide 23

Slide 23 text

Datomic DynamoDB Juros Empréstimos Feed Propostas Datomic DynamoDB

Slide 24

Slide 24 text

Datomic DynamoDB Juros Empréstimos Notificações Feed Propostas Datomic DynamoDB

Slide 25

Slide 25 text

Datomic DynamoDB Juros Empréstimos Notificações Feed Propostas Datomic DynamoDB

Slide 26

Slide 26 text

Datomic DynamoDB Juros Empréstimos Notificações Feed Propostas Datomic DynamoDB

Slide 27

Slide 27 text

Rewards

Slide 28

Slide 28 text

2017 Agosto

Slide 29

Slide 29 text

5 ofertas 3 parceiros ~10k clientes 3 microsserviços MVP

Slide 30

Slide 30 text

Ofertas + Gerenciamento de pontos + Gerenciamento de compras Assinatura Inscrições MVP Datomic Datomic Datomic

Slide 31

Slide 31 text

um ano depois? O que aconteceu

Slide 32

Slide 32 text

um ano depois? ENTÃO... O que aconteceu

Slide 33

Slide 33 text

No content

Slide 34

Slide 34 text

~2k linhas

Slide 35

Slide 35 text

Nova parceria Nova versão dos serviços Nova versão do app +

Slide 36

Slide 36 text

2018 Novembro

Slide 37

Slide 37 text

+20 ofertas +17 parceiros Nova conversão 5 microsserviços 2.0

Slide 38

Slide 38 text

Back-end For Front-end (BFF)

Slide 39

Slide 39 text

✨ Mínimo de lógica no front ✨

Slide 40

Slide 40 text

✨ Mínimo de lógica no front ✨ ✨ Maior abstração ✨

Slide 41

Slide 41 text

✨ Mínimo de lógica no front ✨ ✨ Maior abstração ✨ ✨ Requisição para 1 serviço ao invés de N ✨

Slide 42

Slide 42 text

Ofertas + Gerenciamento de pontos + Gerenciamento de compras Assinatura Inscrições

Slide 43

Slide 43 text

Ofertas + Gerenciamento de pontos + Gerenciamento de compras Assinatura Inscrições BFF Nubank

Slide 44

Slide 44 text

Gerenciamento de pontos + Gerenciamento de compras Assinatura Inscrições Ofertas + Grupos BFF Nubank Datomic

Slide 45

Slide 45 text

Gerenciamento de pontos + Gerenciamento de compras Assinatura Inscrições BFF Rewards Ofertas + Grupos BFF Nubank Datomic Redis

Slide 46

Slide 46 text

Datomic DynamoDB Juros Empréstimos Notificações Feed Propostas Datomic DynamoDB BFF Lending BFF Nuconta

Slide 47

Slide 47 text

GraphQL

Slide 48

Slide 48 text

GraphQL POST /api/graph Query language para APIS

Slide 49

Slide 49 text

GraphQL

Slide 50

Slide 50 text

GraphQL QUERIES

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

GraphQL QUERIES

Slide 53

Slide 53 text

GraphQL QUERIES

Slide 54

Slide 54 text

Empréstimos BFF NuConta GET Loans GET SavingsAccount

Slide 55

Slide 55 text

GraphQL QUERIES

Slide 56

Slide 56 text

GraphQL QUERIES

Slide 57

Slide 57 text

GraphQL MUTATIONS

Slide 58

Slide 58 text

GraphQL MUTATIONS

Slide 59

Slide 59 text

No content

Slide 60

Slide 60 text

No content

Slide 61

Slide 61 text

LIÇÕES APRENDIDAS SEPARAÇÃO DE RESPONSABILIDADES O serviço tem que ser “dono da verdade” do dado, duplicação é ruim pra consistência.

Slide 62

Slide 62 text

LIÇÕES APRENDIDAS SEPARAÇÃO DE RESPONSABILIDADES O serviço tem que ser “dono da verdade” do dado, duplicação é ruim pra consistência. COMPLEXIDADE DOS FLUXOS Dependendo de como as comunicações funcionam, os fluxos podem ser difíceis de debugar.

Slide 63

Slide 63 text

LIÇÕES APRENDIDAS SEPARAÇÃO DE RESPONSABILIDADES O serviço tem que ser “dono da verdade” do dado, duplicação é ruim pra consistência. COMPLEXIDADE DOS FLUXOS Dependendo de como as comunicações funcionam, os fluxos podem ser difíceis de debugar. MVP x ESCALABILIDADE Soluções menos robustas se adequam melhor ao início de um produto mas é importante observar seu crescimento para entender o que pode ser melhorado.

Slide 64

Slide 64 text

LIÇÕES APRENDIDAS SEPARAÇÃO DE RESPONSABILIDADES O serviço tem que ser “dono da verdade” do dado, duplicação é ruim pra consistência. COMPLEXIDADE DOS FLUXOS Dependendo de como as comunicações funcionam, os fluxos podem ser difíceis de debugar. MVP x ESCALABILIDADE Soluções menos robustas se adequam melhor ao início de um produto mas é importante observar seu crescimento para entender o que pode ser melhorado. BOA ABSTRAÇÃO PARA O FRONT Com microsserviços é comum ter que fazer chamadas a N serviços para lidar com informações.

Slide 65

Slide 65 text

Obrigada! sou.nu/vagasnu

Slide 66

Slide 66 text

No content