Do MONOLÍTICO à arquitetura distribuída

971 visualizações

Publicada em

Distribuído ou microservices? Nesta oportunidade pretendo compartilhar o nosso trajeto (BankFacil) de começar com um projeto RoR monolítico faz praticamente 3 anos, e porque resolvemos "desovar" os projetos em uma arquitetura de apps separados. Além de expor nossas dores e desafios.

Publicada em: Tecnologia
2 comentários
3 gostaram
Estatísticas
Notas
Sem downloads
Visualizações
Visualizações totais
971
No SlideShare
0
A partir de incorporações
0
Número de incorporações
37
Ações
Compartilhamentos
0
Downloads
14
Comentários
2
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Do MONOLÍTICO à arquitetura distribuída

  1. 1. Do MONOLÍTICO à arquitetura distribuída 1ª edição 28/02/15
  2. 2. Leandro Alvares da Costa Co-founder & Head of Product
  3. 3. ALGUÉM gostaria de ter DINHEIRO?
  4. 4. ALGUÉM gostaria de ter DINHEIRO? emprestado… :)
  5. 5. PRECISO DE DINHEIRO
  6. 6. ;(
  7. 7. Banco A Banco B Banco C ;(
  8. 8. Banco A Banco B Banco C ;(
  9. 9. Banco A Banco B Banco C ;(
  10. 10. Banco A Banco B Banco C ;(
  11. 11. Banco A Banco B Banco C ;(
  12. 12. Banco A Banco B Banco C ;( Ter que ir de banco em banco
  13. 13. Banco A Banco B Banco C ;( Ter que ir de banco em banco Informar seus dados em cada banco
  14. 14. Banco A Banco B Banco C ;( Ter que ir de banco em banco Informar seus dados em cada banco Serviço sujeito à tarifa
  15. 15. Banco A Banco B Banco C ;( Ter que ir de banco em banco Informar seus dados em cada banco Serviço sujeito à tarifa Atendimento ou gerente (convencional)
  16. 16. AJUDAMOS você
  17. 17. COMO?
  18. 18. ;(
  19. 19. ;( Bancos parceiros
  20. 20. Banco A Banco B Banco C Banco D Banco E Banco F ;( Bancos parceiros
  21. 21. Banco A Banco B Banco C Banco D Banco E Banco F ;( BankFacil Bancos parceiros
  22. 22. Banco A Banco B Banco C Banco D Banco E Banco F ;( BankFacil Consultoria financeira Bancos parceiros
  23. 23. Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal ;( BankFacil Consultoria financeira Bancos parceiros
  24. 24. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal ;( BankFacil Consultoria financeira Bancos parceiros
  25. 25. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal ;( BankFacil Consultoria financeira Bancos parceiros
  26. 26. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais ;( BankFacil Consultoria financeira Bancos parceiros
  27. 27. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais Documentação ;( BankFacil Consultoria financeira Bancos parceiros
  28. 28. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais Documentação Aprovação do crédito ;( BankFacil Consultoria financeira Bancos parceiros
  29. 29. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais Documentação Aprovação do crédito ;( BankFacil Consultoria financeira Banco E Banco F Bancos parceiros
  30. 30. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais Documentação Aprovação do crédito ;( BankFacil Consultoria financeira Banco E Banco F Bancos parceiros
  31. 31. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais Documentação Aprovação do crédito ;( BankFacil Consultoria financeira Banco E Banco F Bancos parceiros
  32. 32. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F Empréstimo pessoal Dados cadastrais Documentação Aprovação do crédito ;( BankFacil Consultoria financeira Formalização Contratual Banco E Banco F Bancos parceiros
  33. 33. Empréstimo com garantia Banco A Banco B Banco C Banco D Banco E Banco F $ o/ Empréstimo pessoal Dados cadastrais Documentação Aprovação do crédito ;( BankFacil Consultoria financeira Formalização Contratual Banco E Banco F Bancos parceiros
  34. 34. 1.Quero R$ 30.000,00 pra reformar meu ap.
  35. 35. 1.Quero R$ 30.000,00 pra reformar meu ap. 2.Recebo consultoria financeira e escolho o banco.
  36. 36. 1.Quero R$ 30.000,00 pra reformar meu ap. 2.Recebo consultoria financeira e escolho o banco. 3.Solicito online e recebo o dinheiro emprestado.
  37. 37. 1.Quero R$ 30.000,00 pra reformar meu ap. 2.Recebo consultoria financeira e escolho o banco. 3.Solicito online e recebo o dinheiro emprestado. você não PAGA NADA por usar o BankFacil
  38. 38. Uhul o/
  39. 39. Todos os bancos em um só lugar!
  40. 40. Evolução da plataforma
  41. 41. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros
  42. 42. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros Indicação de cliente aos bancos 2013 Cartões
  43. 43. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros Solicitação online Consultoria financeira 2014 Empréstimo e financiamento Indicação de cliente aos bancos 2013 Cartões
  44. 44. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros Solicitação online Consultoria financeira 2014 Empréstimo e financiamento Indicação de cliente aos bancos 2013 Cartões
  45. 45. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros Solicitação online Consultoria financeira 2014 Empréstimo e financiamento Indicação de cliente aos bancos 2013 Cartões Peça P
  46. 46. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros Solicitação online Consultoria financeira 2014 Empréstimo e financiamento Indicação de cliente aos bancos 2013 Cartões Peça P Peça Peça Peça
  47. 47. Evolução da plataforma Educação e Comparação 2012 Todos produtos e serviços financeiros Solicitação online Consultoria financeira 2014 Empréstimo e financiamento Indicação de cliente aos bancos 2013 Cartões Peça P Peça Peça Peça Peça Peça Peça Peça Peça Peça
  48. 48. Porque separamos as peças?
  49. 49. Está CERTO ou ERRADO?

  50. 50. Está CERTO ou ERRADO?
 Existe CERTO ou ERRADO?
  51. 51. relembrando o PASSADO…
  52. 52. Produto 2012
  53. 53. 1.Validar as hipóteses de negócio Produto 2012
  54. 54. 1.Validar as hipóteses de negócio 2.Domínio de negócio mudava Produto 2012
  55. 55. 1.Validar as hipóteses de negócio 2.Domínio de negócio mudava 3.Sobrevivência era o lema Produto 2012
  56. 56. 1.Validar as hipóteses de negócio 2.Domínio de negócio mudava 3.Sobrevivência era o lema 4.Agregar valor ao negócio era o lema Produto 2012
  57. 57. 1.Validar as hipóteses de negócio 2.Domínio de negócio mudava 3.Sobrevivência era o lema 4.Agregar valor ao negócio era o lema 5.Com feedback rápido… Produto 2012
  58. 58. Tecnologia 2012
  59. 59. Tecnologia 2012 1.Aplicação Rails única
  60. 60. Tecnologia 2012 1.Aplicação Rails única 2.Ganhamos velocidade nas entregas
  61. 61. Tecnologia 2012 1.Aplicação Rails única 2.Ganhamos velocidade nas entregas 3.Cycle time reduzido
  62. 62. Tecnologia 2012 1.Aplicação Rails única 2.Ganhamos velocidade nas entregas 3.Cycle time reduzido 4.Iterações curtas e feedback rápido
  63. 63. Desenvolvimento "GO LHAMA"
  64. 64. Desenvolvimento "GO LHAMA"
  65. 65. Tentando IMPOR qualidade
  66. 66. Features Mudanças menos frequentes Mudanças mais frequentes Monolítico Rails
  67. 67. Produto evoluindo…
  68. 68. Produto evoluindo… 1.Novo portal BankFacil
  69. 69. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente
  70. 70. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos
  71. 71. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito
  72. 72. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON
  73. 73. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON 6.CRM interno
  74. 74. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON 6.CRM interno 7.Comunicação com cliente controlada
  75. 75. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON 6.CRM interno 7.Comunicação com cliente controlada 8.Dados cadastrais e documentação dos produtos
  76. 76. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON 6.CRM interno 7.Comunicação com cliente controlada 8.Dados cadastrais e documentação dos produtos 9.Integração com bancos parceiros
  77. 77. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON 6.CRM interno 7.Comunicação com cliente controlada 8.Dados cadastrais e documentação dos produtos 9.Integração com bancos parceiros 10.API BankFacil
  78. 78. Produto evoluindo… 1.Novo portal BankFacil 2.Preocupação principal com comportamento do cliente 3.Consulta dados externos 4.Checagens de crédito 5.Tabela FIPE, Correios, PROCON 6.CRM interno 7.Comunicação com cliente controlada 8.Dados cadastrais e documentação dos produtos 9.Integração com bancos parceiros 10.API BankFacil 11.Relatórios internos, etc
  79. 79. DOMÍNIO de negócio CRESCENDO rápido
  80. 80. Features Legadas Features Novas Mudanças menos frequentes Mudanças mais frequentes Monolítico Rails
  81. 81. como VOLTAMOS a ter AGILIDADE?
  82. 82. 5 features, mesmo DEPLOYZÃO? Sim!
  83. 83. 5 features, mesmo DEPLOYZÃO? Sim!
  84. 84. CHEGOU A HORA de separar ESSE TROÇO?
  85. 85. POR QUE?
  86. 86. POR QUE? 1.Melhorar a velocidade de mudança
  87. 87. POR QUE? 1.Melhorar a velocidade de mudança 2.Melhores possibilidades de compor a arquitetura
  88. 88. POR QUE? 1.Melhorar a velocidade de mudança 2.Melhores possibilidades de compor a arquitetura 3.Melhorar o entendimento do código pelos developers
  89. 89. POR QUE? 1.Melhorar a velocidade de mudança 2.Melhores possibilidades de compor a arquitetura 3.Melhorar o entendimento do código pelos developers 4.Escalar equipes no domínio de negócio
  90. 90. POR QUE? 1.Melhorar a velocidade de mudança 2.Melhores possibilidades de compor a arquitetura 3.Melhorar o entendimento do código pelos developers 4.Escalar equipes no domínio de negócio 5.Autonomia e responsabilidade das equipes
  91. 91. POR QUE? 1.Melhorar a velocidade de mudança 2.Melhores possibilidades de compor a arquitetura 3.Melhorar o entendimento do código pelos developers 4.Escalar equipes no domínio de negócio 5.Autonomia e responsabilidade das equipes 6.Diversificação técnica
  92. 92. COMPLEXIDADES Peça Peça Peça + MICRO + MACRO
  93. 93. COMPLEXIDADES Peça Peça Peça + MICRO + MACRO
  94. 94. COMPLEXIDADES Peça Peça Peça + MICRO + MACRO
  95. 95. COMPLEXIDADES • Processo de deploy contínuo Peça Peça Peça + MICRO + MACRO
  96. 96. COMPLEXIDADES • Processo de deploy contínuo • Autonomia entre as equipes Peça Peça Peça + MICRO + MACRO
  97. 97. COMPLEXIDADES • Processo de deploy contínuo • Autonomia entre as equipes • Comunicação entre os serviços Peça Peça Peça + MICRO + MACRO
  98. 98. COMPLEXIDADES • Processo de deploy contínuo • Autonomia entre as equipes • Comunicação entre os serviços • Manter as API’s REST rodando sem quebrar Peça Peça Peça + MICRO + MACRO
  99. 99. COMPLEXIDADES • Processo de deploy contínuo • Autonomia entre as equipes • Comunicação entre os serviços • Manter as API’s REST rodando sem quebrar • Escalabilidade e performance Peça Peça Peça + MICRO + MACRO
  100. 100. COMPLEXIDADES • Processo de deploy contínuo • Autonomia entre as equipes • Comunicação entre os serviços • Manter as API’s REST rodando sem quebrar • Escalabilidade e performance • Banco descentralizado Peça Peça Peça + MICRO + MACRO
  101. 101. COMPLEXIDADES • Processo de deploy contínuo • Autonomia entre as equipes • Comunicação entre os serviços • Manter as API’s REST rodando sem quebrar • Escalabilidade e performance • Banco descentralizado • Segurança e escolha da tecnologia certa Peça Peça Peça + MICRO + MACRO
  102. 102. O que FACILITOU separar?
  103. 103. O que FACILITOU separar? 1.Entidades diferentes do domínio
  104. 104. O que FACILITOU separar? 1.Entidades diferentes do domínio 2.Partes que mudam bastante vs. menos
  105. 105. O que FACILITOU separar? 1.Entidades diferentes do domínio 2.Partes que mudam bastante vs. menos 3.O que mais dói na engenharia
  106. 106. Pontos que na evolução CONSIDERAMOS
  107. 107. Boas práticas de CÓDIGO na ARQUITETURA
  108. 108. Boas práticas de CÓDIGO na ARQUITETURA 1.Única responsabilidade
  109. 109. Boas práticas de CÓDIGO na ARQUITETURA 1.Única responsabilidade 2.Baixo acoplamento
  110. 110. Boas práticas de CÓDIGO na ARQUITETURA 1.Única responsabilidade 2.Baixo acoplamento 3.Alta coesão
  111. 111. Divisão da EQUIPE
  112. 112. Divisão da EQUIPE 1.Por unidade/capacidade/domínio de negócio
  113. 113. Divisão da EQUIPE 1.Por unidade/capacidade/domínio de negócio 2.Equipe contínua em um domínio
  114. 114. Divisão da EQUIPE 1.Por unidade/capacidade/domínio de negócio 2.Equipe contínua em um domínio 3.Colaboração da equipe em outras peças
  115. 115. Mobile App Empréstimo pessoal Empréstimo garantia Financiamento auto Silos Consultoria financeira CRM
  116. 116. Aprendizado PEÇAS separadas
  117. 117. Aprendizado PEÇAS separadas 1.Performance - Alguns serviços viraram Async
  118. 118. Aprendizado PEÇAS separadas 1.Performance - Alguns serviços viraram Async 2.API - Gem Client de quem provê API
  119. 119. Aprendizado PEÇAS separadas 1.Performance - Alguns serviços viraram Async 2.API - Gem Client de quem provê API 3.Test - Teste de integração das peças
  120. 120. Aprendizado PEÇAS separadas 1.Performance - Alguns serviços viraram Async 2.API - Gem Client de quem provê API 3.Test - Teste de integração das peças 4.Infra - Provisionamento e Deployment
  121. 121. Aprendizado PEÇAS separadas 1.Performance - Alguns serviços viraram Async 2.API - Gem Client de quem provê API 3.Test - Teste de integração das peças 4.Infra - Provisionamento e Deployment 5.Arquitetura - Começar monolítico e ir extraindo
  122. 122. Equipe:
  123. 123. Equipe: • ~10-30 pessoas em ~3-7 times
  124. 124. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub

  125. 125. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção:
  126. 126. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção: • 11 projetos (peças)
  127. 127. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção: • 11 projetos (peças) • 5 APIs
  128. 128. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção: • 11 projetos (peças) • 5 APIs • 7 MySQL

  129. 129. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção: • 11 projetos (peças) • 5 APIs • 7 MySQL
 Monitoramento:
  130. 130. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção: • 11 projetos (peças) • 5 APIs • 7 MySQL
 Monitoramento: • Newrelic
  131. 131. Equipe: • ~10-30 pessoas em ~3-7 times • ~18 repositórios GitHub
 Produção: • 11 projetos (peças) • 5 APIs • 7 MySQL
 Monitoramento: • Newrelic • Amazon CloudWatch
  132. 132. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída
  133. 133. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída
  134. 134. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída
  135. 135. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída
  136. 136. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída Framework Pub / Sub
  137. 137. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída Framework Pub / Sub
  138. 138. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída Framework Pub / Sub
  139. 139. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída Framework Pub / Sub BI
  140. 140. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída Framework Pub / Sub BI
  141. 141. Mailer Produto Integrações Tracker Admin Relatórios Followup Banco Utilitários CRM Interno Catalogo Cartões JoomlaPortal GranaAqui Arquitetura distribuída Framework Pub / Sub https://github.com/promiscuous-io/promiscuous BI
  142. 142. Códigoo… :)
  143. 143. Promiscuous https://github.com/promiscuous-io/promiscuous
  144. 144. Antes de fatiar o app…
  145. 145. Antes de fatiar o app… 1.Conheça seu problema e domínio muito bem
  146. 146. Antes de fatiar o app… 1.Conheça seu problema e domínio muito bem 2.Pondere as complexidades com cuidado
  147. 147. Antes de fatiar o app… 1.Conheça seu problema e domínio muito bem 2.Pondere as complexidades com cuidado 3.Mudança cultural da equipe pra operar com autonomia
  148. 148. Antes de fatiar o app… 1.Conheça seu problema e domínio muito bem 2.Pondere as complexidades com cuidado 3.Mudança cultural da equipe pra operar com autonomia 4.Evolua do macro ao micro devagar
  149. 149. Antes de fatiar o app… 1.Conheça seu problema e domínio muito bem 2.Pondere as complexidades com cuidado 3.Mudança cultural da equipe pra operar com autonomia 4.Evolua do macro ao micro devagar 5.Busque a maturidade para conseguir deploy contínuo
  150. 150. Antes de fatiar o app… 1.Conheça seu problema e domínio muito bem 2.Pondere as complexidades com cuidado 3.Mudança cultural da equipe pra operar com autonomia 4.Evolua do macro ao micro devagar 5.Busque a maturidade para conseguir deploy contínuo 6.Esteja certo que está maduro o suficiente
  151. 151. By ThoughtWorks
  152. 152. Mensagens finais…
  153. 153. Esse ano de 2015 vai rolar :)
  154. 154. Esse ano de 2015 vai rolar :)
  155. 155. Esse ano de 2015 vai rolar :) @brunoadacosta
  156. 156. micro lib em JS OPEN SOURCE
  157. 157. http://bankfacil.github.io/vanilla-masker/
  158. 158. CONTRATANDO - bankfacil.com.br/devs
  159. 159. Leandro Alvares da Costa http://leandroadacosta.com @leandroadacosta Obrigado!

×