SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Como o iFood usou
CQRS para escalar a
contabilização de +30M
de pedidos por mês
Danilo P. De Luca
Software Engineer - iFood
Fintech Team
Quem sou eu?
/danilopereiradeluca
/danilopdl
+30M pedidos mês
+160K restaurantes ativos
Arquitetura MicroService
Cenárioatual
doiFood
● Dinâmicas de precificação de pedido.
● Repasses/Transferências aos restaurantes.
● Fechamento contábil do iFood.
O que o time de Fintech
faz?
Repasses aos
restaurantes
● Detalhes distribuídos +15 serviços.
○ Agregações de dados.
● Concorrência de processamento x
consulta.
● Modelo de visualização “acoplado”.
● Escalabilidade e Performance.
● Difícil manutenção.
Nossos problemas
Detalhes distribuídos em +15 serviços
Payout-
service
billing-
framew
ork
billing-
gmv
Billing-
Order
billing-
occurre
nce
billing-
fee
Os mesmos serviços que tinham a
responsabilidade de fazer o processamento
pesado para garantir o valor correto de repasse,
tinham que “concorrer” com uma camada de
consulta.
Em dados momentos os serviços degradavam
pela quantidade de consultas ser intensa e o
processamento acabava sendo afetado.
Concorrência de
Processamento X Consulta
Acoplamento com o modelo usado para salvar
os dados processados com o modelo de
consulta, dificultando evolução em ambos os
modelos.
Além disso, a mudança em um sistema refletia
na mudança de todos os sistemas que faziam
consulta aos dados desse sistema.
Modelo de visualização “acoplado”
● Alto custo de escalabilidade, tanto para
aplicação quanto para banco de dados,
tendo um retorno de resposta não
satisfatório.
● Performance limitada a performance de
query (indexes).
Escalabilidade e Performance
Difícil manutenção
Alteração em 1 serviço exigia deploy em
outros serviços, principalmente quando
mudava o modelo de dados.
Configuração de backpressure de
processamento depender do throughput
de consulta.
Utilizando CQRS e
+Event-Driven(Sagas)
CQRS (Command Query Responsability
Segregation) é um pattern de arquitetura
que resume a separação da arquitetura em
duas camadas: uma de leitura e uma de
comandos (escrita). Com isso é possível ter
modelos diferentes na camada de consulta
da camada de escrita/update.
O que é CQRS?
O que é CQRS?
fonte: https://martinfowler.com/bliki/CQRS.html
Sagas Pattern
Event-Driven
“Uma forma de dividir uma transação
distribuída em um conjunto de transações
menores em qualquer commit ou rollback.”
- Chris Richardson
**Garantia de ACID - Atomicidade,
Consistência, Isolamento e Durabilidade
Sagas Pattern
fonte: https://microservices.io/patterns/data/saga.html
Possíveis implementações
1. Replicação de Banco de Dados.
2. Utilização de broker de mensageria
(SQS/SNS/KAFKA)
● Utilização de mecanismos e rotinas
de banco de dados para replicação
de dados em outra base.
● Criação de “Views” para agregação
de dados e assim termos os dados
já modelados para facilitar queries.
Replicação de dados por Banco de Dados.
Replicação de dados por Banco de Dados.
● Performance limitada a indexação
nas queries
● Alta complexidade na criação das
views
● Pouca flexibilidade para evolução
● Custo com infra muito alto - Banco
de dados gigante
Replicação de dados por Banco de Dados.
Problemas
● Utilização de broker de mensageria
para internalização de dados.
● Modelagem de dados a partir de
“views” específicas.
● Possibilidade de utilizar um banco
diferente para consulta de dados -
ScyllaDB.
Utilização de broker de mensageria - Kafka
Utilização de broker de mensageria - Kafka
Utilização de broker de mensageria - Kafka
● Mais um step em todos as Sagas
dos serviços para publicação de
dados no broker.
● Complexidade na orquestração de
eventos.
● Reprocessamento das “views” ser
unitário.
Utilização de broker de mensageria - Kafka
“Problemas”
1. +1 step de complexidade
nas sagas.
2. Um novo sistema para
monitoramento.
3. Único ponto de “query”
para clients.
4. Custo de implementação.
Principais problemas usando CQRS
1. Performance nas APIs de consulta
2. Maior escala em processamento de
dados.
3. Escalabilidade voltada ao problema.
4. Menor tempo de indisponibilidade
durante grandes processamentos.
5. Desacoplamento de dados
Benefícios usando CQRS
Referências
Referências
http://cqrs.nu/
https://martinfowler.com/bliki/CQRS.html
https://microservices.io
https://www.confluent.io/blog/category/microservices/
Dúvidas?
#Fi queEmCasa

Weitere ähnliche Inhalte

Ähnlich wie Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por mês - TDC Florianópolis 2020

Presentation yros | aws solution provider
Presentation yros | aws solution providerPresentation yros | aws solution provider
Presentation yros | aws solution providerYros
 
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Paula Santana
 
Serviços Gerenciados Decatron
Serviços Gerenciados DecatronServiços Gerenciados Decatron
Serviços Gerenciados DecatronEm transição
 
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRSComo construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRSGuilherme Ferreira
 
Quality 2018 Value Proposition completo atualizado
Quality 2018 Value Proposition completo atualizadoQuality 2018 Value Proposition completo atualizado
Quality 2018 Value Proposition completo atualizadoJorge Biesczad Jr.
 
Gerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo Summit
Gerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo SummitGerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo Summit
Gerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo SummitAmazon Web Services
 
ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...
ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...
ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...CADWARE-TECHNOLOGY
 
Latinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyLatinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyDextra
 
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Leandro Guimarães
 
Plano para medição de capacidade e performance em redes virtuais por Leonidas...
Plano para medição de capacidade e performance em redes virtuais por Leonidas...Plano para medição de capacidade e performance em redes virtuais por Leonidas...
Plano para medição de capacidade e performance em redes virtuais por Leonidas...Joao Galdino Mello de Souza
 
Experiência da SulAmerica com Kafka -
Experiência da SulAmerica com Kafka - Experiência da SulAmerica com Kafka -
Experiência da SulAmerica com Kafka - Techrom Tecnologia
 
Gerenciando Portais Liferay com Soluções de Performance Digital
Gerenciando Portais Liferay com Soluções de Performance DigitalGerenciando Portais Liferay com Soluções de Performance Digital
Gerenciando Portais Liferay com Soluções de Performance DigitalDynatrace Latin America
 
Institucional 2016 premier it
Institucional 2016 premier it Institucional 2016 premier it
Institucional 2016 premier it Jorge Biesczad Jr.
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisEiti Kimura
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisDataStax Academy
 
Cloud apresentação
Cloud apresentaçãoCloud apresentação
Cloud apresentaçãorodolfofnd
 
Apresentação Decatron
Apresentação DecatronApresentação Decatron
Apresentação DecatronEm transição
 
Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?brunorroda
 

Ähnlich wie Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por mês - TDC Florianópolis 2020 (20)

Presentation yros | aws solution provider
Presentation yros | aws solution providerPresentation yros | aws solution provider
Presentation yros | aws solution provider
 
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
Desenvolvendosistemasgigantesnainternetcomarquiteturabaseada 190213231932 (1)
 
Serviços Gerenciados Decatron
Serviços Gerenciados DecatronServiços Gerenciados Decatron
Serviços Gerenciados Decatron
 
Como construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRSComo construir software altamente eficiente com CQRS
Como construir software altamente eficiente com CQRS
 
Quality 2018 Value Proposition completo atualizado
Quality 2018 Value Proposition completo atualizadoQuality 2018 Value Proposition completo atualizado
Quality 2018 Value Proposition completo atualizado
 
Gerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo Summit
Gerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo SummitGerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo Summit
Gerenciando um ambiente de nuvem complexo - DEM05 - Sao Paulo Summit
 
ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...
ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...
ProIndústria 2017 - A10 - Como viabilizar plataformas virtuais de tecnologia ...
 
Latinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com HolyLatinoware 2012 - Desenvolvendo Interfaces com Holy
Latinoware 2012 - Desenvolvendo Interfaces com Holy
 
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
Latinoware2012 - Desenvolvendo interfaces WEB com HOLY de forma prática e efi...
 
Plano para medição de capacidade e performance em redes virtuais por Leonidas...
Plano para medição de capacidade e performance em redes virtuais por Leonidas...Plano para medição de capacidade e performance em redes virtuais por Leonidas...
Plano para medição de capacidade e performance em redes virtuais por Leonidas...
 
Itil gerenc cap
Itil gerenc capItil gerenc cap
Itil gerenc cap
 
Experiência da SulAmerica com Kafka -
Experiência da SulAmerica com Kafka - Experiência da SulAmerica com Kafka -
Experiência da SulAmerica com Kafka -
 
Gerenciando Portais Liferay com Soluções de Performance Digital
Gerenciando Portais Liferay com Soluções de Performance DigitalGerenciando Portais Liferay com Soluções de Performance Digital
Gerenciando Portais Liferay com Soluções de Performance Digital
 
Architecture performance using micro services
Architecture performance using micro servicesArchitecture performance using micro services
Architecture performance using micro services
 
Institucional 2016 premier it
Institucional 2016 premier it Institucional 2016 premier it
Institucional 2016 premier it
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento  de Aplicações para  serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços MóveisQConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
QConSP 2014 - Cassandra no Desenvolvimento de Aplicações para serviços Móveis
 
Cloud apresentação
Cloud apresentaçãoCloud apresentação
Cloud apresentação
 
Apresentação Decatron
Apresentação DecatronApresentação Decatron
Apresentação Decatron
 
Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?Webinar - Como estruturar seu projeto de nuvem?
Webinar - Como estruturar seu projeto de nuvem?
 

Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por mês - TDC Florianópolis 2020

  • 1. Como o iFood usou CQRS para escalar a contabilização de +30M de pedidos por mês
  • 2. Danilo P. De Luca Software Engineer - iFood Fintech Team Quem sou eu? /danilopereiradeluca /danilopdl
  • 3. +30M pedidos mês +160K restaurantes ativos Arquitetura MicroService Cenárioatual doiFood
  • 4. ● Dinâmicas de precificação de pedido. ● Repasses/Transferências aos restaurantes. ● Fechamento contábil do iFood. O que o time de Fintech faz?
  • 6. ● Detalhes distribuídos +15 serviços. ○ Agregações de dados. ● Concorrência de processamento x consulta. ● Modelo de visualização “acoplado”. ● Escalabilidade e Performance. ● Difícil manutenção. Nossos problemas
  • 8.
  • 10. Os mesmos serviços que tinham a responsabilidade de fazer o processamento pesado para garantir o valor correto de repasse, tinham que “concorrer” com uma camada de consulta. Em dados momentos os serviços degradavam pela quantidade de consultas ser intensa e o processamento acabava sendo afetado. Concorrência de Processamento X Consulta
  • 11. Acoplamento com o modelo usado para salvar os dados processados com o modelo de consulta, dificultando evolução em ambos os modelos. Além disso, a mudança em um sistema refletia na mudança de todos os sistemas que faziam consulta aos dados desse sistema. Modelo de visualização “acoplado”
  • 12. ● Alto custo de escalabilidade, tanto para aplicação quanto para banco de dados, tendo um retorno de resposta não satisfatório. ● Performance limitada a performance de query (indexes). Escalabilidade e Performance Difícil manutenção Alteração em 1 serviço exigia deploy em outros serviços, principalmente quando mudava o modelo de dados. Configuração de backpressure de processamento depender do throughput de consulta.
  • 14. CQRS (Command Query Responsability Segregation) é um pattern de arquitetura que resume a separação da arquitetura em duas camadas: uma de leitura e uma de comandos (escrita). Com isso é possível ter modelos diferentes na camada de consulta da camada de escrita/update. O que é CQRS?
  • 15. O que é CQRS? fonte: https://martinfowler.com/bliki/CQRS.html
  • 16. Sagas Pattern Event-Driven “Uma forma de dividir uma transação distribuída em um conjunto de transações menores em qualquer commit ou rollback.” - Chris Richardson **Garantia de ACID - Atomicidade, Consistência, Isolamento e Durabilidade
  • 18. Possíveis implementações 1. Replicação de Banco de Dados. 2. Utilização de broker de mensageria (SQS/SNS/KAFKA)
  • 19. ● Utilização de mecanismos e rotinas de banco de dados para replicação de dados em outra base. ● Criação de “Views” para agregação de dados e assim termos os dados já modelados para facilitar queries. Replicação de dados por Banco de Dados.
  • 20. Replicação de dados por Banco de Dados.
  • 21. ● Performance limitada a indexação nas queries ● Alta complexidade na criação das views ● Pouca flexibilidade para evolução ● Custo com infra muito alto - Banco de dados gigante Replicação de dados por Banco de Dados. Problemas
  • 22. ● Utilização de broker de mensageria para internalização de dados. ● Modelagem de dados a partir de “views” específicas. ● Possibilidade de utilizar um banco diferente para consulta de dados - ScyllaDB. Utilização de broker de mensageria - Kafka
  • 23. Utilização de broker de mensageria - Kafka
  • 24. Utilização de broker de mensageria - Kafka
  • 25. ● Mais um step em todos as Sagas dos serviços para publicação de dados no broker. ● Complexidade na orquestração de eventos. ● Reprocessamento das “views” ser unitário. Utilização de broker de mensageria - Kafka “Problemas”
  • 26. 1. +1 step de complexidade nas sagas. 2. Um novo sistema para monitoramento. 3. Único ponto de “query” para clients. 4. Custo de implementação. Principais problemas usando CQRS
  • 27. 1. Performance nas APIs de consulta 2. Maior escala em processamento de dados. 3. Escalabilidade voltada ao problema. 4. Menor tempo de indisponibilidade durante grandes processamentos. 5. Desacoplamento de dados Benefícios usando CQRS

Hinweis der Redaktion

  1. https://app.sli.do/event/lzbjujhj
  2. Billing-Order -> Muito importante! Problema em informações de banco -> consultas + inserts
  3. HTTP ->bloqueante não ecalavel Mensagem de retorno ser sucesso ou erro. Melhorar a disponiilidade -> tudo ”assincrono”
  4. Lembrar de falar o que é microserviço de verdade e boas praticas!