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
Guilherme Nogueira
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

mais sobre maven release plugin

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