Do MONOLÍTICO à arquitetura distribuída

Post on 15-Jul-2015

439 views 1 download

Transcript of Do MONOLÍTICO à arquitetura distribuída

Do MONOLÍTICO à arquitetura distribuída

1ª edição 28/02/15

Leandro Alvares da CostaCo-founder & Head of Product

ALGUÉM gostaria de ter DINHEIRO?

ALGUÉM gostaria de ter DINHEIRO?

emprestado… :)

PRECISO DE DINHEIRO

;(

Banco A Banco B Banco C

;(

Banco A Banco B Banco C

;(

Banco A Banco B Banco C

;(

Banco A Banco B Banco C

;(

Banco A Banco B Banco C

;(

Banco A Banco B Banco C

;(

Ter que ir de banco em banco

Banco A Banco B Banco C

;(

Ter que ir de banco em banco

Informar seus dados em cada banco

Banco A Banco B Banco C

;(

Ter que ir de banco em banco

Informar seus dados em cada banco

Serviço sujeito à tarifa

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)

AJUDAMOS você

COMO?

;(

;(

Bancos parceiros

Banco A Banco B Banco C Banco D Banco E Banco F

;(

Bancos parceiros

Banco A Banco B Banco C Banco D Banco E Banco F

;(

BankFacil

Bancos parceiros

Banco A Banco B Banco C Banco D Banco E Banco F

;(

BankFacil

Consultoria financeira

Bancos parceiros

Banco A Banco B Banco C Banco D Banco E Banco F

Empréstimo pessoal

;(

BankFacil

Consultoria financeira

Bancos parceiros

Empréstimo com garantia

Banco A Banco B Banco C Banco D Banco E Banco F

Empréstimo pessoal

;(

BankFacil

Consultoria financeira

Bancos parceiros

Empréstimo com garantia

Banco A Banco B Banco C Banco D Banco E Banco F

Empréstimo pessoal

;(

BankFacil

Consultoria financeira

Bancos parceiros

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

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

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

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

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

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

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

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

1.Quero R$ 30.000,00 pra reformar meu ap.

1.Quero R$ 30.000,00 pra reformar meu ap.2.Recebo consultoria financeira e escolho o banco.

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.

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

Uhul \o/

Todos os bancos em um só lugar!

Evolução da plataforma

Evolução da plataforma

Educação e Comparação

2012

Todos produtos e serviços financeiros

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

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

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

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

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

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

Porque separamos as peças?

Está CERTO ou ERRADO?

Está CERTO ou ERRADO?

Existe CERTO ou ERRADO?

relembrando o

PASSADO…

Produto 2012

1.Validar as hipóteses de negócio

Produto 2012

1.Validar as hipóteses de negócio2.Domínio de negócio mudava

Produto 2012

1.Validar as hipóteses de negócio2.Domínio de negócio mudava3.Sobrevivência era o lema

Produto 2012

1.Validar as hipóteses de negócio2.Domínio de negócio mudava3.Sobrevivência era o lema4.Agregar valor ao negócio era o lema

Produto 2012

1.Validar as hipóteses de negócio2.Domínio de negócio mudava3.Sobrevivência era o lema4.Agregar valor ao negócio era o lema5.Com feedback rápido…

Produto 2012

Tecnologia 2012

Tecnologia 2012

1.Aplicação Rails única

Tecnologia 2012

1.Aplicação Rails única2.Ganhamos velocidade nas entregas

Tecnologia 2012

1.Aplicação Rails única2.Ganhamos velocidade nas entregas3.Cycle time reduzido

Tecnologia 2012

1.Aplicação Rails única2.Ganhamos velocidade nas entregas3.Cycle time reduzido4.Iterações curtas e feedback rápido

Desenvolvimento "GO LHAMA"

Desenvolvimento "GO LHAMA"

Tentando IMPOR qualidade

Features

Mudanças menos frequentes

Mudanças mais frequentesMonolítico Rails

Produto evoluindo…

Produto evoluindo…

1.Novo portal BankFacil

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos9.Integração com bancos parceiros

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos9.Integração com bancos parceiros10.API BankFacil

Produto evoluindo…

1.Novo portal BankFacil2.Preocupação principal com comportamento do cliente3.Consulta dados externos4.Checagens de crédito5.Tabela FIPE, Correios, PROCON6.CRM interno7.Comunicação com cliente controlada8.Dados cadastrais e documentação dos produtos9.Integração com bancos parceiros10.API BankFacil11.Relatórios internos, etc

DOMÍNIO de negócio

CRESCENDO rápido

Features Legadas

Features Novas

Mudanças menos frequentes

Mudanças mais frequentesMonolítico Rails

como VOLTAMOS

a ter AGILIDADE?

5 features, mesmo DEPLOYZÃO? Sim!

5 features, mesmo DEPLOYZÃO? Sim!

CHEGOU A HORA de

separar ESSE TROÇO?

POR QUE?

POR QUE?

1.Melhorar a velocidade de mudança

POR QUE?

1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura

POR QUE?

1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers

POR QUE?

1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers4.Escalar equipes no domínio de negócio

POR QUE?

1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers4.Escalar equipes no domínio de negócio5.Autonomia e responsabilidade das equipes

POR QUE?

1.Melhorar a velocidade de mudança2.Melhores possibilidades de compor a arquitetura3.Melhorar o entendimento do código pelos developers4.Escalar equipes no domínio de negócio5.Autonomia e responsabilidade das equipes6.Diversificação técnica

COMPLEXIDADES

Peça

Peça

Peça

+ MICRO + MACRO

COMPLEXIDADES

Peça

Peça

Peça

+ MICRO + MACRO

COMPLEXIDADES

Peça

Peça

Peça

+ MICRO + MACRO

COMPLEXIDADES

• Processo de deploy contínuo

Peça

Peça

Peça

+ MICRO + MACRO

COMPLEXIDADES

• Processo de deploy contínuo• Autonomia entre as equipes

Peça

Peça

Peça

+ MICRO + MACRO

COMPLEXIDADES

• Processo de deploy contínuo• Autonomia entre as equipes• Comunicação entre os serviços

Peça

Peça

Peça

+ MICRO + MACRO

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

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

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

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

O que FACILITOU separar?

O que FACILITOU separar?

1.Entidades diferentes do domínio

O que FACILITOU separar?

1.Entidades diferentes do domínio2.Partes que mudam bastante vs. menos

O que FACILITOU separar?

1.Entidades diferentes do domínio2.Partes que mudam bastante vs. menos3.O que mais dói na engenharia

Pontos que na evolução

CONSIDERAMOS

Boas práticas de CÓDIGO na ARQUITETURA

Boas práticas de CÓDIGO na ARQUITETURA

1.Única responsabilidade

Boas práticas de CÓDIGO na ARQUITETURA

1.Única responsabilidade2.Baixo acoplamento

Boas práticas de CÓDIGO na ARQUITETURA

1.Única responsabilidade2.Baixo acoplamento3.Alta coesão

Divisão da EQUIPE

Divisão da EQUIPE

1.Por unidade/capacidade/domínio de negócio

Divisão da EQUIPE

1.Por unidade/capacidade/domínio de negócio2.Equipe contínua em um domínio

Divisão da EQUIPE

1.Por unidade/capacidade/domínio de negócio2.Equipe contínua em um domínio3.Colaboração da equipe em outras peças

Mobile App Empréstimo pessoal

Empréstimo garantia

Financiamento auto

Silos

Consultoria financeira CRM

Aprendizado PEÇAS separadas

Aprendizado PEÇAS separadas

1.Performance - Alguns serviços viraram Async

Aprendizado PEÇAS separadas

1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API

Aprendizado PEÇAS separadas

1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API3.Test - Teste de integração das peças

Aprendizado PEÇAS separadas

1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API3.Test - Teste de integração das peças4.Infra - Provisionamento e Deployment

Aprendizado PEÇAS separadas

1.Performance - Alguns serviços viraram Async2.API - Gem Client de quem provê API3.Test - Teste de integração das peças4.Infra - Provisionamento e Deployment5.Arquitetura - Começar monolítico e ir extraindo

Equipe:

Equipe:• ~10-30 pessoas em ~3-7 times

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Produção:

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Produção:• 11 projetos (peças)

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Produção:• 11 projetos (peças)• 5 APIs

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL

Monitoramento:

Equipe:• ~10-30 pessoas em ~3-7 times• ~18 repositórios GitHub

Produção:• 11 projetos (peças)• 5 APIs• 7 MySQL

Monitoramento:• Newrelic

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

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Framework Pub / Sub

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Framework Pub / Sub

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Framework Pub / Sub

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Framework Pub / Sub

BI

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Framework Pub / Sub

BI

Mailer

Produto Integrações

Tracker

Admin Relatórios

Followup Banco

Utilitários

CRM Interno

Catalogo Cartões

JoomlaPortalGranaAqui

Arquitetura distribuída

Framework Pub / Sub

https://github.com/promiscuous-io/promiscuous

BI

Códigoo… :)

Promiscuous

https://github.com/promiscuous-io/promiscuous

Antes de fatiar o app…

Antes de fatiar o app…

1.Conheça seu problema e domínio muito bem

Antes de fatiar o app…

1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado

Antes de fatiar o app…

1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia

Antes de fatiar o app…

1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia4.Evolua do macro ao micro devagar

Antes de fatiar o app…

1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia4.Evolua do macro ao micro devagar5.Busque a maturidade para conseguir deploy contínuo

Antes de fatiar o app…

1.Conheça seu problema e domínio muito bem2.Pondere as complexidades com cuidado3.Mudança cultural da equipe pra operar com autonomia4.Evolua do macro ao micro devagar5.Busque a maturidade para conseguir deploy contínuo6.Esteja certo que está maduro o suficiente

By ThoughtWorks

Mensagens finais…

Esse ano de 2015 vai rolar :)

Esse ano de 2015 vai rolar :)

Esse ano de 2015 vai rolar :)@brunoadacosta

micro lib em JSOPEN SOURCE

http://bankfacil.github.io/vanilla-masker/

CONTRATANDO - bankfacil.com.br/devs

Leandro Alvares da Costa http://leandroadacosta.com

@leandroadacosta

Obrigado!