Construindo produtos em uma arquitetura de microsserviços

1749aeff9b74ca77ec4aa78636a353fb?s=47 Marina Limeira
May 11, 2019
750

Construindo produtos em uma arquitetura de microsserviços

Com o constante crescimento do Nubank, criar e evoluir um produto são desafios que os diversos times enfrentam. Este desafio fica ainda maior se esta arquitetura deve ser capaz de garantir a segurança e consistência necessárias ao mercado financeiro e, ao mesmo tempo, evitar uma abordagem monolítica centrada em um bancos de dados tradicional. Nessa palestra, iremos mostrar como construimos os produtos de empréstimo pessoal e do programa de pontos (Rewards).

1749aeff9b74ca77ec4aa78636a353fb?s=128

Marina Limeira

May 11, 2019
Tweet

Transcript

  1. NUBANK microsserviços uma arquitetura de produtos em Construindo

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

  3. None
  4. None
  5. Requisições/dia 200M Mainframes 0 Clientes 8.5M Mensagens/segundo 50K Microsserviços 270

    Engenheiros 230
  6. Microsserviços

  7. monolito microsserviços

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

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

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

  11. None
  12. 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
  13. Empréstimo

  14. 2019 Fevereiro

  15. Dados espalhados em vários serviços

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

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

    Analistas e cientistas de dados consomem esses dados nos serviços.
  18. DynamoDB Juros

  19. DynamoDB Juros Propostas Datomic

  20. None
  21. DynamoDB Juros Propostas Datomic

  22. DynamoDB Juros Empréstimos Propostas Datomic Datomic

  23. Datomic DynamoDB Juros Empréstimos Feed Propostas Datomic DynamoDB

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

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

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

  27. Rewards

  28. 2017 Agosto

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

  30. Ofertas + Gerenciamento de pontos + Gerenciamento de compras Assinatura

    Inscrições MVP Datomic Datomic Datomic
  31. um ano depois? O que aconteceu

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

  33. None
  34. ~2k linhas

  35. Nova parceria Nova versão dos serviços Nova versão do app

    +
  36. 2018 Novembro

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

  38. Back-end For Front-end (BFF)

  39. ✨ Mínimo de lógica no front ✨

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

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

    ✨ ✨ Requisição para 1 serviço ao invés de N ✨
  42. Ofertas + Gerenciamento de pontos + Gerenciamento de compras Assinatura

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

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

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

    Rewards Ofertas + Grupos BFF Nubank Datomic Redis
  46. Datomic DynamoDB Juros Empréstimos Notificações Feed Propostas Datomic DynamoDB BFF

    Lending BFF Nuconta
  47. GraphQL

  48. GraphQL POST /api/graph Query language para APIS

  49. GraphQL

  50. GraphQL QUERIES

  51. None
  52. GraphQL QUERIES

  53. GraphQL QUERIES

  54. Empréstimos BFF NuConta GET Loans GET SavingsAccount

  55. GraphQL QUERIES

  56. GraphQL QUERIES

  57. GraphQL MUTATIONS

  58. GraphQL MUTATIONS

  59. None
  60. None
  61. LIÇÕES APRENDIDAS SEPARAÇÃO DE RESPONSABILIDADES O serviço tem que ser

    “dono da verdade” do dado, duplicação é ruim pra consistência.
  62. 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.
  63. 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.
  64. 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.
  65. Obrigada! sou.nu/vagasnu

  66. None