SlideShare une entreprise Scribd logo
1  sur  31
Télécharger pour lire hors ligne
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/Devops
- PHP,Python,Ruby,Java
- RBS/Zap Imóveis
- Geek
- Tech Crazy
- Early Adopter
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
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
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
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
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
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
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
@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
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
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
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
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
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
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
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
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
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
Stack-Py
• Usando Pyhton
• PIL
• flask
• Setup (infra-estrutura)
• Varnish
• Nginx+
• 4 instancias flask
@iuriandreazza
/iuri.andreazza
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
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
RPM
500 1000 4000 9000 20000
MEM
@iuriandreazza
/iuri.andreazza
Perguntas???
@iuriandreazza
/iuri.andreazza

Contenu connexe

Tendances

Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELAlessandro Silva
 
Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...
Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...
Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...Werneck Costa
 
Monitoramento Inteligente utilizando o ZABBIX
Monitoramento Inteligente utilizando o ZABBIXMonitoramento Inteligente utilizando o ZABBIX
Monitoramento Inteligente utilizando o ZABBIXLuiz Andrade
 
Plataforma Tecnológica do clicRBS
Plataforma Tecnológica do clicRBSPlataforma Tecnológica do clicRBS
Plataforma Tecnológica do clicRBSLincolm Aguiar
 
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0aristotelesaraujo
 
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...Patricia Ladislau Silva
 
Zabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensourceZabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensourceFilipe Paternot
 
Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...
Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...
Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...Werneck Costa
 
Gerenciamento de Redes com Zabbix
Gerenciamento de Redes com ZabbixGerenciamento de Redes com Zabbix
Gerenciamento de Redes com ZabbixAndré Déo
 
Zabbix FLISOL Campinas 28-04-2012
Zabbix FLISOL Campinas 28-04-2012Zabbix FLISOL Campinas 28-04-2012
Zabbix FLISOL Campinas 28-04-2012André Déo
 
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
 Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In... Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...Zabbix BR
 
Estratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços onlineEstratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços onlineGuto Xavier
 
Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2Luiz Sales
 
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do InteriorPrimeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do InteriorZabbix BR
 
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...Zabbix BR
 
Monitoramento de Redes com Zabbix
Monitoramento de Redes com ZabbixMonitoramento de Redes com Zabbix
Monitoramento de Redes com ZabbixThiago Finardi
 
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPZabbix BR
 

Tendances (20)

Palestra Zabbix no 12 Geinfo (2013)
Palestra Zabbix no 12 Geinfo (2013)Palestra Zabbix no 12 Geinfo (2013)
Palestra Zabbix no 12 Geinfo (2013)
 
Monitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHELMonitoramento Enterprise com Zabbix+RHEL
Monitoramento Enterprise com Zabbix+RHEL
 
Zabbix Performance Tuning
Zabbix Performance TuningZabbix Performance Tuning
Zabbix Performance Tuning
 
Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...
Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...
Apresentação Software Freedom Day 2017 - Natal/RN - Algumas soluções F.O.S.S ...
 
Monitoramento Inteligente utilizando o ZABBIX
Monitoramento Inteligente utilizando o ZABBIXMonitoramento Inteligente utilizando o ZABBIX
Monitoramento Inteligente utilizando o ZABBIX
 
Plataforma Tecnológica do clicRBS
Plataforma Tecnológica do clicRBSPlataforma Tecnológica do clicRBS
Plataforma Tecnológica do clicRBS
 
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
FLISOL-Jaguaruana/CE - 2013 - Monitoramento com Software Livre - Zabbix 2.0
 
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
Monitoramento de Bancos de Dados MS SQL Server com Zabbix - SQL Technology Da...
 
Zabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensourceZabbix meetup RJ: Integrações e opensource
Zabbix meetup RJ: Integrações e opensource
 
Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...
Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...
Apresentação Werneck - MeSeg RNP 2017 - Natal RN - Importância do monitoramen...
 
Gerenciamento de Redes com Zabbix
Gerenciamento de Redes com ZabbixGerenciamento de Redes com Zabbix
Gerenciamento de Redes com Zabbix
 
Zabbix FLISOL Campinas 28-04-2012
Zabbix FLISOL Campinas 28-04-2012Zabbix FLISOL Campinas 28-04-2012
Zabbix FLISOL Campinas 28-04-2012
 
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
 Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In... Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
Zabbix?!? Sou Dev, o que eu tenho a ver com isso?!? - 3º Zabbix Meetup do In...
 
Estratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços onlineEstratégias de escablabilidade para serviços online
Estratégias de escablabilidade para serviços online
 
Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2Zabbix - Alem da Infraestrutura - Parte 2
Zabbix - Alem da Infraestrutura - Parte 2
 
Apresentacao_Zabbix
Apresentacao_ZabbixApresentacao_Zabbix
Apresentacao_Zabbix
 
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do InteriorPrimeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
Primeiros passos com a API do Zabbix - 3º Zabbix Meetup do Interior
 
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
1º Meetup Zabbix Meetup do Recife: Edilmar Junior - Para cima e avante do bás...
 
Monitoramento de Redes com Zabbix
Monitoramento de Redes com ZabbixMonitoramento de Redes com Zabbix
Monitoramento de Redes com Zabbix
 
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 2º ZABBIX MEETUP DO INTERIOR-SP
 

En vedette (20)

Joa m
Joa mJoa m
Joa m
 
Samy
Samy Samy
Samy
 
Aula03
Aula03Aula03
Aula03
 
Sedimentation in Tempe Lake Sulawesi and its future problems
Sedimentation in Tempe Lake Sulawesi and its future problemsSedimentation in Tempe Lake Sulawesi and its future problems
Sedimentation in Tempe Lake Sulawesi and its future problems
 
Hospitialtiy marketing key to success amit jatia
Hospitialtiy marketing   key to success  amit jatiaHospitialtiy marketing   key to success  amit jatia
Hospitialtiy marketing key to success amit jatia
 
Hiight profile
Hiight profileHiight profile
Hiight profile
 
Alimentacion en la madurez
Alimentacion en la madurezAlimentacion en la madurez
Alimentacion en la madurez
 
Het gevaar van een goed geweten - Daniël muller
Het gevaar van een goed geweten - Daniël muller Het gevaar van een goed geweten - Daniël muller
Het gevaar van een goed geweten - Daniël muller
 
Mi curso virtual
Mi curso virtualMi curso virtual
Mi curso virtual
 
Lukisan pengkaryaan & perekaan
Lukisan pengkaryaan & perekaanLukisan pengkaryaan & perekaan
Lukisan pengkaryaan & perekaan
 
Retórica
RetóricaRetórica
Retórica
 
Hubble
HubbleHubble
Hubble
 
Mentoring part 1
Mentoring part 1Mentoring part 1
Mentoring part 1
 
TurSur el turismo de mañana... hoy
TurSur el turismo de mañana... hoyTurSur el turismo de mañana... hoy
TurSur el turismo de mañana... hoy
 
Ativ4lopurdeslima
Ativ4lopurdeslimaAtiv4lopurdeslima
Ativ4lopurdeslima
 
The life of Adi Shankara - A Management lesson
The life of Adi Shankara - A Management lesson The life of Adi Shankara - A Management lesson
The life of Adi Shankara - A Management lesson
 
La tecnología y sus múltiples relaciones
La tecnología y sus múltiples relacionesLa tecnología y sus múltiples relaciones
La tecnología y sus múltiples relaciones
 
Acerca de los decimales
Acerca de los decimalesAcerca de los decimales
Acerca de los decimales
 
Photo
PhotoPhoto
Photo
 
Induction cd matter
Induction cd matterInduction cd matter
Induction cd matter
 

Similaire à Internet sem drama

2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA CareerMarcus Vinicius Miguel Pedro
 
2019 - Natura MeetUp - Journey to Cloud and Relational Databases
2019 - Natura MeetUp - Journey to Cloud and Relational Databases2019 - Natura MeetUp - Journey to Cloud and Relational Databases
2019 - Natura MeetUp - Journey to Cloud and Relational DatabasesMarcus Vinicius Miguel Pedro
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureFabrício Lopes Sanchez
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpCampus Party Brasil
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsRafael Salerno de Oliveira
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - AvançadoAdriano Schmidt
 
Petic Emgetis Final
Petic Emgetis FinalPetic Emgetis Final
Petic Emgetis Finalnetimba
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013javamanrj
 
PostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesPostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesjoanio trade
 
MySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQLMySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQLAirton Lastori
 
Best pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobileBest pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobilenipjc
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Mozart Diniz
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
Ruby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviçosRuby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviçosBruno Ghisi
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLFernando Ike
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceTiago Peczenyj
 

Similaire à Internet sem drama (20)

2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career2019 - GUOB MeetUp - Journey to Cloud and DBA Career
2019 - GUOB MeetUp - Journey to Cloud and DBA Career
 
2019 - Natura MeetUp - Journey to Cloud and Relational Databases
2019 - Natura MeetUp - Journey to Cloud and Relational Databases2019 - Natura MeetUp - Journey to Cloud and Relational Databases
2019 - Natura MeetUp - Journey to Cloud and Relational Databases
 
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o AzureQCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
QCon 2016 - Como migramos uma solução de 4 milhões de usuários para o Azure
 
ClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs PhpClusterizaçãO De AplicaçõEs Php
ClusterizaçãO De AplicaçõEs Php
 
Clusterização de Aplicações PHP
Clusterização de Aplicações PHPClusterização de Aplicações PHP
Clusterização de Aplicações PHP
 
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOpsComo automatizar Sistemas Legados utilizando ferramentas de DevOps
Como automatizar Sistemas Legados utilizando ferramentas de DevOps
 
JBoss-WildFly - Avançado
JBoss-WildFly - AvançadoJBoss-WildFly - Avançado
JBoss-WildFly - Avançado
 
Petic Emgetis Final
Petic Emgetis FinalPetic Emgetis Final
Petic Emgetis Final
 
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
Construindo aplicações Desktop com HTML, CSS e JS - Rio.JS Conference 2013
 
PostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandesPostgreSql - Um banco de dados Open Source que figura entre os grandes
PostgreSql - Um banco de dados Open Source que figura entre os grandes
 
MySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQLMySQL do ISAM ao NoSQL
MySQL do ISAM ao NoSQL
 
Best pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobileBest pratices para desenvolvimento mobile
Best pratices para desenvolvimento mobile
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
Ruby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviçosRuby on Rails 100% na cloud com heroku e outros serviços
Ruby on Rails 100% na cloud com heroku e outros serviços
 
Escalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQLEscalabilidade, as modas, (No)SQL
Escalabilidade, as modas, (No)SQL
 
BIG DATA na UFSM
BIG DATA na UFSMBIG DATA na UFSM
BIG DATA na UFSM
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
Integração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open sourceIntegração de Sistemas usando tecnologias open source
Integração de Sistemas usando tecnologias open source
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 

Plus de Iuri Andreazza

Gitflow - Release Process Pense
Gitflow - Release Process PenseGitflow - Release Process Pense
Gitflow - Release Process PenseIuri Andreazza
 
Apresentacao tcc - Redes Mesh Cognitiva
Apresentacao tcc - Redes Mesh CognitivaApresentacao tcc - Redes Mesh Cognitiva
Apresentacao tcc - Redes Mesh CognitivaIuri Andreazza
 
Open Graph - Pense Imóveis
Open Graph - Pense ImóveisOpen Graph - Pense Imóveis
Open Graph - Pense ImóveisIuri Andreazza
 
Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Iuri Andreazza
 
Apresentação - HTML5 e CSS3 Fabrica do Design
Apresentação - HTML5 e CSS3 Fabrica do DesignApresentação - HTML5 e CSS3 Fabrica do Design
Apresentação - HTML5 e CSS3 Fabrica do DesignIuri Andreazza
 
Apresentacao Workshop da Fabrica do Design
Apresentacao Workshop da Fabrica do DesignApresentacao Workshop da Fabrica do Design
Apresentacao Workshop da Fabrica do DesignIuri Andreazza
 

Plus de Iuri Andreazza (8)

Gitflow - Release Process Pense
Gitflow - Release Process PenseGitflow - Release Process Pense
Gitflow - Release Process Pense
 
Apresentacao tcc - Redes Mesh Cognitiva
Apresentacao tcc - Redes Mesh CognitivaApresentacao tcc - Redes Mesh Cognitiva
Apresentacao tcc - Redes Mesh Cognitiva
 
Open Graph - Pense Imóveis
Open Graph - Pense ImóveisOpen Graph - Pense Imóveis
Open Graph - Pense Imóveis
 
Private DNS
Private DNSPrivate DNS
Private DNS
 
Ninja dojo
Ninja dojoNinja dojo
Ninja dojo
 
Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!Hotspot Green and Blue Label - Switching the labels!
Hotspot Green and Blue Label - Switching the labels!
 
Apresentação - HTML5 e CSS3 Fabrica do Design
Apresentação - HTML5 e CSS3 Fabrica do DesignApresentação - HTML5 e CSS3 Fabrica do Design
Apresentação - HTML5 e CSS3 Fabrica do Design
 
Apresentacao Workshop da Fabrica do Design
Apresentacao Workshop da Fabrica do DesignApresentacao Workshop da Fabrica do Design
Apresentacao Workshop da Fabrica do Design
 

Internet sem drama

  • 1. Internet sem Drama Enfrentando desafios diários! @iuriandreazza /iuri.andreazza
  • 2.
  • 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
  • 24. 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
  • 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
  • 27. Stack-Py • Usando Pyhton • PIL • flask • Setup (infra-estrutura) • Varnish • Nginx+ • 4 instancias flask @iuriandreazza /iuri.andreazza
  • 28. 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
  • 30. 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