SlideShare uma empresa Scribd logo
1 de 30
Matando WebForms e
modernizando um Grande
Varejista
Como é possível modernizarmos o velho, mantermos compatibilidades e garantirmos o negócio?
Apresentação
Palestrante: José Roberto Araújo
Palestrante | Arquiteto de Sistemas
Onde me encontrar? Email: jroberto.araujo@gmail.com e também...
Grupos:
@CrazyTechGuys
@IoTWeekend
@AspNet BR
Redes Sociais:
@Slideshare { /jroberto.jr }
@Facebook { /joserobertoaraujo }
@Twitter { @jrobertofaraujo }
@Linkedin { /joserobertoaraujo }
@Blog { http://www.jrobertoaraujo.net }
Um pouco da história
O Grande Desafio...
 Inovar o ecommerce, mantendo
conversão de clientes e vendas
 Aumentar performance, sem aumentar o
consume de vCPUs, Memória e I/O de
disco e Rede
 Reutilizar o checkout? Usaram Api, Não?
Não!!! Aumento da curva de aprendizado
do time !!! 
 Backoffice, onde fica nisso tudo?
 Inovar aplicando os conceitos web de
SEO, WPO (Web Presentation Optimized)
Estratégia da Convivência
Como estava o cenário?
 Cenário caótico e com várias definições
de negócio divergentes
 Aplicação com várias falhas de
desenvolvimento e lógica
 Descrédito sobre a utilização do REDIS.
Porquê? Qual foi a outra solução?
 Não havia servidores de Testes
integrados e Staging (Pré-Produção)
 Tudo baseado no AspNet Cache, serviço
windows, entreypoint único para
atualização do cache, tudo num único
Application Pool
 NGINX desatualizado e mal configurado
Sem Rumo = CAOS
Ações planejadas
 TDD + MTM
 DDD ? Sim, para alguns casos!
 Entityframework? Sim, usamos !
 Implementação de técnicas de WPO
 Implementação de carregamento assincrono dos Assets: Javascript e
CSS
 Implementação de recomendações de SEO
 Continuar com AspNet Cache? Porquê? Quais ganhos? Quais
perdas?
 Grande inclinação para utilizar o REDIS
 Servidores de Testes e Staging
 Teste de Carga
 Atualização do Nginx e Revisão de suas configurações
 Refatoração e adequação do Backoffice
Colocando cada coisa em seu lugar…
Migrar 100% não seria o caminho?
 Esse seria o caminho…
 Não daria para entregar o
projeto completo, em tempo
hábil. (4 meses)
Morte do Projeto e Desgaste dos Desenvolvedores
WPO – Web Performance Optimization
WPO – Web Performance Optimization
O que aconteceu ao subir as novidades da
Nova Plataforma?
 ROLLBACK por 3X
 Porquê?
 Consumo altíssimo das vCPUs
 Consumo altíssimo de Memória
 Alto indice de I/O nos Web Servers
 Mas onde estavam os problemas? Ação HARD...
 E…
 Só tinhamos mais uma chance, final de
Setembro/2015! E fizemos um novo Deploy
Nem tudo são flores…
 Lock de objetos implementados inadequadamente
 Implementação LINQ utilizando vários .Includes
 Stored Procedures mal implementadas Lockando registros
 Paralelismo utilizado inadequadamente
 Problemas de performance na aplicação REDIS, pagando o
preço por estrégias inadequadas
 Tivemos que abrir mão dos testes de unidade já iniciados
(Diante de alguns rollbacks, não tinhamos tempo para
“desperdiçar” com TDD – Doce ilusão)
 Retorno do filho pródigo: AspNet Cache !!!
O que houve com o Redis?
 Armazenamento mal planejado
 Estratégia das chaves-valor sem lógica e fora
dos padrões recomendados
 Throughput muito alto de rede (Tráfego de
um grande volume de objetos em
requisições simples)
 Mas o REDIS não resolve cenários de alta
performance?
 Retorna, assim, o AspNet Cache!!!
Vejo sinais de Code Smell
1º Arquitetura utilizada na plataforma
Como ficou ao de subir as novas
implementações da Nova Plataforma?
Overload de CPU?
 107% em algumas CPUs
 O que levou a esse cenário?
 Utilização de recursos de programação de forma inadequada
 Paralelismo em consultas LINQ
 Lock em blocos de código, segurando outras requests a executarem o código
 Pagamento da dívida de ter removido os Testes de Unidade
 Várias requests e consultas sendo executadas pela aplicação, para a mesma informação
 Iterações em 10k+ registros aplicando operações com strings com Regex
O que tivemos que analisar?
 Dump de memória de Produção e Homologação
 Aplicação de filtros e indicadores para análise de performance através do PerfMon
 Aplicação do Dump de memória ao Debug Diagnostic Tools
O que tivemos que analisar?
O que tivemos que analisar?
Onde está Wally? Ou melhor Code Smell?
O bom filho a casa torna: REDIS !!!
Estratégias utilizadas
 Análise do fluxo do negócio
 Análise sobre a utilização das informações e grau de mudança das informações no site
 Levantamento sobre qual navegabilidade o usuário esperava do portal
 Chaveamento das informações por departamento, dentro do portal
 Aplicação do conceito Get-Fetch (Buscar e Carregar)
 Aplicação de filtros de dados dentro nas estruturas de dados no Redis
 Implementação dos servidores do Redis no mesmo barramento de Rede dos WebServers
2º Arquitetura utilizada na plataforma
Blackfriday após a subida das melhorias
Como ficou o Load time comparado aos
concorrentes ?
Processamento Backoffice
Dashboard de acompanhamento do
processamento do Backoffice
Talk is Cheap…
Conclusão
1. Realize SEMPRE uma Análise sobre as expectativas do seu cliente.
 Frustra-las será seu pior fracasso.
2. Busque SEMPRE inovar, com MODERAÇÃO.
 NÃO utilize tudo de novo que o Mercado oferece, nem tudo se encaixa com suas necessidades.
3. Entenda o perfil do seu time.
 Você será o principal fator para seu time performar
4. Mesmo tomando todos os cuidados, tenha ferramentas, estratégias e conhecimento para sanar os problemas.
 Caso contrário, um pequeno ponto no código poderá levar seu projeto ao fracasso.
5. Fique sempre antenado no Mercado e busque aplicar as melhores práticas.
 Elas normalmente te encaminharam para o sucesso do seu projeto, motivação do seu time e garantia de um cenário mais
controlado.
6. Trabalhem bem sua arquitetura, NUNCA a Negligencie.
 O preço dela é ALTÍSSIMO, a conta chega e o pagamento, as na maioria das vezes não é tão trivial. Gerando cenários
nocivos ao seu negócio.
Dúvidas / Perguntas
Obrigado !!!

Mais conteúdo relacionado

Mais procurados

Além do MVP com PHP - TDC POA 2015
Além do MVP com PHP  - TDC POA 2015Além do MVP com PHP  - TDC POA 2015
Além do MVP com PHP - TDC POA 2015Romeu Mattos
 
Restrospectiva Bluesoft 2008
Restrospectiva Bluesoft 2008Restrospectiva Bluesoft 2008
Restrospectiva Bluesoft 2008Luiz Faias Junior
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]Rael Max
 
Programção PHP
Programção PHPProgramção PHP
Programção PHPceap
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...minastestingconference
 
Programação Eficaz - Agile Trends Floripa 2016
Programação Eficaz -  Agile Trends Floripa 2016Programação Eficaz -  Agile Trends Floripa 2016
Programação Eficaz - Agile Trends Floripa 2016Taller Negócio Digitais
 
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSAgile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSStefan Teixeira
 
Optimus - Apresentação
Optimus - ApresentaçãoOptimus - Apresentação
Optimus - ApresentaçãoRafael Martins
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxDell Technologies
 
Gerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackGerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackAécio Pires
 
TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...
TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...
TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...tdc-globalcode
 
Ferramentas de Apoio para Developers .NET e SQL Server
Ferramentas de Apoio para Developers .NET e SQL ServerFerramentas de Apoio para Developers .NET e SQL Server
Ferramentas de Apoio para Developers .NET e SQL ServerComunidade NetPonto
 
DevOps - Estado da Arte
DevOps - Estado da ArteDevOps - Estado da Arte
DevOps - Estado da Arteilegra
 
Além do MVP com PHP - TDC Floripa 2016
Além do MVP com PHP - TDC Floripa 2016Além do MVP com PHP - TDC Floripa 2016
Além do MVP com PHP - TDC Floripa 2016Romeu Mattos
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funcionaRodrigo Serradura
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014Rodrigo Campos
 

Mais procurados (20)

Além do MVP com PHP - TDC POA 2015
Além do MVP com PHP  - TDC POA 2015Além do MVP com PHP  - TDC POA 2015
Além do MVP com PHP - TDC POA 2015
 
Restrospectiva Bluesoft 2008
Restrospectiva Bluesoft 2008Restrospectiva Bluesoft 2008
Restrospectiva Bluesoft 2008
 
Técnicas de frontend para aplicações django - PythonBrasil[9]
Técnicas de frontend para aplicações django  - PythonBrasil[9]Técnicas de frontend para aplicações django  - PythonBrasil[9]
Técnicas de frontend para aplicações django - PythonBrasil[9]
 
Programção PHP
Programção PHPProgramção PHP
Programção PHP
 
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
Performance web - Como deixar a sua aplicação rápida, fazendo seus usuári...
 
Programação Eficaz - Agile Trends Floripa 2016
Programação Eficaz -  Agile Trends Floripa 2016Programação Eficaz -  Agile Trends Floripa 2016
Programação Eficaz - Agile Trends Floripa 2016
 
Apresentação phiber v1.0
Apresentação phiber v1.0Apresentação phiber v1.0
Apresentação phiber v1.0
 
Onde posso ir como “dev”
Onde posso ir como “dev”Onde posso ir como “dev”
Onde posso ir como “dev”
 
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSSAgile Brazil 2014 - Visual Regression Testing com PhantomCSS
Agile Brazil 2014 - Visual Regression Testing com PhantomCSS
 
ASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco GodoiASP.NET Signal R - Glauco Godoi
ASP.NET Signal R - Glauco Godoi
 
Optimus - Apresentação
Optimus - ApresentaçãoOptimus - Apresentação
Optimus - Apresentação
 
Curso de Performance and Tuning - Linux
Curso de Performance and Tuning - LinuxCurso de Performance and Tuning - Linux
Curso de Performance and Tuning - Linux
 
Gerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStackGerenciando o Zabbix com o SaltStack
Gerenciando o Zabbix com o SaltStack
 
TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...
TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...
TDC2018FLN | Trilha Ruby - Como turbinamos nossa sua suite de testes Rails em...
 
Ferramentas de Apoio para Developers .NET e SQL Server
Ferramentas de Apoio para Developers .NET e SQL ServerFerramentas de Apoio para Developers .NET e SQL Server
Ferramentas de Apoio para Developers .NET e SQL Server
 
DevOps - Estado da Arte
DevOps - Estado da ArteDevOps - Estado da Arte
DevOps - Estado da Arte
 
Além do MVP com PHP - TDC Floripa 2016
Além do MVP com PHP - TDC Floripa 2016Além do MVP com PHP - TDC Floripa 2016
Além do MVP com PHP - TDC Floripa 2016
 
Programação funcional que funciona
Programação funcional que funcionaProgramação funcional que funciona
Programação funcional que funciona
 
Aprendendo a Aprender
Aprendendo a AprenderAprendendo a Aprender
Aprendendo a Aprender
 
DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014DevOps no mundo real - QCON 2014
DevOps no mundo real - QCON 2014
 

Destaque

Web moderna além do Frontend com AngularJS
Web moderna além do Frontend com AngularJSWeb moderna além do Frontend com AngularJS
Web moderna além do Frontend com AngularJSJosé Roberto Araújo
 
Arquitetura agnóstica aplicada asp net6 + nodejs e redis
Arquitetura agnóstica aplicada   asp net6 + nodejs e redisArquitetura agnóstica aplicada   asp net6 + nodejs e redis
Arquitetura agnóstica aplicada asp net6 + nodejs e redisJosé Roberto Araújo
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceJosé Roberto Araújo
 
Asp net identity - De dentro das trincheiras
Asp net identity - De dentro das trincheirasAsp net identity - De dentro das trincheiras
Asp net identity - De dentro das trincheirasJosé Roberto Araújo
 
DDD na prática :: Implementação tática – Entidades vs Objeto de Valor
DDD na prática :: Implementação tática – Entidades vs Objeto de ValorDDD na prática :: Implementação tática – Entidades vs Objeto de Valor
DDD na prática :: Implementação tática – Entidades vs Objeto de ValorJosé Roberto Araújo
 
Serverles com Azure Functions & DocumentDB
Serverles com Azure Functions & DocumentDBServerles com Azure Functions & DocumentDB
Serverles com Azure Functions & DocumentDBJosé Roberto Araújo
 

Destaque (6)

Web moderna além do Frontend com AngularJS
Web moderna além do Frontend com AngularJSWeb moderna além do Frontend com AngularJS
Web moderna além do Frontend com AngularJS
 
Arquitetura agnóstica aplicada asp net6 + nodejs e redis
Arquitetura agnóstica aplicada   asp net6 + nodejs e redisArquitetura agnóstica aplicada   asp net6 + nodejs e redis
Arquitetura agnóstica aplicada asp net6 + nodejs e redis
 
AspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performanceAspNet 5 & Redis - Escalando sua performance
AspNet 5 & Redis - Escalando sua performance
 
Asp net identity - De dentro das trincheiras
Asp net identity - De dentro das trincheirasAsp net identity - De dentro das trincheiras
Asp net identity - De dentro das trincheiras
 
DDD na prática :: Implementação tática – Entidades vs Objeto de Valor
DDD na prática :: Implementação tática – Entidades vs Objeto de ValorDDD na prática :: Implementação tática – Entidades vs Objeto de Valor
DDD na prática :: Implementação tática – Entidades vs Objeto de Valor
 
Serverles com Azure Functions & DocumentDB
Serverles com Azure Functions & DocumentDBServerles com Azure Functions & DocumentDB
Serverles com Azure Functions & DocumentDB
 

Semelhante a Modernizando um grande varejista com WebForms

Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformAndré Paulovich
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnicaSilvio Dias
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnicaSilvio Dias
 
Big Data, Performance, Posix, RTB no mercado de publicidade online
Big Data, Performance, Posix, RTB no mercado de publicidade onlineBig Data, Performance, Posix, RTB no mercado de publicidade online
Big Data, Performance, Posix, RTB no mercado de publicidade onlineTiago Peczenyj
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioRalph Rassweiler
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsJosé Alexandre Macedo
 
Building Scalable Applications
Building Scalable ApplicationsBuilding Scalable Applications
Building Scalable Applicationsracx
 
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 Azuretdc-globalcode
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloIsmael
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoComunidade NetPonto
 
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
De zero a cem em cloud computing  transformando idéias em aplicações em pouco...De zero a cem em cloud computing  transformando idéias em aplicações em pouco...
De zero a cem em cloud computing transformando idéias em aplicações em pouco...Ricardo Martinelli de Oliveira
 
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...tdc-globalcode
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Cristiano Schwening
 
NoSQL: Uma análise crítica
NoSQL: Uma análise críticaNoSQL: Uma análise crítica
NoSQL: Uma análise críticapichiliani
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...iMasters
 

Semelhante a Modernizando um grande varejista com WebForms (20)

Pangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud PlatformPangea - Plataforma digital com Google Cloud Platform
Pangea - Plataforma digital com Google Cloud Platform
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnica
 
Big Data, Performance, Posix, RTB no mercado de publicidade online
Big Data, Performance, Posix, RTB no mercado de publicidade onlineBig Data, Performance, Posix, RTB no mercado de publicidade online
Big Data, Performance, Posix, RTB no mercado de publicidade online
 
Arquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócioArquitetura web para sistemas de negócio
Arquitetura web para sistemas de negócio
 
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOpsQuebrando barreiras entre desenvolvimento e operação de software com DevOps
Quebrando barreiras entre desenvolvimento e operação de software com DevOps
 
Building Scalable Applications
Building Scalable ApplicationsBuilding Scalable Applications
Building Scalable Applications
 
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
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
O que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São PauloO que vi na QCon 2012 São Paulo
O que vi na QCon 2012 São Paulo
 
ASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis PaulinoASP.Net Performance – A pragmatic approach - Luis Paulino
ASP.Net Performance – A pragmatic approach - Luis Paulino
 
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
De zero a cem em cloud computing  transformando idéias em aplicações em pouco...De zero a cem em cloud computing  transformando idéias em aplicações em pouco...
De zero a cem em cloud computing transformando idéias em aplicações em pouco...
 
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
TDC2016SP - Versionando sua infraestrutura: Como e porque fazer, baseado em c...
 
Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?Muita gestão e pouca engenharia, por onde anda o XP?
Muita gestão e pouca engenharia, por onde anda o XP?
 
JEE nas nuvens: uma introdução ao openshift
JEE nas nuvens:  uma introdução ao openshiftJEE nas nuvens:  uma introdução ao openshift
JEE nas nuvens: uma introdução ao openshift
 
NoSQL: Uma análise crítica
NoSQL: Uma análise críticaNoSQL: Uma análise crítica
NoSQL: Uma análise crítica
 
Webinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros ÁgeisWebinar DevOps - Encontros Ágeis
Webinar DevOps - Encontros Ágeis
 
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de SoftwareDextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
Dextra Sistemas: A linguagem PHP no modelo de Fábrica de Software
 
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
[JS EXPERIENCE 2018] Do jQuery aos microfrontends: os desafios de manter uma ...
 

Modernizando um grande varejista com WebForms

  • 1. Matando WebForms e modernizando um Grande Varejista Como é possível modernizarmos o velho, mantermos compatibilidades e garantirmos o negócio?
  • 2. Apresentação Palestrante: José Roberto Araújo Palestrante | Arquiteto de Sistemas Onde me encontrar? Email: jroberto.araujo@gmail.com e também... Grupos: @CrazyTechGuys @IoTWeekend @AspNet BR Redes Sociais: @Slideshare { /jroberto.jr } @Facebook { /joserobertoaraujo } @Twitter { @jrobertofaraujo } @Linkedin { /joserobertoaraujo } @Blog { http://www.jrobertoaraujo.net }
  • 3. Um pouco da história
  • 4. O Grande Desafio...  Inovar o ecommerce, mantendo conversão de clientes e vendas  Aumentar performance, sem aumentar o consume de vCPUs, Memória e I/O de disco e Rede  Reutilizar o checkout? Usaram Api, Não? Não!!! Aumento da curva de aprendizado do time !!!   Backoffice, onde fica nisso tudo?  Inovar aplicando os conceitos web de SEO, WPO (Web Presentation Optimized) Estratégia da Convivência
  • 5. Como estava o cenário?  Cenário caótico e com várias definições de negócio divergentes  Aplicação com várias falhas de desenvolvimento e lógica  Descrédito sobre a utilização do REDIS. Porquê? Qual foi a outra solução?  Não havia servidores de Testes integrados e Staging (Pré-Produção)  Tudo baseado no AspNet Cache, serviço windows, entreypoint único para atualização do cache, tudo num único Application Pool  NGINX desatualizado e mal configurado Sem Rumo = CAOS
  • 6. Ações planejadas  TDD + MTM  DDD ? Sim, para alguns casos!  Entityframework? Sim, usamos !  Implementação de técnicas de WPO  Implementação de carregamento assincrono dos Assets: Javascript e CSS  Implementação de recomendações de SEO  Continuar com AspNet Cache? Porquê? Quais ganhos? Quais perdas?  Grande inclinação para utilizar o REDIS  Servidores de Testes e Staging  Teste de Carga  Atualização do Nginx e Revisão de suas configurações  Refatoração e adequação do Backoffice Colocando cada coisa em seu lugar…
  • 7. Migrar 100% não seria o caminho?  Esse seria o caminho…  Não daria para entregar o projeto completo, em tempo hábil. (4 meses) Morte do Projeto e Desgaste dos Desenvolvedores
  • 8. WPO – Web Performance Optimization
  • 9. WPO – Web Performance Optimization
  • 10. O que aconteceu ao subir as novidades da Nova Plataforma?  ROLLBACK por 3X  Porquê?  Consumo altíssimo das vCPUs  Consumo altíssimo de Memória  Alto indice de I/O nos Web Servers  Mas onde estavam os problemas? Ação HARD...  E…  Só tinhamos mais uma chance, final de Setembro/2015! E fizemos um novo Deploy
  • 11. Nem tudo são flores…  Lock de objetos implementados inadequadamente  Implementação LINQ utilizando vários .Includes  Stored Procedures mal implementadas Lockando registros  Paralelismo utilizado inadequadamente  Problemas de performance na aplicação REDIS, pagando o preço por estrégias inadequadas  Tivemos que abrir mão dos testes de unidade já iniciados (Diante de alguns rollbacks, não tinhamos tempo para “desperdiçar” com TDD – Doce ilusão)  Retorno do filho pródigo: AspNet Cache !!!
  • 12. O que houve com o Redis?  Armazenamento mal planejado  Estratégia das chaves-valor sem lógica e fora dos padrões recomendados  Throughput muito alto de rede (Tráfego de um grande volume de objetos em requisições simples)  Mas o REDIS não resolve cenários de alta performance?  Retorna, assim, o AspNet Cache!!! Vejo sinais de Code Smell
  • 13. 1º Arquitetura utilizada na plataforma
  • 14. Como ficou ao de subir as novas implementações da Nova Plataforma?
  • 15. Overload de CPU?  107% em algumas CPUs  O que levou a esse cenário?  Utilização de recursos de programação de forma inadequada  Paralelismo em consultas LINQ  Lock em blocos de código, segurando outras requests a executarem o código  Pagamento da dívida de ter removido os Testes de Unidade  Várias requests e consultas sendo executadas pela aplicação, para a mesma informação  Iterações em 10k+ registros aplicando operações com strings com Regex
  • 16. O que tivemos que analisar?  Dump de memória de Produção e Homologação  Aplicação de filtros e indicadores para análise de performance através do PerfMon  Aplicação do Dump de memória ao Debug Diagnostic Tools
  • 17. O que tivemos que analisar?
  • 18. O que tivemos que analisar?
  • 19. Onde está Wally? Ou melhor Code Smell?
  • 20. O bom filho a casa torna: REDIS !!!
  • 21. Estratégias utilizadas  Análise do fluxo do negócio  Análise sobre a utilização das informações e grau de mudança das informações no site  Levantamento sobre qual navegabilidade o usuário esperava do portal  Chaveamento das informações por departamento, dentro do portal  Aplicação do conceito Get-Fetch (Buscar e Carregar)  Aplicação de filtros de dados dentro nas estruturas de dados no Redis  Implementação dos servidores do Redis no mesmo barramento de Rede dos WebServers
  • 22. 2º Arquitetura utilizada na plataforma
  • 23. Blackfriday após a subida das melhorias
  • 24. Como ficou o Load time comparado aos concorrentes ?
  • 26. Dashboard de acompanhamento do processamento do Backoffice
  • 28. Conclusão 1. Realize SEMPRE uma Análise sobre as expectativas do seu cliente.  Frustra-las será seu pior fracasso. 2. Busque SEMPRE inovar, com MODERAÇÃO.  NÃO utilize tudo de novo que o Mercado oferece, nem tudo se encaixa com suas necessidades. 3. Entenda o perfil do seu time.  Você será o principal fator para seu time performar 4. Mesmo tomando todos os cuidados, tenha ferramentas, estratégias e conhecimento para sanar os problemas.  Caso contrário, um pequeno ponto no código poderá levar seu projeto ao fracasso. 5. Fique sempre antenado no Mercado e busque aplicar as melhores práticas.  Elas normalmente te encaminharam para o sucesso do seu projeto, motivação do seu time e garantia de um cenário mais controlado. 6. Trabalhem bem sua arquitetura, NUNCA a Negligencie.  O preço dela é ALTÍSSIMO, a conta chega e o pagamento, as na maioria das vezes não é tão trivial. Gerando cenários nocivos ao seu negócio.

Notas do Editor

  1. Um site com mais de 10 anos, usando AspNet 2.0 WebForms JS sendo servido e montado no lado servidor CSS fora dos novos padrões web Baixa responsividade no site principal Todo o Sistema dependia de Stored Procedure (Baixa escalabilidade)
  2. Migrar o front-end do ecommerce, mantendo conversão de clientes e vendas Melhorar a performance do site anterior sem consumir muitos recursos de servidor Integrar com o checkout legado? Podemos colocar API? Depende, a curva de aprendizado seria grande para o time que tinhamos!!! Backoffice como fica nesse emaranhado de código legado? Como inovar a arquitetura da aplicação sem "engessar" o negócio que está em operação há mais de 15 anos? (WPO, SEO, Cache e outros ingredientes)
  3. - Turnover muito alto no time - Pouco tempo para grandes melhorias - Cenário CAÓTICO com grandes divergências de definições - Equipe desmotivada após 3 rollbacks - Descrença sobre o funcionamento do Redis - Porque descrença? E o que apontaram como solução? - Sem Test Stage - Tudo baseado em AspNet Cache, um serviço windows para atualizar os caches, um entrypoint em cada web server para atualizar o cache do Application Pool - NGINX mal configurado
  4. TDD, Utilização de ferramentas para mapear e aplicar roteiros de teste DDD ??? Entityframework? Sim, Usamos! Utilização técnicas de WPO Implementação de recomendações para aplicação do SEO Continuar com AspNet Cache? Porque? Quais ganhos? Quais Perdas? Adquirir servidores para Test Stages Criação de ambientes pre-produção Medições e métricas aplicadas através do Newrelic Teste de Carga Revisão sobre as configurações do NGINX (Log storage in separated partition, Cache Lock (Serve stale), Cache Purge, Assets rentantion timeout, Reverse Proxy) Refatoração e adequação do Backoffice (Agendamento, Monitoramento, Log de erros melhorados, Separação dos serviços, SEQ + Quartz)
  5. Consumo absurdo das vCPUs e Memória (claro tudo estava com base no AspNet Cache) Dentre outros problemas que tiveram que ser analisado em modo HARD (Deep Diagnostic)
  6. Paralelismos sendo usado de forma inadequada Problemas de performance nos primeiros testes de carga (Redis mal dimensionado e com várias falhas de estratégia de chave e armazenamento) O que tivemos que abdicar no meio das implementações de correção e melhoria? Testes de unidade , sim mais uma vez o argumento de que o tempo era curto e precisavamos entregar a nova plataforma antes da blackfriday (High Level Pressure) Retorno do AspNet Cache (Bad signal…) Sim, usamos tudo isso em uma estrutura da Locaweb
  7. Mal planejamento da estratégia de armazenamento Estratégia de chaves completamente fora de lógica e padronização recomendada pela Redis Alto throughput de rede (volume de dados altíssimo trafegando na rede) Mas espera um pouco: O Redis não é para ambientes de alta performance? Sim, mas se não for bem dimensionados os dados, quem paga é o meio físico - Rede!!! E volta o cão arependido… AspNet Cache
  8. Consumo absurdo das vCPUs e Memória (claro tudo estava com base no AspNet Cache) Dentre outros problemas que tiveram que ser analisado em modo HARD (Deep Diagnostic)
  9. Consumo absurdo das vCPUs e Memória (claro tudo estava com base no AspNet Cache) Dentre outros problemas que tiveram que ser analisado em modo HARD (Deep Diagnostic)
  10. - Não tem como comprovar em gráfico, mas pode-se mostrar o trecho de código que ocasionou tudo isso - Apresentar que nem tudo que há de mais modern em código, tecnologia pode ser aplicado sem ter a noção do quão nocivo pode ser para uma aplicação com acessos simultaneos
  11. - Dump de memória do servidor de homologação + Debug Diagnostic Tools - PerfMon e algumas métricas - Para maiores detalhes, meu post no meu blog: http://www.jrobertoaraujo.net/2015/11/16/como-otimizar-a-performance-das-vcpus-de-um-e-commerce/ - Várias chamadas de métodos equivocadamente - Aplicação de Regex em loops que recebiam várias chamadas simultaneas - Parceiros bombardeando a aplicação
  12. - Dump de memória do servidor de homologação + Debug Diagnostic Tools - PerfMon e algumas métricas - Para maiores detalhes, meu post no meu blog: http://www.jrobertoaraujo.net/2015/11/16/como-otimizar-a-performance-das-vcpus-de-um-e-commerce/ - Várias chamadas de métodos equivocadamente - Aplicação de Regex em loops que recebiam várias chamadas simultaneas - Parceiros bombardeando a aplicação
  13. - Dump de memória do servidor de homologação + Debug Diagnostic Tools - PerfMon e algumas métricas - Para maiores detalhes, meu post no meu blog: http://www.jrobertoaraujo.net/2015/11/16/como-otimizar-a-performance-das-vcpus-de-um-e-commerce/ - Várias chamadas de métodos equivocadamente - Aplicação de Regex em loops que recebiam várias chamadas simultaneas - Parceiros bombardeando a aplicação