57
Web APIs e delivery Matando a fome de 1 milhão de pedidos mensais no Tiago Dolphine

QCon SP 2016 - WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Embed Size (px)

Citation preview

Page 1: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Web APIs e delivery

Matando a fome de 1 milhão de pedidos mensais no

Tiago Dolphine

Page 2: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Tiago Dolphine ...

Page 3: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Order food from App or Web

Restaurant receives the order

Confirms the order and prepare

Back office operators

Customer search for restaurants

APIs

Online Delivery

Page 4: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

4

Page 5: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

5

Page 6: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Elasticidade para delivery

Almoço Jantar

Page 7: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Elasticidade para delivery

Almoço Jantar

+ Campanhas de Marketing : push app, comerciais, jogos de futebol ...

Page 8: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 9: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 10: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Primeiras APIsMobile App

SOAP/WSDL

Page 11: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

11

2011 2012

14k

28k

Page 12: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Web APIs e REST (WS CORE)

● Padronizar comunicação

● Centralizar regras de negócio

● Modelo de dados padronizado

● API Credential (permissões)

● SDK para uso das APIs

● Rapidez na inserção de features● Deploy facilitado

Page 13: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

API recepção de pedidos

● Foco bem específico

● Acesso por restaurantes

● Polling

● Confirmação de pedido

● Otimização e Caching

● Acesso ao DB

Page 14: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

APIs públicas

Integrações (3rd party)

● Restaurantes● Cardápios● Clientes● Pedidos● Controle de acesso● Conquista de novos parceiros e negócios

Page 15: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Começam os problemas...● Gargalos e load elevado

● Busca de endereços

● Processamento síncrono

● Jobs e processamentos em background

● Muito acesso ao DB

● Comprometimento do sistema no lançamento de novas features

Page 16: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Como solucionamos problema com demora na busca de endereços?

Page 17: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Job para indexar Endereços e CEPs

WS

Base relacional própria com mapeamento de endereços

~4x mais rapidoAlívio de queries ao DB

Page 18: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Como solucionamos o impacto de novas features em produção?

Page 19: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Feature Toggles

Novas funcionalidades em produção

Rapidez e segurança para publicação

Validação controlada, no mundo real

Comparação de cenários

Chaveamento automático

http://martinfowler.com/articles/feature-toggles.html

Page 20: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Como reduzimos excesso de processamento e tempo de resposta nas APIs?

Page 21: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Event-driven messaging

Redução de processamento síncrono commenos orquestração e mais coreografia

Alguns cenários:

● Envio de emails● Notificações● Cancelamentos● Captura de pagamentos● Analytics

Page 22: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Events-driven messaging

Page 23: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

O que ganhamos?● Alivio de processamento na aplicação

● Deploy independente

● Pontos de falha mais isolados

● Escala com a demanda

Page 24: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

AWS

Page 25: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Aplicações

AAfunilamento no banco de dados

Page 26: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Aplicações e serviços

AAfunilamento no banco de dados

Cache Local

Page 27: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Aplicações e serviços

AAfunilamento no banco de dados

Read Only

Aplicações e serviços

Cache Local

Page 28: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

CachingIn-Memory => rápido

Redução de queries

Respostas mais rápidas das APIs

Maior throughput por instância

Planejamento de TTL com a regra de negócio

Page 29: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

29

14k28k

108k

2012013 201

450k

~800k

2011

Page 30: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

30

14k28k

108k

20142013 2015

450k

800k

2011

Page 31: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Mais problemas surgem com o crescimento...● Número de acessos +++

● Acúmulo de threads

● Tempo de resposta comprometido

● Alto consumo de memória + muito GC

● Muito load em momentos de pico

● Pontos de concorrência entre instâncias

Page 32: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Microservices daqui a pouco….

Page 33: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Lock Distribuído

Instance5

Instance4 Instance3

Instance2

Instance1

● Get/Set Lock

● Release Lock

● Lock TTL

Permitir que apenas um processo/thread em um sistema distribuído acesse

determinado recurso.

Page 34: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Cache DistribuídoAumento do uso de cache

Melhorias de estratégia de caching

Alívio de memoria na aplicação

Compartilhamento de refresh do cache

Dependência total do cache

Disponibilidade + Alta perfomance

Page 35: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Migrando para AerospikeTestes e validação

Abstração de caching nas aplicações

Criação de cluster

Monitoramento

Testes de failover

Atualmente ~15k hits/s

3GB consumo

Page 36: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 37: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 38: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Migrando para Microservices● Deploy segmentado

● Falhas isoladas

● Escalar pontos necessários

● Segmentar Database (DB per Service)

● Tecnologías específicas para cada problema

● Times menores

Page 39: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Times especializados● Mais focados nos requisitos

● Conhecem profundamente o serviço

● Tecnologias específicas

● Melhor gerenciamento

● Responsabilidade pelos deploys

Page 40: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Estratégia inicial para microservices● Encontrar os maiores problemas

● Delimitando escopos (bounded contexts)

● Padronização e stack

● Definir tecnologias especificas

● Mudança de paradigmas (chamadas remotas)

● Falha inevitável

● Preferir coreografia

Page 41: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Autenticação Centralizada● Padrão de autenticação entre microservices● Spring Security OAuth2● Authorization Server● Applications: OAuth2 SDK ● Client: fácil uso respeitando fluxo OAuth2

“Authorization: Bearer 8ba887c0-90d8-423f-99d3-ce878e48d3e7”

Page 42: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 43: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Auxilia no processo de migração

Sem alteração no Frontend

API se mantém constante

Backend pode ser alterado conforme evolução dos Microservices

Reduz chamadas remotas entre clientes externos/server

http://samnewman.io/patterns/architectural/bff/

BFF Backends for Frontends

BFF

Restaurant

Order

Account

Page 44: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Um pouco do que estamos usando...

(Boot , MVC, Cache, Messaging, Data, Actuator, OAuth2 ...)

Page 45: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

DevOps...● Continuous Integration ● Continuous Deployment● Orchestrated deploy process ● Quick Releases● Service per host● Chef● AWS Auto scaling

Page 46: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

CI / CD Process

Autoscaling

Applications

Deploy Artifact

Libs

Sync Repository

Get Instances

Orchestrated deploy

Get deploy artifact

Page 47: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Monitoramento !

Logs CentralizadosAlertas

Page 48: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Monitoramento

48

Page 49: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Problemas encontrados e aprendizados:

● CI/CD necessário !● Plano de rollback● Time precisa estar envolvido em todo processo● Log não centralizados● Controle de versões entre serviços● Desenvolvimento e testes com sistemas distribuídos● Identificação de bugs em produção● Pontos concorrência: necessário distributed lock !

http://martinfowler.com/articles/microservice-trade-offs.html

Page 50: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Cuidado !

Page 51: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Monolith First

http://martinfowler.com/bliki/MonolithFirst.html

Page 52: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Hoje ! 2016❖ 1.4 milhões++ / mês

Page 53: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Microservices

OrdersPaymentsLocations

Restaurants

AccountsMenu

Page 54: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 55: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Tiago Dolphine

/tiagodolphine

[email protected]

/tiagodolphine

/tiagodolphine

Page 56: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood
Page 57: QCon SP 2016 -  WebAPIs e delivery: Matando a fome de 1 milhão de pedidos mensais no iFood

Further Reading

● http://martinfowler.com/articles/feature-toggles.html● http://samnewman.io/patterns/architectural/bff/● http://martinfowler.com/articles/dont-start-monolith.html● https://martin.kleppmann.com/2016/02/08/how-to-do-distributed-locking.html● http://martinfowler.com/articles/microservice-trade-offs.html