SlideShare uma empresa Scribd logo
1 de 73
Desafios na reescrita de uma
plataforma de +15 anos na
Bionexo
Fernando Kakimoto
@nandokakimoto
Números da Bionexo 2016
350K
cotações
3M
produtos
R$1.1B
transacionados
Contexto
A Bionexo precisava evoluir para se manter relevante no mercado
Para evoluir, é preciso reescrever a sua principal plataforma digital
Usuários deverão migrar do sistema antigo para o sistema novo
Abordagem
Desenvolver todo o produto e migrar os usuários de uma vez
X
Desenvolver pequenos MVPs e migrar usuários aos poucos
Estratégia
Migração
Hospitais
+
Fornecedores
Clássico - Java Regene - Ruby
Estratégia
Migração
Hospitais
+
Fornecedores
Clássico - Java Regene - Ruby
Estratégia
Migração
Hospitais
+
Fornecedores
Fornecedores
Clássico - Java Regene - Ruby
Estratégia
Migração
Hospitais
+
Fornecedores
Fornecedores
Clássico - Java Regene - Ruby
Estratégia
Migração
Hospitais Fornecedores
Clássico - Java Regene - Ruby
Abordagem
Toda informação gerada no sistema clássico deve estar disponível no novo
sistema em tempo real
Cotações Respostas
Pedidos
confirmados
Negociações Contratos
Seguindo essa estratégia, migrar um fornecedor passa a ser uma
simples decisão de negócio
Abordagem
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Arquitetura da
solução
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de cotação
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de cotação
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de cotação
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de cotação
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de cotação
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de cotação
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de resposta
PostgreSQL
Amazon Web
Services
Oracle Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de resposta
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de resposta
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de resposta
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
Criação
de resposta
Os Desafios da Integração
Vários Pontos de Integração
Identificar a origem da mensagem para análise e correção de bugs
Mapeamos mais de 40 pontos de integração entre as plataformas
Incluir campo origem em cada mensagem
Vários Pontos de Integração
Ordem das Mensagens
Mensagens podem ser processadas fora da ordem (inconsistência)
A própria aplicação deve gerenciar a sequência das mensagens
Se a mensagem for antiga, ela deve ser descartada
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
1
2
3
1. Cria cotação
2. Altera vencimento
3. Altera vencimento
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
2
3
1
1. Cria cotação
2. Altera vencimento
3. Altera vencimento
Ordem das Mensagens
Ordem das Mensagens
Ordem das Mensagens
Limite do Tamanho das Mensagens
A Amazon limita o tamanho das mensagens em até 256 KB
Uma cotação pode facilmente ultrapassar esse limite
Dividir uma cotação em várias mensagens
• Mensagens processadas em ordem aleatória
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
1
2
3
4
Amazon Web
Services
Oracle
PostgreSQL
Web
Service
Regene
Web
Clássica
Regene
Workers
2
431
Limite do Tamanho das Mensagens
- Nome: Cotação Medicamentos Sirio
- Hospital: Sírio Libanês
- Vencimento: 01/12/2016
- Forma de Pagamento: 30d + 60d + 90d
Sequencia: 1
Produto
Quantidade
Marcas Preferidas
Sequencia: 2
Produto
Quantidade
Marcas Preferidas
Sequencia: 3
Produto
Quantidade
Marcas Preferidas
- Nome: Cotação Medicamentos Sirio
- Hospital: Sírio Libanês
- Vencimento: 01/12/2016
- Forma de Pagamento: 30d + 60d + 90d
Sequencia: 4
Produto
Quantidade
Marcas Preferidas
Sequencia: 5
Produto
Quantidade
Marcas Preferidas
Sequencia: 6
Produto
Quantidade
Marcas Preferidas
Paralelismo
É comum ocorrer operações simultâneas
• Salvar uma cotação duas vezes, por diferentes workers, ao mesmo tempo
Vários workers rodando em paralelo, em diferente máquinas
Adicionar índices de unicidade a nível de banco de dados
• Validação de ActiveRecord não é suficiente
Bugs
Como todo software, a integração tem defeitos
Lógica de negócios muitas vezes complexa
Dados inesperados / inconsistentes vindos do clássico
Bugs
Forte dependência entre os dados
• Cotação - Resposta - Negociação - Pedido
Erros em uma cotação, causa dezenas de outros erros
• Integrar os dados que faltam, mostrou-se ineficiente no passado
Criar uma ferramenta específica para migrar fornecedores
Integração x Migração
Integração
• Disponibilizar dados em tempo real para usuários de ambos os sistemas
Migração
• Sincronizar dados pendentes a fim de migrar um fornecedor específico
Estratégia da Migração
1. Buscar fornecedores 100% integrados (elegíveis)
1. Sincronizar fornecedores não elegíveis
2. Corrigir bugs da integração
Buscar Fornecedores Elegíveis
Fornecedores não migrados e 100% integrados
Comparar a base de dados dos dois sistemas (todos os dias)
Buscar Fornecedores Elegíveis
Oracle PostgreSQL
Regene
API
Migrador
Respostas Pedidos Contratos Negociações Anexos
Amazon Web
Services
Buscar Fornecedores Elegíveis
Oracle PostgreSQL
Regene
API
Migrador
Fornec. #10
Amazon Web
Services
Respostas Pedidos Contratos Negociações Anexos
Buscar Fornecedores Elegíveis
Oracle PostgreSQL
Regene
API
Migrador
Amazon Web
Services
Fornec. #10
Respostas Pedidos Contratos Negociações Anexos
Buscar Fornecedores Elegíveis
Oracle PostgreSQL
Regene
API
Migrador
Amazon Web
Services
Fornec. #10
Respostas Pedidos Contratos Negociações Anexos
Buscar Fornecedores Elegíveis
Oracle PostgreSQL
Regene
API
Migrador
Amazon Web
Services
Respostas Pedidos Contratos Negociações Anexos
Fornec. #10
Buscar Fornecedores Elegíveis
Oracle PostgreSQL
Regene
API
Migrador
Amazon Web
Services
Diff.csv
Respostas Pedidos Contratos Negociações Anexos
Buscar Fornecedores Elegíveis
Sincronizar Fornecedores Não
Elegíveis
Enviar dados não sincronizados para o [re]gene
Sem afetar a performance da integração
Sincronizar Fornecedores Não
Elegíveis
Oracle PostgreSQLRegene
Workers
Migração
Migrador
Respostas Pedidos Contratos Negociações Anexos
Diff.csv
S3 SNS + SQS
Sincronizar Fornecedores Não
Elegíveis
Oracle PostgreSQLMigrador
Respostas Pedidos Contratos Negociações Anexos
Diff
Fornec. #10
Regene
Workers
Migração
S3 SNS + SQS
Sincronizar Fornecedores Não
Elegíveis
Oracle PostgreSQLMigrador
Respostas Pedidos Contratos Negociações Anexos
JSON
Regene
Workers
Migração
S3 SNS + SQS
Sincronizar Fornecedores Não
Elegíveis
Oracle PostgreSQLMigrador
Respostas Pedidos Contratos Negociações Anexos
Regene
Workers
Migração
S3 SNS + SQS
JSON
Sincronizar Fornecedores Não
Elegíveis
Oracle PostgreSQLMigrador
Respostas Pedidos Contratos Negociações Anexos
Regene
Workers
Migração
S3 SNS + SQS
Diff
Fornec. #10
Tópicos e filas específicos para migração
Sincronizar Fornecedores Não
Elegíveis
Workers específicos para a migração
Sincronizar Fornecedores Não
Elegíveis
Corrigir Bugs de Integração
Bugs impedem que fornecedores se tornem elegíveis
Priorização e correção dos bugs semanalmente
Colaboração com o time de suporte.
O Que Poderia Ser Diferente?
Conhecimento da Plataforma
Fluxos não considerados inicialmente na integração
Usuários integrados são sempre uma surpresa
Validações desnecessárias na integração
Tecnologias e Práticas
Ruby para sistemas de tempo real
Alteração de dados em produção
Configuração manual de tópicos e filas
Monitoração
Resolução de erros de forma reativa
Dashboard com o status da migração
Definição e acompanhamento dos KPIs
Onde Acertamos?
Integração e Migração Separadas
Migração não influencia na performance da integração
Deploys independentes
• Execução de experimentos
Facilidade na análise de dados e erros
• Logs e Kibana
Conceitos de Lean Startup
Entregar valor com o mínimo de esforço
• Migração
Iterações curtas e aprender com os erros
• Deploys constantes
Aproximação de Tecnologia e
Operações
Entendimento do usuário pela área de tecnologia
Entendimento da tecnologia para área de operações
Criação da ferramenta de backoffice
Desafios na reescrita de uma
plataforma de +15 anos na
Bionexo
Fernando Kakimoto
@nandokakimoto

Mais conteúdo relacionado

Semelhante a Desafios na re-escrita de uma plataforma de +15 anos em RoR na Bionexo

Microservices, soa e o melhor das filas
Microservices, soa e o melhor das filasMicroservices, soa e o melhor das filas
Microservices, soa e o melhor das filasDiego Pacheco
 
Construindo um Data Warehouse moderno com Amazon Redshift
Construindo um Data Warehouse moderno com Amazon RedshiftConstruindo um Data Warehouse moderno com Amazon Redshift
Construindo um Data Warehouse moderno com Amazon RedshiftAmazon Web Services LATAM
 
Vendedores grátis consult - 20120213 - Curitiba
Vendedores grátis   consult - 20120213 - CuritibaVendedores grátis   consult - 20120213 - Curitiba
Vendedores grátis consult - 20120213 - CuritibaFernando Misato
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialFernando Hamasaki de Amorim
 
Encontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de TrabalhoEncontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de TrabalhoAmazon Web Services LATAM
 
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWSConhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWSAmazon Web Services LATAM
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
Webinar: Como obter valor comercial com Big Data
Webinar: Como obter valor comercial com Big DataWebinar: Como obter valor comercial com Big Data
Webinar: Como obter valor comercial com Big DataAmazon Web Services LATAM
 
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 anoBuscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 anoThiago Freitas
 
PostgreSQL no mundo de micro-serviços, a experiência do iFood
PostgreSQL no mundo de micro-serviços, a experiência do iFoodPostgreSQL no mundo de micro-serviços, a experiência do iFood
PostgreSQL no mundo de micro-serviços, a experiência do iFoodMatheus de Oliveira
 
Microservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFoodMicroservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFoodDevCamp Campinas
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoRicardo Longa
 

Semelhante a Desafios na re-escrita de uma plataforma de +15 anos em RoR na Bionexo (20)

Microservices, soa e o melhor das filas
Microservices, soa e o melhor das filasMicroservices, soa e o melhor das filas
Microservices, soa e o melhor das filas
 
Construindo um Data Warehouse moderno com Amazon Redshift
Construindo um Data Warehouse moderno com Amazon RedshiftConstruindo um Data Warehouse moderno com Amazon Redshift
Construindo um Data Warehouse moderno com Amazon Redshift
 
Abaas - Advanced Beer-as-a-Service
Abaas - Advanced Beer-as-a-ServiceAbaas - Advanced Beer-as-a-Service
Abaas - Advanced Beer-as-a-Service
 
Bancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWSBancos de dados NoSQL na AWS
Bancos de dados NoSQL na AWS
 
Vendedores grátis consult - 20120213 - Curitiba
Vendedores grátis   consult - 20120213 - CuritibaVendedores grátis   consult - 20120213 - Curitiba
Vendedores grátis consult - 20120213 - Curitiba
 
Construindo um sistema distribuido usando rest
Construindo um sistema distribuido usando restConstruindo um sistema distribuido usando rest
Construindo um sistema distribuido usando rest
 
Locaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercialLocaweb + Spree: transformando código aberto em um projeto comercial
Locaweb + Spree: transformando código aberto em um projeto comercial
 
Encontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de TrabalhoEncontre o Banco de Dados certo para sua Carga de Trabalho
Encontre o Banco de Dados certo para sua Carga de Trabalho
 
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWSConhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
Webinar: Como obter valor comercial com Big Data
Webinar: Como obter valor comercial com Big DataWebinar: Como obter valor comercial com Big Data
Webinar: Como obter valor comercial com Big Data
 
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 anoBuscapé 2.0 - Como mudamos uma empresa em 1 ano
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
 
Big Data na Nuvem
Big Data na NuvemBig Data na Nuvem
Big Data na Nuvem
 
PostgreSQL no mundo de micro-serviços, a experiência do iFood
PostgreSQL no mundo de micro-serviços, a experiência do iFoodPostgreSQL no mundo de micro-serviços, a experiência do iFood
PostgreSQL no mundo de micro-serviços, a experiência do iFood
 
Aws summit arquitetura big data-v1.2
Aws summit arquitetura big data-v1.2Aws summit arquitetura big data-v1.2
Aws summit arquitetura big data-v1.2
 
Intelie BPMS
Intelie BPMSIntelie BPMS
Intelie BPMS
 
Microservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFoodMicroservices reativos e a experiência do iFood
Microservices reativos e a experiência do iFood
 
Devcamp 2017 Microservices Reativos
Devcamp 2017   Microservices ReativosDevcamp 2017   Microservices Reativos
Devcamp 2017 Microservices Reativos
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
Microsoft Workloads em Amazon Web Services
Microsoft Workloads em Amazon Web ServicesMicrosoft Workloads em Amazon Web Services
Microsoft Workloads em Amazon Web Services
 

Desafios na re-escrita de uma plataforma de +15 anos em RoR na Bionexo

Notas do Editor

  1. Custo da integração vs custo do regene
  2. Se Continuar com a plataforma atual, iriamos ser ultrapassado pelos concorrentes do mercado no futuro A diretoria entendeu que precisavamos evoluir tanto a empresa quanto suas soluções digitais Tentou-se atualizar a plataforma corrente com o projeto Usabilidade, mas o projeto foi um fracasso Então, tentamos criar uma plataforma do zero, com novas regras de negócio e mais genérica para atender todos os clientes Fornecedores primeiro porque a plataforma dos hospitais é mais complexa; Hospitais é um nicho de mercado que já alcançamos quase 100% Menor complexidade mais maior oportunidade de mercado
  3. Se Continuar com a plataforma atual, iriamos ser ultrapassado pelos concorrentes do mercado no futuro A diretoria entendeu que precisavamos evoluir tanto a empresa quanto suas soluções digitais Tentou-se atualizar a plataforma corrente com o projeto Usabilidade, mas o projeto foi um fracasso Então, tentamos criar uma plataforma do zero, com novas regras de negócio e mais genérica para atender todos os clientes Fornecedores primeiro porque a plataforma dos hospitais é mais complexa; Hospitais é um nicho de mercado que já alcançamos quase 100% Menor complexidade mais maior oportunidade de mercado
  4. File Transfer (43)—One application writes a file that another later reads. The applications need to agree on the filename and location, the format of the file, the timing of when it will be written and read, and who will delete the file. Shared Database (47)—Multiple applications share the same database schema, located in a single physical database. Because there is no duplicate data storage, no data has to be transferred from one application to the other. Remote Procedure Invocation (50)—One application exposes some of its functionality so that it can be accessed remotely by other applications as a remote procedure. The communication occurs in real time and synchronously. Messaging (53)—One application publishes a message to a common mes- sage channel. Other applications can read the message from the channel at a later time. The applications must agree on a channel as well as on the for- mat of the message. The communication is asynchronous.
  5. The quick answer is that messaging is more immediate than File Transfer (43), better encapsulated than Shared Database (47), and more reliable than Remote Procedure Invocation (50) Não depende de onde o serviço está localizado; Não depende se o serviço está de pé no momento da requisição; Não depende de uma interface específica;
  6. Por exemplo, saber que o criação de pedidos acontece no fluxo de cotação em espera?
  7. 1: mensagem de criação 2: mensagem de atualização 3: mensagem de atualização
  8. Em que cenários esse problema era comum?
  9. Mensagem JSON de cotação.
  10. - Numerar as bolinhas da cotação
  11. O que mostrar ao usuário enquanto a cotação não foi totalmente integrada? Vale a penas mostrar parte de uma cotação ao invés de não mostrar nada?
  12. - Explicar em detalhes o que significa operações simultaneas
  13. Alguns exemplos de defeitos / casos não esperados Logica complexa de Importação de pedido vs pedidos de contrato – outro fluxo separado para pedidos de contrato Pedido existe no regene mas nao existe no clássico Buscamos mudar o modelo de dados pensando numa melhor arquitetura
  14. - Se não corrigir os erros, pq um dado que não integrou anteriormente iria integrar depois?
  15. Ter mais acesso aos problemas do usuário Os usuários podiam ser atendidos mais facilmente O tempo de migração ficou mais curto A area de tecnologia tomou o controle da migração