Veja nessa palestra como a distribuição de serviços, o uso de Web APIs e processamento assíncrono nos fez atingir objetivos de crescimento agressivo e quebrar a barreira de um milhão de pedidos por mês no iFood.
Entre os assuntos abordados:
Modularização de APIs REST e flexibilidade para suporte de aplicações mobile, web, integrações de parceiros além de serviços internos e uso de SDK;
Caching compartilhado de alta performance com Aerospike e com o uso de filas e eventos na AWS, solucionando problemas de escala e alto processamento;
Microservices e migração de serviços monolíticos utilizando Spring Boot, benefícios e problemas enfrentados;
Coleta de métricas com Metrics e Graphite e o monitoramento de APIs, e como isso pode ser estratégico no desenvolvimento.
São explorados sucessos, dificuldades e falhas neste percurso de evolução de sistemas legados e integrações. Também mostramos como estar preparado para um futuro de alto crescimento e elasticidade de acessos.
3. 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
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
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
http://martinfowler.com/articles/feature-toggles.html
21. Event-driven messaging
Redução de processamento síncrono com
menos orquestração e mais coreografia
Alguns cenários:
● Envio de emails
● Notificações
● Cancelamentos
● Captura de pagamentos
● Analytics
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
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
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. 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
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
Autoscaling
Applications
Deploy Artifact
Libs
Sync Repository
Get Instances
Orchestrated deploy
Get deploy artifact
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 !
http://martinfowler.com/articles/microservice-trade-offs.html