O documento descreve os desafios enfrentados por uma equipe de desenvolvimento em manter um portal imobiliário. Inicialmente o processo de deploy era lento e complexo, com resistência da equipe de infraestrutura. Posteriormente a equipe migrou para a AWS, adotou processos ágeis e deploy contínuo, melhorando a agilidade e permitindo a venda do portal.
3. @iuriandreazza
- Travel Engineering @ Fabuloso Destino
- B.el em Ciência da Computação (Unisinos)
- Engenheiro de Software/Devops
- PHP,Python,Ruby,Java
- RBS/Zap Imóveis
- Geek
- Tech Crazy
- Early Adopter
4.
5.
6. Do começo
• Background
• Deploy de 3 em 3 meses
• Features requests semanais
• 5 camadas de processos para deploy
• Go live não agile
• O que fazer?
@iuriandreazza
/iuri.andreazza
7. Estrutura que havia
• Deploy somente com script (GMud)
• Sem acesso a PRD (mesmo sem nível de usuário ou logs)
• Scripts de banco somente executados por um DB oficial
• Somente atualizações não criticas durante o dia
• Qualquer mudança de médio ou grande porte deveria ser a noite.
@iuriandreazza
/iuri.andreazza
8. O que era realmente bom?
• Apoio dos DBAs
• Apoio da Infra em questões estruturais
• A necessidade de pensar bem antes de “Go Live”
• Ambientes bem estáveis
@iuriandreazza
/iuri.andreazza
9.
10. O que era ruim?
• Dificuldade de liberar rapidamente uma versão do portal
• Resistência da equipe de infra-estrutura em aplicar patchs e
correções
• Grande dificuldade de se colocar algo rapidamente no ar.
@iuriandreazza
/iuri.andreazza
11.
12. O que enfrentávamos?
• Necessidade de ajustar o negócio de forma rápida
• Necessidade de colocar rapidamente soluções novas ou correções
imediatas
• Desenvolvimento era todo Agile, infra não era
• Falta de processo e entendimento de como liberar o software do
portal
@iuriandreazza
/iuri.andreazza
13.
14. PaaS/Cloud o que?????
• Analise:
• Ir para AWS - Amazon
• Ajustar Infra do datacenter local e tentar fazer o melhor possível
• Pesquisar e implementar um processo de deploy mais consigo e
mais rápido com a infra
• Começar a instigar soluções PaaS para a equipe, como
openstack, mesos ou openshift.
@iuriandreazza
/iuri.andreazza
15. Gestão de versão
• Entender como separar features
• Entender como quebrar em etapas entregáveis
• Criar metodologia no time e na infra-estrutura de como liberar
• Deploy-continuo consiste:
• Desenvolvimento com Testes (TDD, BDD)
• Facilidade de liberar uma versão nova sem downtime, ou com
processo preciso.
@iuriandreazza
/iuri.andreazza
17. Infra 1.5
• Ajustar com a equipe de infra-estrutura para um deploy mais rápido
• Processo de Deploy maquina-a-maquina
• Scripts de banco que sejam incrementais e nunca quebrem o
software
• Liberação de regras para atualização de arquivos estáticos
@iuriandreazza
/iuri.andreazza
18. Infra 2.0
• Mover para a Amazon-AWS
• Assumir toda a gestão da infra
• Criar estrutura de deploy continuo usando Jenkins-CI
• Adicionar e remover maquinas on-the-fly conforme a necessidade
• Monitoramento avançado para uso do portal
@iuriandreazza
/iuri.andreazza
19. Penseimoves->ZAP
• Venda do penseimoveis para o ZAP
• 40 Milhões
• Ocorreu somente por causa do movimento para o Cloud e da
capacidade da equipe
• ZAP absorveu a tecnologia e a equipe e trocou o portao
penseimoveis pelo deles.
@iuriandreazza
/iuri.andreazza
20. Recortando Imagens on-the-go
• Problema:
• Imagens do portal do antigo penseimoveis.com.br estavam
estranhas
• Debug:
• As vezes os recortes eram entregues as vezes não
• As vezes as imagens vinham parcialmente criadas
• As vezes as imagens vinham coloridas e com “filtros" errados
@iuriandreazza
/iuri.andreazza
21. Achando o problema!
• Possíveis causas iniciais:
• Tempo de resposta durante a entrega
• Cache não sendo feito de forma correta (lado server)
• Headers de cache não sendo colocados
• Rede (3g/4g/Wifi/Ethernet …)
• Recortador "baleando"
@iuriandreazza
/iuri.andreazza
22.
23. Estrutura que havia
• Recortador dividia recursos com a aplicação principal
• Tech-Stack: JAVA App + Glassfish Clusterizado 4.1 (App Server),
varnish(webcache),apache(lb)
• Datacenter RBS (4 Maquinas 32Gb)
• 8Cores 2.3Ghz (Blades)
• NAS - HDD SCSI/SSD
• Link dedicado
@iuriandreazza
/iuri.andreazza
25. Desafios
• Java-NIO
• Causava problemas de IO e drop da JVM em alguns casos de
concorrência
• IO Wait (FS, NAS vs MemFS)
• Espaço vs Escalabilidade vs Nível Cache
• Hang Glassfish
• Refatoring constante do codigo em busca de melhorias
@iuriandreazza
/iuri.andreazza
26. Pragmatico!
• Qual tech usar?
• Python?
• comunidade bastante ativa
• boa lib de manipulação de imagens “Pylon"
• bom micro-framework web (@flask)
• Simples de usar, pouco código necessário para fazer o mesmo
• Simples de fazer deploy
@iuriandreazza
/iuri.andreazza