Internet sem Drama
Enfrentando desafios diários!
@iuriandreazza
/iuri.andreazza
@iuriandreazza
- Travel Engineering @ Fabuloso Destino
- B.el em Ciência da Computação (Unisinos)
- Engenheiro de Software...
Do começo
• Background
• Deploy de 3 em 3 meses
• Features requests semanais
• 5 camadas de processos para deploy
• Go liv...
Estrutura que havia
• Deploy somente com script (GMud)
• Sem acesso a PRD (mesmo sem nível de usuário ou logs)
• Scripts d...
O que era realmente bom?
• Apoio dos DBAs
• Apoio da Infra em questões estruturais
• A necessidade de pensar bem antes de ...
O que era ruim?
• Dificuldade de liberar rapidamente uma versão do portal
• Resistência da equipe de infra-estrutura em apl...
O que enfrentávamos?
• Necessidade de ajustar o negócio de forma rápida
• Necessidade de colocar rapidamente soluções nova...
PaaS/Cloud o que?????
• Analise:
• Ir para AWS - Amazon
• Ajustar Infra do datacenter local e tentar fazer o melhor possív...
Gestão de versão
• Entender como separar features
• Entender como quebrar em etapas entregáveis
• Criar metodologia no tim...
@iuriandreazza
/iuri.andreazza
Time
release
branchesmasterhotfixes
1.0.0
2.0.0
dev
Inicio
Release
PRD BUG
featurebranches
...
Infra 1.5
• Ajustar com a equipe de infra-estrutura para um deploy mais rápido
• Processo de Deploy maquina-a-maquina
• Sc...
Infra 2.0
• Mover para a Amazon-AWS
• Assumir toda a gestão da infra
• Criar estrutura de deploy continuo usando Jenkins-C...
Penseimoves->ZAP
• Venda do penseimoveis para o ZAP
• 40 Milhões
• Ocorreu somente por causa do movimento para o Cloud e d...
Recortando Imagens on-the-go
• Problema:
• Imagens do portal do antigo penseimoveis.com.br estavam
estranhas
• Debug:
• As...
Achando o problema!
• Possíveis causas iniciais:
• Tempo de resposta durante a entrega
• Cache não sendo feito de forma co...
Estrutura que havia
• Recortador dividia recursos com a aplicação principal
• Tech-Stack: JAVA App + Glassfish Clusterizado...
Métricas (Stack-Java)
segundos
0
0,75
1,5
2,25
3
RPM
500 1000 4000 9000 20000
Tempo de Resp. IO/W
Mb
0
100
200
300
400
RPM...
Desafios
• Java-NIO
• Causava problemas de IO e drop da JVM em alguns casos de
concorrência
• IO Wait (FS, NAS vs MemFS)
• ...
Pragmatico!
• Qual tech usar?
• Python?
• comunidade bastante ativa
• boa lib de manipulação de imagens “Pylon"
• bom micr...
Stack-Py
• Usando Pyhton
• PIL
• flask
• Setup (infra-estrutura)
• Varnish
• Nginx+
• 4 instancias flask
@iuriandreazza
/iur...
Stack-Py
import sys

import pense_lib

from flask import Flask

from flask import request



import hmac

import hashlib

...
Stack-Py
@iuriandreazza
/iuri.andreazza
• Ex. deploy

PS: Colocar foto do MESOS e Marathon
Métricas (Stack-Py)
segundos
0
0,175
0,35
0,525
0,7
RPM
500 1000 4000 9000 20000
Tempo de Resp. IO/W
Mb
0
7,5
15
22,5
30
R...
Perguntas???
@iuriandreazza
/iuri.andreazza
Internet sem drama
Internet sem drama
Internet sem drama
Internet sem drama
Internet sem drama
Internet sem drama
Internet sem drama
Próximos SlideShares
Carregando em…5
×

Internet sem drama

350 visualizações

Publicada em

Palestra apresentada para o Curso de Sistemas para Internet at Faculdade Murialdo

Publicada em: Internet
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
350
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Internet sem drama

  1. 1. Internet sem Drama Enfrentando desafios diários! @iuriandreazza /iuri.andreazza
  2. 2. @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
  3. 3. 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
  4. 4. 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
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. 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
  9. 9. 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
  10. 10. @iuriandreazza /iuri.andreazza Time release branchesmasterhotfixes 1.0.0 2.0.0 dev Inicio Release PRD BUG featurebranches Ontologia New Ecommerce 1.0.5 Atualiza from HOTFIX 2.0.1 X Inicio Release GITFLOW
  11. 11. 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
  12. 12. 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
  13. 13. 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
  14. 14. 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
  15. 15. 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
  16. 16. 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
  17. 17. Métricas (Stack-Java) segundos 0 0,75 1,5 2,25 3 RPM 500 1000 4000 9000 20000 Tempo de Resp. IO/W Mb 0 100 200 300 400 RPM 500 1000 4000 9000 20000 MEM @iuriandreazza /iuri.andreazza
  18. 18. 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
  19. 19. 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
  20. 20. Stack-Py • Usando Pyhton • PIL • flask • Setup (infra-estrutura) • Varnish • Nginx+ • 4 instancias flask @iuriandreazza /iuri.andreazza
  21. 21. Stack-Py import sys
 import pense_lib
 from flask import Flask
 from flask import request
 
 import hmac
 import hashlib
 import requests
 import base64
 import time
 import datetime
 
 app = Flask(__name__)
 app.config.from_pyfile('flaskapp.cfg')
 @app.route('/images/<path:file_path>')
 def static_asset(file_path): w = request.args.get('w', None)
 h = request.args.get('h', None)
 fit = request.args.get('fit', "f")
 env_rec = request.args.get('e', "production")
 #tratando de recorte
 center = request.args.get('c', "a")
 if "," in center:
 center = center.split(",")
 
 return pense_lib.processRequest(file_path, w, h, fit, center, env_rec) @iuriandreazza /iuri.andreazza def resize(img, box, fit, out, quality, center, ext="JPEG", save = True): #... def processRequest(file_path, w, h, fit, center, env_rec): if not os.path.exists("/tmp/ images/"+file_original_path_s3):
 res = k_file_original.get_contents_to_filename("/tmp/ images/"+file_original_path_s3)
 
 im = Image.open("/tmp/images/"+file_original_path_s3)
 im = resize(im, box, fit, "/tmp/images/files/"+env_rec +"/"+file_rec_name, 100, center)
 # ext = imghdr.what("/tmp/images/files/"+file_rec_name)
 s3_utils.s3Push(bucket, file_path_s3, "/tmp/images/ files/"+env_rec+"/"+file_rec_name).start()
 
 output = io.BytesIO()
 im.save(output, format='JPEG') # or another format
 output.seek(0)
 
 return send_file(output, mimetype='image/JPEG') app.py pense_lib.py
  22. 22. Stack-Py @iuriandreazza /iuri.andreazza • Ex. deploy
 PS: Colocar foto do MESOS e Marathon
  23. 23. Métricas (Stack-Py) segundos 0 0,175 0,35 0,525 0,7 RPM 500 1000 4000 9000 20000 Tempo de Resp. IO/W Mb 0 7,5 15 22,5 30 RPM 500 1000 4000 9000 20000 MEM @iuriandreazza /iuri.andreazza
  24. 24. Perguntas??? @iuriandreazza /iuri.andreazza

×