A apresentação descreve a remodelação da arquitetura do site walmart.com.br para melhorar o desempenho, escalabilidade e manutenibilidade. Os principais problemas identificados foram tempos de resposta lentos, baixa escalabilidade e código difícil de manter. A nova estratégia envolveu criar caches inteligentes, serviços stateless, renderização assíncrona e controles granulares de cache. Os resultados incluíram redução dos tempos de resposta de páginas de 2.4s para 143ms e capacidade para suportar 45.000 usuários simult
6. Problemas
Tempo de resposta muito alto (segundos).
Experiência de usuário comprometida.
Evasão de usuários.
Ciclo Vicioso: + lento = + reloads = + carga.
Baixa escalabilidade.
Aplicação “aguenta lenta”.
Imprevisibilidade.
7. Problemas
Baixa reutilização.
Difícil de criar novas plataformas.
Código difícil de manter.
Alto consumo de recursos.
SOLR usado como search engine e cache.
Banco de dados com picos de 100% de utilização.
Pouco controle do web cache.
Difícil de expurgar objetos.
Difícil de mudar tempo de vida.
10. Premissas
Utilização de Recursos
Desonerar Banco de Dados.
Desonerar SOLR.
Diminuir número de servidores.
Código
Facilidade de desenvolver.
Alto grau de reutilização.
Usar soluções Open Source.
11.
12. Estratégia
Objetivo 1: Página de Detalhe de Produto.
Maioria dos serviços usados pelo catálogo.
• Preço, parcelamento, disponibilidade, etc.
Conseguimos validar toda a solução.
Análise de cada componente.
• De onde recuperamos essas informações?
• Quanto tempo elas podem ficar em cache?
Objetivos seguintes: Demais Páginas.
13. Sacadas
Fazer o básico: expor tudo como serviços.
Reutilização e “RESTificação” ao extremo.
Business as a Service.
Render as a Service.
Search as a Service.
Criar modelo de domínio independente.
Anteparo às mudanças.
Jobs de alimentação do modelo.
Idas ao banco de dados como exceção.
14. Sacadas
Caches mais inteligentes.
Mais níveis de cache.
Controles mais granulares.
Inteligência nos tempos de vida.
Melhor Distribuição das Tarefas.
Dados.
Negócio.
Renderização.
18. Cache - Browser
Quando possível, o browser resolve localmente.
Response Headers (max-age, etc.).
Recursos estáticos com TTL alto.
Melhor se for infinito.
Requisições Ajax com TTL mais baixo.
Diminui custos com CDN.
22. Cache - Redis
Utilização
Cache dos resultados das chamadas aos serviços.
Modelo de dados desacoplado.
Desonera o banco de dados.
Por quê?
Armazenamento em memória.
Aguenta muita porrada.
Tempo de resposta muito baixo.
Pode persistir.
Independe das linguagens usadas.
25. Renderização - Template Engine
Javascript
Linguagem natural dos webdevs.
Executada no cliente e no servidor.
Muito flexível.
Dust JS
http://linkedin.github.io/dustjs/
Alta performance.
Herança de templates, partials, subtemplates, etc.
Operações assíncronas.
Streaming = baixo consumo de memória.
Fácil customização.
26. Renderização - Nodejs
Javascript server side.
Orientado a eventos.
Alta performance.
Baixo consumo de recursos.
Comunidade forte (NPM).
Vários pacotes:
ExpressJS, Redis, SOLR, Socket I.O
30. Serviços - Tecnologias
Spring on Jetty.
Security, Data, Scheduler, Jedis.
Resteasy.
Exposição dos serviços REST.
Documentação com Wsdocs ou Swagger.
REST e Web Socket Services
In-memory caches.
31.
32. Eventos
Primeiro Release: Rollback!
ESIs em branco.
keep-alive no ExpresJs.
Segundo Release: Memory leak!
Node Cluster como paleativo.
NodeTime para ajudar.
Appender syslog no NodeJS.
Primeira Promoção: Crash!
TTL infinito para objetos inaquedos.
Redis irresponsivo.
34. Lições Aprendidas
Feature rollout.
Replicação de Tráfego + Teste Longo.
Memory leaks.
Condições de produção.
NodeJS
Cenários de muitas chamadas remotas.
Orquestrador, API gateway.
Pouco processamento.
Muita flexibilidade.
Javascript rules! :D
35. Lições Aprendidas
Twemproxy + Redis
Espalhar as chaves entre vários servidores.
Diminuir riscos ao perder um servidor.
Web Socket Services
Throughput mais de 2X maior!
Backoffice
Fundamental para alimentar o modelo independente.
39. Resultados
Teste de Carga
Blazemeter.com
Até 45.000 usuários simultâneos.
Sem passar pela Akamai.
Página de departamento.
Páginas dos produtos.
10.000 possibilidades para cálculo de preço.
15 segundos de thinking time.
Todos os cookies da requisição.
43. O que vem por aí…
Controle total do cache.
API Server.
Web Socket Services.
In-Memory Caches.
Infinispan.
Big Memory.
Client Side Render.
Muitas surpresas… :D