SlideShare uma empresa Scribd logo
1 de 37
Baixar para ler offline
PostgreSQL na plataforma
de dados do iFood
Veja como o iFood trabalha com dados, saindo do app,
passando pelos micro-serviços, residindo em várias
instâncias do PostgreSQL, e sendo populados por completo
em nosso Datalake.
Matheus de Oliveira
<matioli.matheus@gmail.com>
PGConf.Brasil (2018-08-03)
O menu dessa palestra
1. Evolução tecnológica do iFood
2. Do mono-lito aos micro-serviços
3. O PostgreSQL no iFood
4. Plataforma de busca
5. Troca de mensagens entre serviços
6. Juntando tudo!
 
Evolução tecnológica do iFood
Em números
   4   
países
530+
cidades
8.200.000+
pedidos por mês
1.500+
pedidos entregues por
minuto
  100%+  
crescimento ao
ano
E ainda temos muita margem para crescer
Ref: http://exame.abril.com.br/marketing/brasileiros-app-
comida-delivery/
Mas não é tão simples quanto parece...
Restaurante Consumidor Entregador
Padrão de consumo
Time Tecnologia meados 2015
HOJE
Novo prédio em Campinas
(time de tecnologia) - 2017
Venha trabalhar conosco: ifood.delivery/br/vagas
Micro-serviços no iFood
Arquitetura monolítica
Internal Network
End Users
Database
Webservice
Backoffice
Restaurant
And Integrations
Website
Backoffice
Operators
Analytics
Arquitetura de micro-serviços
Internal NetworkEnd Users
Webservice
Backoffice
Restaurant
And Integrations
Backoffice
Operators
APIGateway
Website
Integration
Order
Discovery
Restaurant
Logistic
Payment
...
+50 microserviços
Legacy
Microservice
Nossa arquitetura padrão
Vamos de nir um padrão...
O PostgreSQL no iFood
Hoje temos mais de 50 bancos de dados
A maioria altamente transacionais
Alguns com muita escrita, outros com muitas leituras
Alguns com alta taxa de UPDATE, outros com
arquitetura de banco imutável (append-only)
Em geral os esquemas são pequenos, menos de 50
tabelas (um deles tem apenas uma tabela, por exemplo)
Mas os tamanhos variam de alguns megabytes até mais
de 1TB
Plataforma de busca de restaurantes
O problema: dados de vários serviços integrados na mesma tela/visualização
Plataforma de busca de restaurantes
Solução atual!
Plataforma de busca de restaurantes
Problemas com a solução atual:
Sincronização dos dados complexa, difícil garantir
consistência
Tempo de sincronia alto quando muita alteração é feita e
eventual perda de sincronia
Várias tecnologias na mesma plataforma
Di culdade de debug (origem dos dados espalhados,
tornando difícil "juntar" tudo e validar)
Di culdade em gerenciar caches entre as várias camadas
Dependência de outros serviços (que poderiam não ser
críticos, como o "Location Service"), di culta manutenção
e escalabilidade
Nova plataforma de busca de restaurantes
origem dos dados
Instâncias dos serviços de origem, todas usando PostgreSQL
como base de dados
Nova plataforma de busca de restaurantes
extração dos dados
Replicação das bases PostgreSQL de cada serviço para uma
base central (cada origem num schema), usando replicação
lógica (nativa)
Nova plataforma de busca de restaurantes
processamento dos dados
Cada tabela replicada possui uma trigger, que processa os
dados e alimenta tabelas com esquema otimizados pra
busca (de-normalizados)
Nova plataforma de busca de restaurantes
isolamento das tabelas otimizadas
Por sua vez, apenas as tabelas otimizadas são replicadas (via
replicação lógica) para a base dedicada para busca
Nova plataforma de busca de restaurantes
balanceamento de carga, elasticidade na busca
Essa base replica, usando replicação física nativa, para N
instâncias num group de Auto Scaling.
N irá variar dependendo do uso no horário
Nova plataforma de busca de restaurantes
camada de serviço
Por m, o serviço conecta no ELB (Elastic Load Balancer) das
instâncias em Auto Scaling para responder às buscas dos
usuários
Nova plataforma de busca de restaurantes
integração com data intelligence
Integração com serviço de data intelligence para prover
ranking no contexto do usuário
Troca de mensagens e dados entre
serviços
AWS SNS - Simple Noti cation Service
Tópicos que recebem mensagens e repassam para
múltiplos receptores com diversos protocolos (como
la SQS, e-mail, SMS, chamada HTTP, etc.)
No iFood, sempre que um serviço quer enviar eventos
para outros consumirem, este serviço faz uma publicação
desse evento num tópico SNS.
AWS SQS - Simple Queue Service
Fila altamente escalável.
No iFood, sempre que um serviço quer receber eventos
de outro, criamos uma la SQS para este que assina o
tópico SNS do serviço de origem.
SNS/SQS - Exemplo
Juntando tudo!
Datalake (visão geral)
Perguntas?
Obrigado!
Matheus de Oliveira
irc.freenode.net -
/join #postgresql,#postgresql-br: @MatheusOl
Twitter:
LinkedIn:
SlideShare:
matioli.matheus@gmail.com
@matioli_matheus
br.linkedin.com/in/matheusdeoliveira/
slideshare.net/matheus_de_oliveira

Mais conteúdo relacionado

Semelhante a PGConf.Brasil 2018 - PostgreSQL na plataforma de dados do iFood

QCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFoodQCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFoodTiago Marchetti Dolphine
 
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Marcos Freccia
 
Variáveis personalizadas no sei 3.0
Variáveis personalizadas no sei 3.0Variáveis personalizadas no sei 3.0
Variáveis personalizadas no sei 3.0Colaborativismo
 
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4Adilson Nascimento
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql serverMarcos Freccia
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebJoel Pinho Lucas
 
A eficiência da gestão por meio da integração com os sistemas estruturantes
A eficiência da gestão por meio da integração com os sistemas estruturantesA eficiência da gestão por meio da integração com os sistemas estruturantes
A eficiência da gestão por meio da integração com os sistemas estruturantesGibeon Aquino
 
201406Carvalho
201406Carvalho201406Carvalho
201406CarvalhoAfonso Pra
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de SoftwareSaulo Arruda
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)Flávio Lisboa
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTMario Sergio
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
Parse - Backend As A Service
Parse - Backend As A ServiceParse - Backend As A Service
Parse - Backend As A ServiceHenrique Morbin
 
ES-Relatorio.pdf
ES-Relatorio.pdfES-Relatorio.pdf
ES-Relatorio.pdfturma23050
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...fabio perrella
 
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasEscalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasCelso Crivelaro
 

Semelhante a PGConf.Brasil 2018 - PostgreSQL na plataforma de dados do iFood (20)

QCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFoodQCon SP 2017 - Reactive Microservices e a experiência do iFood
QCon SP 2017 - Reactive Microservices e a experiência do iFood
 
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
Webcast: 5 coisas que todo desenvolvedor deveria saber sobre sql server
 
Variáveis personalizadas no sei 3.0
Variáveis personalizadas no sei 3.0Variáveis personalizadas no sei 3.0
Variáveis personalizadas no sei 3.0
 
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
 
5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server5 coisas que todo desenvolvedor deveria saber sobre sql server
5 coisas que todo desenvolvedor deveria saber sobre sql server
 
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas WebUtilizando Machine Learning e Java para classificar o conteúdo de páginas Web
Utilizando Machine Learning e Java para classificar o conteúdo de páginas Web
 
A eficiência da gestão por meio da integração com os sistemas estruturantes
A eficiência da gestão por meio da integração com os sistemas estruturantesA eficiência da gestão por meio da integração com os sistemas estruturantes
A eficiência da gestão por meio da integração com os sistemas estruturantes
 
201406Carvalho
201406Carvalho201406Carvalho
201406Carvalho
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Jsp+Jdbc+Servlets
Jsp+Jdbc+ServletsJsp+Jdbc+Servlets
Jsp+Jdbc+Servlets
 
teste86940.78038637294
teste86940.78038637294teste86940.78038637294
teste86940.78038637294
 
ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)ExpressoBR para Um Milhão (de Usuários)
ExpressoBR para Um Milhão (de Usuários)
 
Curso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service RESTCurso Java (Parte 8) Web Service REST
Curso Java (Parte 8) Web Service REST
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Parse - Backend As A Service
Parse - Backend As A ServiceParse - Backend As A Service
Parse - Backend As A Service
 
ES-Relatorio.pdf
ES-Relatorio.pdfES-Relatorio.pdf
ES-Relatorio.pdf
 
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...Qconsp 2016   escalando uma plataforma de e-mail transacional- aprendizado da...
Qconsp 2016 escalando uma plataforma de e-mail transacional- aprendizado da...
 
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheirasEscalando uma plataforma de e-mail transacional- aprendizado das trincheiras
Escalando uma plataforma de e-mail transacional- aprendizado das trincheiras
 
Google BigQuery
Google BigQueryGoogle BigQuery
Google BigQuery
 
12.08.22 olap
12.08.22   olap12.08.22   olap
12.08.22 olap
 

PGConf.Brasil 2018 - PostgreSQL na plataforma de dados do iFood

  • 1. PostgreSQL na plataforma de dados do iFood Veja como o iFood trabalha com dados, saindo do app, passando pelos micro-serviços, residindo em várias instâncias do PostgreSQL, e sendo populados por completo em nosso Datalake. Matheus de Oliveira <matioli.matheus@gmail.com> PGConf.Brasil (2018-08-03)
  • 2. O menu dessa palestra 1. Evolução tecnológica do iFood 2. Do mono-lito aos micro-serviços 3. O PostgreSQL no iFood 4. Plataforma de busca 5. Troca de mensagens entre serviços 6. Juntando tudo!
  • 3.  
  • 5. Em números    4    países 530+ cidades 8.200.000+ pedidos por mês 1.500+ pedidos entregues por minuto   100%+   crescimento ao ano
  • 6. E ainda temos muita margem para crescer Ref: http://exame.abril.com.br/marketing/brasileiros-app- comida-delivery/
  • 7. Mas não é tão simples quanto parece...
  • 11. HOJE
  • 12. Novo prédio em Campinas (time de tecnologia) - 2017 Venha trabalhar conosco: ifood.delivery/br/vagas
  • 14. Arquitetura monolítica Internal Network End Users Database Webservice Backoffice Restaurant And Integrations Website Backoffice Operators Analytics
  • 15. Arquitetura de micro-serviços Internal NetworkEnd Users Webservice Backoffice Restaurant And Integrations Backoffice Operators APIGateway Website Integration Order Discovery Restaurant Logistic Payment ... +50 microserviços Legacy Microservice
  • 17. Vamos de nir um padrão...
  • 18. O PostgreSQL no iFood Hoje temos mais de 50 bancos de dados A maioria altamente transacionais Alguns com muita escrita, outros com muitas leituras Alguns com alta taxa de UPDATE, outros com arquitetura de banco imutável (append-only) Em geral os esquemas são pequenos, menos de 50 tabelas (um deles tem apenas uma tabela, por exemplo) Mas os tamanhos variam de alguns megabytes até mais de 1TB
  • 19. Plataforma de busca de restaurantes
  • 20. O problema: dados de vários serviços integrados na mesma tela/visualização
  • 21. Plataforma de busca de restaurantes Solução atual!
  • 22. Plataforma de busca de restaurantes Problemas com a solução atual: Sincronização dos dados complexa, difícil garantir consistência Tempo de sincronia alto quando muita alteração é feita e eventual perda de sincronia Várias tecnologias na mesma plataforma Di culdade de debug (origem dos dados espalhados, tornando difícil "juntar" tudo e validar) Di culdade em gerenciar caches entre as várias camadas Dependência de outros serviços (que poderiam não ser críticos, como o "Location Service"), di culta manutenção e escalabilidade
  • 23. Nova plataforma de busca de restaurantes origem dos dados Instâncias dos serviços de origem, todas usando PostgreSQL como base de dados
  • 24. Nova plataforma de busca de restaurantes extração dos dados Replicação das bases PostgreSQL de cada serviço para uma base central (cada origem num schema), usando replicação lógica (nativa)
  • 25. Nova plataforma de busca de restaurantes processamento dos dados Cada tabela replicada possui uma trigger, que processa os dados e alimenta tabelas com esquema otimizados pra busca (de-normalizados)
  • 26. Nova plataforma de busca de restaurantes isolamento das tabelas otimizadas Por sua vez, apenas as tabelas otimizadas são replicadas (via replicação lógica) para a base dedicada para busca
  • 27. Nova plataforma de busca de restaurantes balanceamento de carga, elasticidade na busca Essa base replica, usando replicação física nativa, para N instâncias num group de Auto Scaling. N irá variar dependendo do uso no horário
  • 28. Nova plataforma de busca de restaurantes camada de serviço Por m, o serviço conecta no ELB (Elastic Load Balancer) das instâncias em Auto Scaling para responder às buscas dos usuários
  • 29. Nova plataforma de busca de restaurantes integração com data intelligence Integração com serviço de data intelligence para prover ranking no contexto do usuário
  • 30.
  • 31. Troca de mensagens e dados entre serviços
  • 32. AWS SNS - Simple Noti cation Service Tópicos que recebem mensagens e repassam para múltiplos receptores com diversos protocolos (como la SQS, e-mail, SMS, chamada HTTP, etc.) No iFood, sempre que um serviço quer enviar eventos para outros consumirem, este serviço faz uma publicação desse evento num tópico SNS. AWS SQS - Simple Queue Service Fila altamente escalável. No iFood, sempre que um serviço quer receber eventos de outro, criamos uma la SQS para este que assina o tópico SNS do serviço de origem.
  • 37. Obrigado! Matheus de Oliveira irc.freenode.net - /join #postgresql,#postgresql-br: @MatheusOl Twitter: LinkedIn: SlideShare: matioli.matheus@gmail.com @matioli_matheus br.linkedin.com/in/matheusdeoliveira/ slideshare.net/matheus_de_oliveira