SlideShare uma empresa Scribd logo
Webstore ReloadedWebstore Reloaded
A arquitetura do walmart.com.brA arquitetura do walmart.com.br
remodeladaremodelada
Agenda
Mudança de Filosofia.
Missão
Problemas
Premissas
Estratégia
Sacadas
Solução
Eventos e Lições
Resultados e Rumos Futuros
Mudança de Filosofia
Missão
“Criar uma nova plataforma
de delivery para as páginas
do Walmart.com.br.”
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.
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.
Premissas
Picos
Usuários Simultâneos: 300K
Consumo de Rede: 1Gb.
Disponibilidade
99,9%
Tempo de resposta
T < 500 Milisegundos.
Escalabilidade
Horizontal
Near Linear
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.
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.
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.
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.
Overview
Cache
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.
Cache - Akamai
Prós:
CDN
Diminui o tráfego à nossa infra.
Contras:
Lento.
Às vezes, vai pelo exterior.
Menor controle do cache.
Cache - Varnish
Maior controle do cache.
Desonera a renderização.
Cache de fragmentos da página (ESIs).
Cada fragmento tem um TTL específico.
Cache - Varnish ttl: 1d
ttl: 1h
ttl: 5m
ttl: 1m
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.
Cache - Redis
Renderização - Overview
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.
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
Renderização - Fluxo
 /render/sku,offers,buy_button/11/ecommerce__sku_price_buy
Projeções
sku
offers
buy_button
Id
11
Template
ecommerce/sku_price_buy
Renderização - Fluxo
{
"sku": {
...
},
"offers": {
...
},
"buy_button": {
...
}
} Max-age:
60s
Serviços
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.
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.
Eventos
Segunda Promoção: Crash!
Too many open files! OMG
Teste de carga inadequado.
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
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.
Resultados
Renderização: Página de Produto
Antiga
> 2.4s
Nova
> 143ms
Resultados
Renderização: Produtos Sustentáveis
Antiga
> 5s
Nova
250ms
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.
Resultados
Resultados
Resultados
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
That’s all folks!
@jwalendowsky
jorge.filho@wal-mart.com
jwalendowsky.blogspot.com.br

Mais conteúdo relacionado

Mais procurados

Capacity planning para ambiente distribuído, por Marcelo Otto
Capacity planning para ambiente distribuído, por Marcelo OttoCapacity planning para ambiente distribuído, por Marcelo Otto
Capacity planning para ambiente distribuído, por Marcelo Otto
Joao Galdino Mello de Souza
 

Mais procurados (20)

Rails nas Nuvens
Rails nas NuvensRails nas Nuvens
Rails nas Nuvens
 
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
NoSQL na nuvem com o Azure Cosmos DB - MVPConf 2018
 
Análise de Performance do MySQL e MariaDB
Análise de Performance do MySQL e MariaDBAnálise de Performance do MySQL e MariaDB
Análise de Performance do MySQL e MariaDB
 
Aula 7 - Hands On - Configurando nossa aplicação na AWS com EC2, Elastic Load...
Aula 7 - Hands On - Configurando nossa aplicação na AWS com EC2, Elastic Load...Aula 7 - Hands On - Configurando nossa aplicação na AWS com EC2, Elastic Load...
Aula 7 - Hands On - Configurando nossa aplicação na AWS com EC2, Elastic Load...
 
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
 
Aula 4 - Introdução a aws
Aula 4 - Introdução a awsAula 4 - Introdução a aws
Aula 4 - Introdução a aws
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Whole Site Delivery with Amazon CloudFront
Whole Site Delivery with Amazon CloudFrontWhole Site Delivery with Amazon CloudFront
Whole Site Delivery with Amazon CloudFront
 
HTTP, Requisição e Resposta
HTTP, Requisição e RespostaHTTP, Requisição e Resposta
HTTP, Requisição e Resposta
 
Introducao ao Amazon Redshift
Introducao ao Amazon RedshiftIntroducao ao Amazon Redshift
Introducao ao Amazon Redshift
 
Aula 6 - EC2, ELB, Auto Scaling, Cloud Watch
Aula 6 - EC2, ELB, Auto Scaling, Cloud WatchAula 6 - EC2, ELB, Auto Scaling, Cloud Watch
Aula 6 - EC2, ELB, Auto Scaling, Cloud Watch
 
Apresentação do Curso
Apresentação do CursoApresentação do Curso
Apresentação do Curso
 
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
1º Meetup Zabbix Meetup do Recife: Danilo Barros - Zabbix dicas e truques par...
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
Introduction to Cloud Computing
Introduction to Cloud ComputingIntroduction to Cloud Computing
Introduction to Cloud Computing
 
Capacity planning para ambiente distribuído, por Marcelo Otto
Capacity planning para ambiente distribuído, por Marcelo OttoCapacity planning para ambiente distribuído, por Marcelo Otto
Capacity planning para ambiente distribuído, por Marcelo Otto
 
Talk at QConSP
Talk at QConSPTalk at QConSP
Talk at QConSP
 
Performance Web com ASP.NET MVC
Performance Web com ASP.NET MVCPerformance Web com ASP.NET MVC
Performance Web com ASP.NET MVC
 
Precisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicaçõesPrecisamos de um barco maior introdução ao dimensionamento de aplicações
Precisamos de um barco maior introdução ao dimensionamento de aplicações
 
Fisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila DiasFisl10 MySql na Globo.com por Camila Dias
Fisl10 MySql na Globo.com por Camila Dias
 

Destaque

中興招生03
中興招生03中興招生03
中興招生03
rtn10ha13n
 
井巷工程 第一章 岩石性质极其工程分级
井巷工程 第一章 岩石性质极其工程分级井巷工程 第一章 岩石性质极其工程分级
井巷工程 第一章 岩石性质极其工程分级
zhao heh
 
Open Calc: Diagrama de barres
Open Calc: Diagrama de barresOpen Calc: Diagrama de barres
Open Calc: Diagrama de barres
angy09
 
зөвлөгөө
зөвлөгөөзөвлөгөө
зөвлөгөө
mhishgee22
 
κειμενο απο συνεταιριστικο εγχειρίδιο
κειμενο απο συνεταιριστικο εγχειρίδιοκειμενο απο συνεταιριστικο εγχειρίδιο
κειμενο απο συνεταιριστικο εγχειρίδιο
kosalive
 
Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,
Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,
Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,
Wisata Jawa
 
ประวัติส่วนตัว
ประวัติส่วนตัวประวัติส่วนตัว
ประวัติส่วนตัว
OomAmm Oom
 
цахим хичээл
цахим хичээлцахим хичээл
цахим хичээл
tseegiid22
 

Destaque (20)

中興招生03
中興招生03中興招生03
中興招生03
 
井巷工程 第一章 岩石性质极其工程分级
井巷工程 第一章 岩石性质极其工程分级井巷工程 第一章 岩石性质极其工程分级
井巷工程 第一章 岩石性质极其工程分级
 
Lup gbg harlanda
Lup gbg harlandaLup gbg harlanda
Lup gbg harlanda
 
Open Calc: Diagrama de barres
Open Calc: Diagrama de barresOpen Calc: Diagrama de barres
Open Calc: Diagrama de barres
 
10 oef potentiaal reeks 2
10 oef potentiaal reeks 210 oef potentiaal reeks 2
10 oef potentiaal reeks 2
 
22 kernfysica1
22 kernfysica122 kernfysica1
22 kernfysica1
 
ппп3 курсова
ппп3 курсоваппп3 курсова
ппп3 курсова
 
Powerpointgrupo8
Powerpointgrupo8Powerpointgrupo8
Powerpointgrupo8
 
зөвлөгөө
зөвлөгөөзөвлөгөө
зөвлөгөө
 
κειμενο απο συνεταιριστικο εγχειρίδιο
κειμενο απο συνεταιριστικο εγχειρίδιοκειμενο απο συνεταιριστικο εγχειρίδιο
κειμενο απο συνεταιριστικο εγχειρίδιο
 
Detecteren en tracken van bacteriële cellen in time lapse
Detecteren en tracken van bacteriële cellen in time lapseDetecteren en tracken van bacteriële cellen in time lapse
Detecteren en tracken van bacteriële cellen in time lapse
 
Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,
Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,
Sewa mobil di bali, sewa mobil murah di bali, sewa mobil avanza di bali,
 
Yacht Onderzoek "Op weg naar wendbaarheid" Thema: Talent
Yacht Onderzoek "Op weg naar wendbaarheid" Thema: TalentYacht Onderzoek "Op weg naar wendbaarheid" Thema: Talent
Yacht Onderzoek "Op weg naar wendbaarheid" Thema: Talent
 
ประวัติส่วนตัว
ประวัติส่วนตัวประวัติส่วนตัว
ประวัติส่วนตัว
 
цахим хичээл
цахим хичээлцахим хичээл
цахим хичээл
 
Trabajo de geología2 corregido
Trabajo de geología2 corregidoTrabajo de geología2 corregido
Trabajo de geología2 corregido
 
Guida al computer - Lezione 4 - I lettori parte 2
Guida al computer - Lezione 4 - I lettori parte 2Guida al computer - Lezione 4 - I lettori parte 2
Guida al computer - Lezione 4 - I lettori parte 2
 
krut lup kulturell Gbg Örgryte
krut lup kulturell Gbg Örgrytekrut lup kulturell Gbg Örgryte
krut lup kulturell Gbg Örgryte
 
Graphic
GraphicGraphic
Graphic
 
Recife gp11-fundamentos-recicla vida
Recife gp11-fundamentos-recicla vidaRecife gp11-fundamentos-recicla vida
Recife gp11-fundamentos-recicla vida
 

Semelhante a Qcon 2013 - Walmart Frontend Solution using Node.js

Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
elliando dias
 
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
Cleber Dantas
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
Thiago Rondon
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
taniamaciel
 
MySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundoMySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundo
MySQL Brasil
 

Semelhante a Qcon 2013 - Walmart Frontend Solution using Node.js (20)

Técnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escalaTécnicas e recursos para desenvolvimento Web em cenários de grande escala
Técnicas e recursos para desenvolvimento Web em cenários de grande escala
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
MSTechday - Técnicas e recursos para desenvolvimento web em cenários de grand...
 
Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)Infraestrutura em nuvem com Amazon Web Services (AWS)
Infraestrutura em nuvem com Amazon Web Services (AWS)
 
Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVM
 
MySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Cluster - visão geral
MySQL Cluster - visão geral
 
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWSConhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
Conhecendo as Opcoes de Bancos de Dados na Nuvem da AWS
 
Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.Cache, Concorrência e Sincronização.
Cache, Concorrência e Sincronização.
 
Arquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXIArquiteturas de Software para o Século XXI
Arquiteturas de Software para o Século XXI
 
MySQL Cluster - visão geral
MySQL Cluster - visão geralMySQL Cluster - visão geral
MySQL Cluster - visão geral
 
Replicacao Object Sistemas
Replicacao Object SistemasReplicacao Object Sistemas
Replicacao Object Sistemas
 
XPT Framework
XPT FrameworkXPT Framework
XPT Framework
 
Conhecendo o Ruby on Rails
Conhecendo o Ruby on RailsConhecendo o Ruby on Rails
Conhecendo o Ruby on Rails
 
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on AzureTDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
TDC2018SP | Trilha Arq .Net - Serverless Reactive Programming on Azure
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
Performance Tuning de Clusters Plone - PyConBrasil 2 (2006)
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7Dicas para Turbinar o servidor de Aplicações JBoss 7
Dicas para Turbinar o servidor de Aplicações JBoss 7
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
MySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundoMySQL - o banco de dados open source mais popular do mundo
MySQL - o banco de dados open source mais popular do mundo
 

Qcon 2013 - Walmart Frontend Solution using Node.js