Web APIs e delivery. Matando a fome de 1 milhão de pedidos mensais no. Tiago Dolphine
|
|
- Marcelo do Amaral Aveiro
- 8 Há anos
- Visualizações:
Transcrição
1 Web APIs e delivery Matando a fome de 1 milhão de pedidos mensais no Tiago Dolphine
2 Tiago Dolphine...
3 Online Delivery Restaurant receives the order Customer search for restaurants APIs Order food from App or Web Confirms the order and prepare Back office operators
4 4
5 5
6 Elasticidade para delivery Almoço Jantar
7 Elasticidade para delivery Almoço + Jantar Campanhas de Marketing : push app, comerciais, jogos de futebol...
8
9
10 Primeiras APIs Mobile App SOAP/WSDL
11 28k 14k
12 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
13 API recepção de pedidos Foco bem específico Acesso por restaurantes Polling Confirmação de pedido Otimização e Caching Acesso ao DB
14 APIs públicas Integrações (3rd party) Restaurantes Cardápios Clientes Pedidos Controle de acesso Conquista de novos parceiros e negócios
15 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
16 Como solucionamos problema com demora na busca de endereços?
17 ~4x mais rapido Alívio de queries ao DB WS Job para indexar Endereços e CEPs Base relacional própria com mapeamento de endereços
18 Como solucionamos o impacto de novas features em produção?
19 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
20 Como reduzimos excesso de processamento e tempo de resposta nas APIs?
21 Event-driven messaging Redução de processamento síncrono com menos orquestração e mais coreografia Alguns cenários: Envio de s Notificações Cancelamentos Captura de pagamentos Analytics
22 Events-driven messaging
23 O que ganhamos? Alivio de processamento na aplicação Deploy independente Pontos de falha mais isolados Escala com a demanda
24 AWS
25 Aplicações A Afunilamento no banco de dados
26 Aplicações e serviços Cache Local A Afunilamento no banco de dados
27 Aplicações e serviços Cache Local A Afunilamento no banco de dados Read Only
28 Caching In-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
29 ~800 k 450 k 108 k 14k k
30 800k 450k 108k 14k k
31 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
32 Microservices daqui a pouco.
33 Lock Distribuído Permitir que apenas um processo/thread em um sistema distribuído acesse determinado recurso. Instance1 Instance5 Get/Set Lock Release Lock Lock TTL Instance2 Instance4 Instance3
34 Cache Distribuído Aumento 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
35 Migrando para Aerospike Testes e validação Abstração de caching nas aplicações Criação de cluster Monitoramento Testes de failover Atualmente ~15k hits/s 3GB consumo
36
37
38 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
39 Times especializados Mais focados nos requisitos Conhecem profundamente o serviço Tecnologias específicas Melhor gerenciamento Responsabilidade pelos deploys
40 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
41 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
42
43 BFF Backends for Frontends Restaurant Auxilia no processo de migração BFF Order 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 Account
44 Um pouco do que estamos usando... (Boot, MVC, Cache, Messaging, Data, Actuator, OAuth2...)
45 DevOps... Continuous Integration Continuous Deployment Orchestrated deploy process Quick Releases Service per host Chef AWS Auto scaling
46 CI / CD Process Get deploy artifact Deploy Artifact Get Instances Au tos Sync Repository g lin ca Orchestrated deploy Libs Applications
47 Monitoramento! Alertas Logs Centralizados
48 Monitoramento 48
49 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!
50 Cuidado!
51 Monolith First
52 Hoje! milhões++ / mês
53 Orders Payments Restaurants Locations Menu Accounts Microservices
54
55 Tiago Dolphine /tiagodolphine /tiagodolphine /tiagodolphine
56
57 Further Reading