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

Tamanho: px
Começar a partir da página:

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

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