Evoluindo uma Arquitetura Legada:
Ferramentas e Processos
Caesar Ralf Franz Hoppen
@bearded_nerd
<caesar.ralf@elo7.com>
Guilherme Nogueira
@nirev
<guilherme.nogueira@elo7.com>
Sobre Nós
Membros do Greyjoy:
time de busca da Elo7
time de busca da Elo7
Guilherme Nogueira
Desenvolvedor há 6 anos
Sobrevivente do ES
Desenvolvedor há 6 anos
Sobrevivente do ES
Caesar Ralf Franz Hoppen
Desenvolvedor há 8 anos
Gaúcho
A Elo7
Uma plataforma de compra e venda de produtos fora-de-série!
A Elo7
Antes
- Empresa fundada em 2008 por um desenvolvedor e sua esposa
- Foco na comunidade de artesãos
Hoje
- ~60 funcionários, sendo 23 desenvolvedores
- Conceito expandido: produtos fora-de-série
- Cerca de 4 milhões de visitantes únicos ao mês
- Mais de 140 mil vendedores cadastrados
- Mais de 2.5 milhões de produtos cadastrados
A Elo7:
Desenvolvimento
Contexto:
O nosso legado
- Código feito inicialmente em 2008
- Struts 1.3
- Um único desenvolvedor
- Um único servidor dedicado
- Quase nenhum teste
- Código em produção
- Nível de acesso considerável
Contexto:
O que temos hoje
- Aporte de fundos de investimento
- Empresa saiu das mãos do desenvolvedor original
85% dos devs estão na empresa há menos de 1 ano
Contexto:
O que temos hoje
- Aporte de fundos de investimento
- Empresa saiu das mãos do desenvolvedor original
- 85% dos devs estão na empresa há menos de 1 ano
- A plataforma é a principal fonte de renda de vários vendedores
- Grande parte do código foi refatorada
- Migração de framework de Struts para VRaptor
- Injeção de dependências com CDI
- Infraestrutura no AWS
- ~3 deploys por dia
- Uptime 99.75%
ORIGINALMENTE...
-
Deploy complicado (totalmente manual)
-
Um único servidor
-
Todas Features em um local só
-
Sem testes
-
Não escalável
-
Regras de negócio obscuras
O QUE TEMOS HOJE?
-
Deploy contínuo.
-
Arquitetura distribuída.
-
Microserviços
-
Código com boa cobertura
-
Escalável
- Regras de negócio documentadas e encapsuladas
ARQUITETURA
Em 2008...
- Site recém começando
- Todas funcionalidades em um só lugar
Um monólito...
Estrutura geológica composta de uma única pedra
-
EMAIL
-
BILLING
-
BUSCA
-
PROCESSAMENTO DE IMAGENS
-
CORREIOS
-
FEED PARA CRITEO/GOOGLE
-
etc...
Problemas
- Muitas Responsabilidades.
- Qualquer mudança pequena = Deploy Sistema Inteiro.
- Escalonamento Unicamente Vertical.
- Exige Máquinas grandes .
PROBLEMA EM UM DOS SISTEMAS
=
PROBLEMA EM TODOS OS SISTEMAS
o que devemos fazer?
Quebrar O MONÓLITO!
SISTEMAS MENORES E MAIS INDEPENDENTES
-
DEPLOYS INDEPENDENTES
-
MÁQUINAS SEPARADAS
-
ESCALAR HORIZONTALMENTE
-
1 SISTEMA CAIR -> RESTO DO SITE CONTINUA UP
QUALIDADE DE CÓDIGO
-
COMO GARANTIR QUE O CÓDIGO NOVO MELHORA A QUALIDADE DO SISTEMA?
-
COMO SABER QUE UMA MUDANÇA EM UMA FUNCIONALIDADE NÃO VAI QUEBRAR OUTRA?
Testes
TESTES DE UNIDADE
TESTES DE ACEITAÇÃO
TESTES DE CARACTERIZAÇÃO
Testes de caracterização
Maneira de caracterizar o comportamento
atual
de um código, evitando mudanças inesperadas.
REVISÃO DE CÓDIGO
PULL REQUEST
COMMENTS
DONE!
http://www.slideshare.net/joaomilho/code-reviews-34282014
ANALISANDO O CÓDIGO
Visibilidade das métricas
Evolução temporal
Integração com Jenkins
PROCESSO DE DEPLOY
NOS PRIMÓRDIOS
-
SEM VERSIONAMENTO
- DEPLOY COMPLETAMENTE MANUAL
- NÃO TINHA COMO FAZER ROLLBACK
-
SITE FORA DO AR DURANTE O DEPLOY
Git
-
Feature por Branch.
-
Rollback Facilitado.
-
Versionamento através de tags.
E AS DEPENDÊNCIAS DO PROJETO?
Maven
-
Versionamento das dependências
-
Primeiro passo do processo do deploy
-
testes de unidade/integração
-
prepara release
-
build do Projeto
-
Pedaço do POM.xml
JUNTANDO TUDO
DEPLOY
MAS O SITE SAI DO AR DURANTE O DEPLOY?
E APÓS O DEPLOY?
Monitoração!
StatsD + Graphite
Ambos open-source.
Agregadores de métricas em real-time.
StatsD recebe métricas, processa e envia ao Graphite.
Graphite armazena a série temporal e
provê os gráficos em tempo real.
https://github.com/etsy/statsd/
http://graphite.readthedocs.org/
StatsD + Graphite
FLARE
SISTEMA DE ALERTAS BASEADO EM MÉTRICAS DO STATSD
Dashing
Feito em Sinatra
Diversos widgets customizáveis
Push ou Poll de dados
Pode pegar métricas de várias fontes:
Graphite, MySQL, APIs, etc...
http://shopify.github.io/dashing/
"The exceptionally handsome dashboard framework."
Dashing
Graylog / logstash
Data-analysis
Agregadores de Log
Monitoração de Excessões
Ambos rodam em cima do ElasticSearch
Alternativas open-source ao Splunk, Loggly, etc.
http://graylog2.org/
http://logstash.net/
Graylog / logstash
System Monitoring
Várias alternativas:
- Nagios
- collectd + graphite (*)
- Sensu
- Monit
- NewRelic (*)
RESUMÃO DA ALEGRIA
COMPONHA O SISTEMA DE PEQUENAS PARTES
REVISÃO DE CÓDIGO É MUITO IMPORTANTE!
NÃO SEJA REFÉM DO SEU CÓDIGO!
MONITORE SEU SISTEMA!
PERGUNTAS?
Obrigado!
Caesar Ralf Franz Hoppen
<caesar.ralf@elo.com.br>
Guilherme Nogueira
<guilherme.nogueira@elo.com.br>
Slides disponíveis em: https://slides.com/ralf-elo7/fisl-elo7-legado
Evoluindo uma Arquitetura Legada (FISL 2014)
By Guilherme M. Nogueira
Evoluindo uma Arquitetura Legada (FISL 2014)
- 1,915