SlideShare a Scribd company logo
1 of 45
Better Developer / Cloud
([B]: REST Ping – Performance e Filas)
2015/10
Marcio Marchini
www.BetterDeveloper.net
© 2015 Marcio Marchini 2i
• Instale:
1. Heroku Toolbelt: https://toolbelt.heroku.com
2. Python 2.7.x:
https://www.python.org/downloads/release/pyt
hon-2710/
3. PyCharm IDE:
https://www.jetbrains.com/pycharm/download/
Servidor REST nas Nuvens: Instalar Ferramentas
© 2015 Marcio Marchini 3i
• Instale Virtualenv:
• sudo apt-get install pip
• [sudo] pip install virtualenv
• Crie o ambiente de trabalho virtualenv:
1.mkdir ~/venvs
2.virtualenv ~/venvs/ping
3.. ~/venvs/ping/bin/activate
Servidor REST nas Nuvens: Instalar Suporte a Sandbox Python
© 2015 Marcio Marchini 4i
• Pegue os fontes originais e pule pra tag INITIAL:
1. git clone https://github.com/sglebs/ping.git
2. cd ping
3. git checkout tags/INITIAL
• Instale no seu Sandbox/virtualenv os requisitos:
• pip install –r requirements.txt
Servidor REST nas Nuvens: Pegar Fontes do ping
© 2015 Marcio Marchini 5i
• Abra esse prj/diretório no PyCharm e configure o
virtualenv dele (PyCharmPreferences no MacOS:
Servidor REST nas Nuvens: Pegar Fontes do ping
© 2015 Marcio Marchini 6i
• Dispare o servidor ping na IDE:
• Conecte-se com o browser:
http://localhost:8085/ping
Servidor REST nas Nuvens: Rodar na IDE
© 2015 Marcio Marchini 7i
• Dispare o servidor ping com Foreman:
• foreman run web
• Conecte-se com o browser: http://localhost:8085/ping
Servidor REST nas Nuvens: Rodar no simulador de Heroku
© 2015 Marcio Marchini 8i
• Crie uma conta gratuita no
heroku.com
• Crie uma app chamada ping-xyz
no heroku
Servidor REST nas Nuvens: Setup no Heroku nas Nuvens
© 2015 Marcio Marchini 9i
• Adicione repo git remoto no heroku, para deploy:
heroku git:remote -a ping-mqm
(ou: git remote add heroku git@heroku.com:ping-mqm.git)
(ou: git remote add heroku https://git.heroku.com/ping-mqm.git)
• Deploy pro heroku com git push:
git push –f heroku INITIAL:master
Servidor REST nas Nuvens: Deploy no Heroku nas nuvens
© 2015 Marcio Marchini 10i
• Conecte-se com o browser:
https://ping-mqm.herokuapp.com/ping
Servidor REST nas Nuvens: Testando no Heoku
© 2015 Marcio Marchini 11i
• requirements.txt define as bibliotecas que você usa
• runtime.txt define qual versão do Python você usa
• Procfile define a(s) linha(s) de comando para
disparar seu aplicativo
• APIs REST são o entry-point de sua app – coloque as
mesmas sob “controllers”
• Note que Bottle promove uma programação
PROCEDURAL e não OO dos controllers (funções e não
métodos são decorados)
• Veremos como fazer OO mais pra frente
Explicando
© 2015 Marcio Marchini 12i
• No site heroku, adicione o Add-On New Relic na app
Adicionando Monitoramento
© 2015 Marcio Marchini 13i
• Pegue os fontes originais e pule pra tag NEWRELIC:
1. git clone https://github.com/sglebs/ping.git
2. cd ping
3. git checkout tags/NEWRELIC
• Atualize no seu Sandbox/virtualenv os
novosrequisitos:
• pip install –r requirements.txt
Pegar Fontes do ping com suporte New Relic
© 2015 Marcio Marchini 14i
• Deploy pro heroku com git push:
git push –f heroku NEWRELIC:master
Servidor REST nas Nuvens: Deploy no Heroku nas nuvens
Enquanto isso: olhe o arquivo
Procfile e veja o que mudou
© 2015 Marcio Marchini 15i
• Conecte-se com o browser:
https://ping-mqm.herokuapp.com/ping
Servidor REST nas Nuvens: Testando no Heroku
© 2015 Marcio Marchini 16i
• Clique/abra o add-on
• Concorde com a licença
• Veja o resumo
Servidor REST nas Nuvens: Vendo no New Relic
© 2015 Marcio Marchini 17i
• Visite o ping diversas vezes, aguarde 5mins
• Você verá algo assim:
Servidor REST nas Nuvens: Detalhes no New Relic
© 2015 Marcio Marchini 18i
• apdex
Servidor REST nas Nuvens: Apdex no New Relic
© 2015 Marcio Marchini 19i
• No site heroku, adicione o Add-On Blitz na app
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 20i
• Entre no Add-on e veja que o ping está autorizado e
rode
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 21i
• Customize, rode, veja o resultado
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 22i
• O resultado
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 23i
• O resultado
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 24i
• O resultado no New Relic
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 25i
• O resultado no New Relic desconsiderando Filas
Adicionando Teste Simples de Carga
Falta gente pra atender os caixas do meu banco!!!!!!
© 2015 Marcio Marchini 26i
• Pegue os fontes originais e pule pra tag GUNICORN:
1. git clone https://github.com/sglebs/ping.git
2. cd ping
3. git checkout tags/GUNICORN
• Atualize no seu Sandbox/virtualenv os
novosrequisitos e config heroku / gunicorn:
• pip install –r requirements.txt
• heroku config:set NEW_RELIC_SSL=false
NEW_RELIC_APP_NAME=ping
NEW_RELIC_CONFIG_FILE=newrelic.ini NEW_RELIC_LOG=stdout
-a ping-mqm
Pegar Fontes do ping com suporte gunicorn
© 2015 Marcio Marchini 27i
• Deploy pro heroku com git push:
git push –f heroku GUNICORN:master
Servidor REST nas Nuvens: Deploy no Heroku nas nuvens
Enquanto isso: olhe o arquivo
Procfile e veja o que mudou
© 2015 Marcio Marchini 28i
• Customize, rode, veja o resultado
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 29i
• O resultado
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 30i
• O resultado
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 31i
• O resultado no New Relic
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 32i
• O resultado no New Relic desconsiderando Filas
Adicionando Teste Simples de Carga
© 2015 Marcio Marchini 33i
• Olhe /experimente / repita os passos com:
• Flask
• CherryPy
• Django
• …
Servidor REST nas Nuvens: Outras Frameworks
© 2015 Marcio Marchini 34i
• http://faruk.akgul.org/blog/python-web-frameworks-
benchmark/
Alguns benchmarks de Frameworks Diferentes
© 2015 Marcio Marchini 35i
• http://klen.github.io/py-frameworks-bench/
Alguns benchmarks de Frameworks Diferentes
© 2015 Marcio Marchini 36i
• http://mindref.blogspot.com.br/2012/09/python-
fastest-web-framework.html
Alguns benchmarks de Frameworks Diferentes
© 2015 Marcio Marchini 37i
• Config do nome da app no New Relic
Adicionando Alerta de Indisponibilidade
© 2015 Marcio Marchini 38i
• Settings New Relic
Adicionando Alerta de Indisponibilidade
© 2015 Marcio Marchini 39i
• Settings New Relic
Adicionando Alerta de Indisponibilidade
© 2015 Marcio Marchini 40i
• Settings New Relic
Adicionando Alerta de Indisponibilidade
© 2015 Marcio Marchini 41i
• Settings New Relic
Adicionando Alerta de Indisponibilidade
© 2015 Marcio Marchini 42i
• Mudar pra 0 dynos no heroku
Testando o Alerta de Indisponibilidade
© 2015 Marcio Marchini 43i
• New Relic mostra que está caída
Testando o Alerta de Indisponibilidade
© 2015 Marcio Marchini 44i
• New Relic Mobile mostra que está caída
Testando o Alerta de Indisponibilidade
© 2015 Marcio Marchini 45i
• Dúvidas / Perguntas?
• Próximos Capítulos / Em outro módulo:
1. Camadas e Arquitetura: Como separar a camada
Controller/REST da camada Modelo para não ter um
macarrão
2. Como testar as camadas MODEL e CONTROLLER/REST
separadamente
Servidor REST nas Nuvens: Fim

More Related Content

What's hot

Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingSamanta Cicilia
 
Uma Sprint na Vida do Tester
Uma Sprint na Vida do TesterUma Sprint na Vida do Tester
Uma Sprint na Vida do TesterVitor Pelizza
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous DeliverySamanta Cicilia
 
Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes! Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes! Elias Nogueira
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes AutomatizadosSamanta Cicilia
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilElias Nogueira
 
Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app HíbridaElias Nogueira
 
Feedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisFeedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisElias Nogueira
 
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingSamanta Cicilia
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva minastestingconference
 
Apenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidApenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidElias Nogueira
 
Medindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterMedindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterJúlio de Lima
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileElias Nogueira
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no AndroidVinícius Thiengo
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressWalmyr Lima e Silva Filho
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoiMasters
 
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Elias Nogueira
 
Ágil na Prática
Ágil na PráticaÁgil na Prática
Ágil na PráticaIgo Coelho
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Elias Nogueira
 

What's hot (20)

Coders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile TestingCoders On Beer + Ministry Of Testing - Agile Testing
Coders On Beer + Ministry Of Testing - Agile Testing
 
Uma Sprint na Vida do Tester
Uma Sprint na Vida do TesterUma Sprint na Vida do Tester
Uma Sprint na Vida do Tester
 
[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery[Lady talks]Continuous Delivery
[Lady talks]Continuous Delivery
 
Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes! Acelerando o feedback e deploy com Automação de Testes!
Acelerando o feedback e deploy com Automação de Testes!
 
[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados[DevOps Carioca] Testes Automatizados
[DevOps Carioca] Testes Automatizados
 
Automação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira ÁgilAutomação de Teste em Front End - Caipira Ágil
Automação de Teste em Front End - Caipira Ágil
 
Automatizando uma app Híbrida
Automatizando uma app HíbridaAutomatizando uma app Híbrida
Automatizando uma app Híbrida
 
Feedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionaisFeedback mais rápido na sua build dividindo os testes funcionais
Feedback mais rápido na sua build dividindo os testes funcionais
 
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile TestingDevOps Summit Brasil - O que não te contaram sobre Agile Testing
DevOps Summit Brasil - O que não te contaram sobre Agile Testing
 
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva 3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
3 noções básicas para automação de testes efetivos - Taíse Dias da Silva
 
Apenas um script de teste para iOS e Android
Apenas um script de teste para iOS e AndroidApenas um script de teste para iOS e Android
Apenas um script de teste para iOS e Android
 
Medindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeterMedindo a performance de aplicações web com JMeter
Medindo a performance de aplicações web com JMeter
 
Automação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e MobileAutomação de Teste para REST, Web e Mobile
Automação de Teste para REST, Web e Mobile
 
Lottie API Para Animações no Android
Lottie API Para Animações no AndroidLottie API Para Animações no Android
Lottie API Para Animações no Android
 
Como criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com CypressComo criar testes rápidos e robustos com Cypress
Como criar testes rápidos e robustos com Cypress
 
Android DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimentoAndroid DevConference - Automatizando testes sem sofrimento
Android DevConference - Automatizando testes sem sofrimento
 
Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...Tudo o que você precisa saber para começar a automação de testes em dispositi...
Tudo o que você precisa saber para começar a automação de testes em dispositi...
 
O Testador Técnico
O Testador TécnicoO Testador Técnico
O Testador Técnico
 
Ágil na Prática
Ágil na PráticaÁgil na Prática
Ágil na Prática
 
Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014Automação de Teste com Robotium - Tche Mobile 2014
Automação de Teste com Robotium - Tche Mobile 2014
 

Similar to Deploy REST API Python Heroku

Slide 02 introdução ao code igniter, utilização do bootstrap
Slide 02   introdução ao code igniter, utilização do bootstrap Slide 02   introdução ao code igniter, utilização do bootstrap
Slide 02 introdução ao code igniter, utilização do bootstrap Raniere de Lima
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSRodrigo Kono
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitMozDevz
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e AlémAndre Baltieri
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoAlvaro Viebrantz
 
Continuous Delivery com ArgoCD
Continuous Delivery com ArgoCDContinuous Delivery com ArgoCD
Continuous Delivery com ArgoCDRodrigo Souza
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnicaSilvio Dias
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnicaSilvio Dias
 
Treinamento interno 01 - pull requests
Treinamento interno 01 - pull requestsTreinamento interno 01 - pull requests
Treinamento interno 01 - pull requestsSG Tech
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + FirebaseBruno Catão
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure FunctionsCDS
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosThiago Soares
 
Application Insights - Campinas .NET - Março/2017
Application Insights - Campinas .NET - Março/2017Application Insights - Campinas .NET - Março/2017
Application Insights - Campinas .NET - Março/2017Renato Groff
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasAmazon Web Services LATAM
 
[DevOps Carioca] Continuous Delivery
[DevOps Carioca]  Continuous Delivery[DevOps Carioca]  Continuous Delivery
[DevOps Carioca] Continuous DeliverySamanta Cicilia
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAmazon Web Services LATAM
 
GitHub Boas Práticas
GitHub Boas PráticasGitHub Boas Práticas
GitHub Boas PráticasCDS
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeStefan Teixeira
 

Similar to Deploy REST API Python Heroku (20)

Slide 02 introdução ao code igniter, utilização do bootstrap
Slide 02   introdução ao code igniter, utilização do bootstrap Slide 02   introdução ao code igniter, utilização do bootstrap
Slide 02 introdução ao code igniter, utilização do bootstrap
 
Controlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTSControlando o Ciclo de Software e porque você deveria usar o VSTS
Controlando o Ciclo de Software e porque você deveria usar o VSTS
 
Web Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to GitWeb Training Aula 04: Introduction to Git
Web Training Aula 04: Introduction to Git
 
Git hub and Laravel
Git hub and Laravel Git hub and Laravel
Git hub and Laravel
 
Angular 2, TypeScript e Além
Angular 2, TypeScript e AlémAngular 2, TypeScript e Além
Angular 2, TypeScript e Além
 
Construindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em GoConstruindo aplicações Cloud Native em Go
Construindo aplicações Cloud Native em Go
 
Continuous Delivery com ArgoCD
Continuous Delivery com ArgoCDContinuous Delivery com ArgoCD
Continuous Delivery com ArgoCD
 
Guiao demotecnica
Guiao demotecnicaGuiao demotecnica
Guiao demotecnica
 
Guião demotécnica
Guião demotécnicaGuião demotécnica
Guião demotécnica
 
Treinamento interno 01 - pull requests
Treinamento interno 01 - pull requestsTreinamento interno 01 - pull requests
Treinamento interno 01 - pull requests
 
Ionic 2/3 + Firebase
Ionic 2/3 + FirebaseIonic 2/3 + Firebase
Ionic 2/3 + Firebase
 
MVPConf - Azure Functions
MVPConf - Azure FunctionsMVPConf - Azure Functions
MVPConf - Azure Functions
 
JHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãosJHipster - Produtividade e Maturidade em suas mãos
JHipster - Produtividade e Maturidade em suas mãos
 
Application Insights - Campinas .NET - Março/2017
Application Insights - Campinas .NET - Março/2017Application Insights - Campinas .NET - Março/2017
Application Insights - Campinas .NET - Março/2017
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
[DevOps Carioca] Continuous Delivery
[DevOps Carioca]  Continuous Delivery[DevOps Carioca]  Continuous Delivery
[DevOps Carioca] Continuous Delivery
 
Workshop ASP.NET MVC 5
Workshop ASP.NET MVC 5Workshop ASP.NET MVC 5
Workshop ASP.NET MVC 5
 
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWSAcelerando a entrega de software com as ferramentas de desenvolvimento da AWS
Acelerando a entrega de software com as ferramentas de desenvolvimento da AWS
 
GitHub Boas Práticas
GitHub Boas PráticasGitHub Boas Práticas
GitHub Boas Práticas
 
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidadeTDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
TDC 2016 SP - Desmistificando cobertura de código como métrica de qualidade
 

More from Marcio Marchini

More from Marcio Marchini (8)

Critérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou TerceirizadosCritérios de Aceite de Código Para Times Internos ou Terceirizados
Critérios de Aceite de Código Para Times Internos ou Terceirizados
 
É Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônicoÉ Pythonico, mas... é macarrônico
É Pythonico, mas... é macarrônico
 
Whitepaper-Custos
Whitepaper-CustosWhitepaper-Custos
Whitepaper-Custos
 
01-a-Intro-BetterDev
01-a-Intro-BetterDev01-a-Intro-BetterDev
01-a-Intro-BetterDev
 
OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014OmbrosDeGigantes-TDC2014
OmbrosDeGigantes-TDC2014
 
gae
gaegae
gae
 
mqm-Agile
mqm-Agilemqm-Agile
mqm-Agile
 
Branches-Intro
Branches-IntroBranches-Intro
Branches-Intro
 

Deploy REST API Python Heroku

  • 1. Better Developer / Cloud ([B]: REST Ping – Performance e Filas) 2015/10 Marcio Marchini www.BetterDeveloper.net
  • 2. © 2015 Marcio Marchini 2i • Instale: 1. Heroku Toolbelt: https://toolbelt.heroku.com 2. Python 2.7.x: https://www.python.org/downloads/release/pyt hon-2710/ 3. PyCharm IDE: https://www.jetbrains.com/pycharm/download/ Servidor REST nas Nuvens: Instalar Ferramentas
  • 3. © 2015 Marcio Marchini 3i • Instale Virtualenv: • sudo apt-get install pip • [sudo] pip install virtualenv • Crie o ambiente de trabalho virtualenv: 1.mkdir ~/venvs 2.virtualenv ~/venvs/ping 3.. ~/venvs/ping/bin/activate Servidor REST nas Nuvens: Instalar Suporte a Sandbox Python
  • 4. © 2015 Marcio Marchini 4i • Pegue os fontes originais e pule pra tag INITIAL: 1. git clone https://github.com/sglebs/ping.git 2. cd ping 3. git checkout tags/INITIAL • Instale no seu Sandbox/virtualenv os requisitos: • pip install –r requirements.txt Servidor REST nas Nuvens: Pegar Fontes do ping
  • 5. © 2015 Marcio Marchini 5i • Abra esse prj/diretório no PyCharm e configure o virtualenv dele (PyCharmPreferences no MacOS: Servidor REST nas Nuvens: Pegar Fontes do ping
  • 6. © 2015 Marcio Marchini 6i • Dispare o servidor ping na IDE: • Conecte-se com o browser: http://localhost:8085/ping Servidor REST nas Nuvens: Rodar na IDE
  • 7. © 2015 Marcio Marchini 7i • Dispare o servidor ping com Foreman: • foreman run web • Conecte-se com o browser: http://localhost:8085/ping Servidor REST nas Nuvens: Rodar no simulador de Heroku
  • 8. © 2015 Marcio Marchini 8i • Crie uma conta gratuita no heroku.com • Crie uma app chamada ping-xyz no heroku Servidor REST nas Nuvens: Setup no Heroku nas Nuvens
  • 9. © 2015 Marcio Marchini 9i • Adicione repo git remoto no heroku, para deploy: heroku git:remote -a ping-mqm (ou: git remote add heroku git@heroku.com:ping-mqm.git) (ou: git remote add heroku https://git.heroku.com/ping-mqm.git) • Deploy pro heroku com git push: git push –f heroku INITIAL:master Servidor REST nas Nuvens: Deploy no Heroku nas nuvens
  • 10. © 2015 Marcio Marchini 10i • Conecte-se com o browser: https://ping-mqm.herokuapp.com/ping Servidor REST nas Nuvens: Testando no Heoku
  • 11. © 2015 Marcio Marchini 11i • requirements.txt define as bibliotecas que você usa • runtime.txt define qual versão do Python você usa • Procfile define a(s) linha(s) de comando para disparar seu aplicativo • APIs REST são o entry-point de sua app – coloque as mesmas sob “controllers” • Note que Bottle promove uma programação PROCEDURAL e não OO dos controllers (funções e não métodos são decorados) • Veremos como fazer OO mais pra frente Explicando
  • 12. © 2015 Marcio Marchini 12i • No site heroku, adicione o Add-On New Relic na app Adicionando Monitoramento
  • 13. © 2015 Marcio Marchini 13i • Pegue os fontes originais e pule pra tag NEWRELIC: 1. git clone https://github.com/sglebs/ping.git 2. cd ping 3. git checkout tags/NEWRELIC • Atualize no seu Sandbox/virtualenv os novosrequisitos: • pip install –r requirements.txt Pegar Fontes do ping com suporte New Relic
  • 14. © 2015 Marcio Marchini 14i • Deploy pro heroku com git push: git push –f heroku NEWRELIC:master Servidor REST nas Nuvens: Deploy no Heroku nas nuvens Enquanto isso: olhe o arquivo Procfile e veja o que mudou
  • 15. © 2015 Marcio Marchini 15i • Conecte-se com o browser: https://ping-mqm.herokuapp.com/ping Servidor REST nas Nuvens: Testando no Heroku
  • 16. © 2015 Marcio Marchini 16i • Clique/abra o add-on • Concorde com a licença • Veja o resumo Servidor REST nas Nuvens: Vendo no New Relic
  • 17. © 2015 Marcio Marchini 17i • Visite o ping diversas vezes, aguarde 5mins • Você verá algo assim: Servidor REST nas Nuvens: Detalhes no New Relic
  • 18. © 2015 Marcio Marchini 18i • apdex Servidor REST nas Nuvens: Apdex no New Relic
  • 19. © 2015 Marcio Marchini 19i • No site heroku, adicione o Add-On Blitz na app Adicionando Teste Simples de Carga
  • 20. © 2015 Marcio Marchini 20i • Entre no Add-on e veja que o ping está autorizado e rode Adicionando Teste Simples de Carga
  • 21. © 2015 Marcio Marchini 21i • Customize, rode, veja o resultado Adicionando Teste Simples de Carga
  • 22. © 2015 Marcio Marchini 22i • O resultado Adicionando Teste Simples de Carga
  • 23. © 2015 Marcio Marchini 23i • O resultado Adicionando Teste Simples de Carga
  • 24. © 2015 Marcio Marchini 24i • O resultado no New Relic Adicionando Teste Simples de Carga
  • 25. © 2015 Marcio Marchini 25i • O resultado no New Relic desconsiderando Filas Adicionando Teste Simples de Carga Falta gente pra atender os caixas do meu banco!!!!!!
  • 26. © 2015 Marcio Marchini 26i • Pegue os fontes originais e pule pra tag GUNICORN: 1. git clone https://github.com/sglebs/ping.git 2. cd ping 3. git checkout tags/GUNICORN • Atualize no seu Sandbox/virtualenv os novosrequisitos e config heroku / gunicorn: • pip install –r requirements.txt • heroku config:set NEW_RELIC_SSL=false NEW_RELIC_APP_NAME=ping NEW_RELIC_CONFIG_FILE=newrelic.ini NEW_RELIC_LOG=stdout -a ping-mqm Pegar Fontes do ping com suporte gunicorn
  • 27. © 2015 Marcio Marchini 27i • Deploy pro heroku com git push: git push –f heroku GUNICORN:master Servidor REST nas Nuvens: Deploy no Heroku nas nuvens Enquanto isso: olhe o arquivo Procfile e veja o que mudou
  • 28. © 2015 Marcio Marchini 28i • Customize, rode, veja o resultado Adicionando Teste Simples de Carga
  • 29. © 2015 Marcio Marchini 29i • O resultado Adicionando Teste Simples de Carga
  • 30. © 2015 Marcio Marchini 30i • O resultado Adicionando Teste Simples de Carga
  • 31. © 2015 Marcio Marchini 31i • O resultado no New Relic Adicionando Teste Simples de Carga
  • 32. © 2015 Marcio Marchini 32i • O resultado no New Relic desconsiderando Filas Adicionando Teste Simples de Carga
  • 33. © 2015 Marcio Marchini 33i • Olhe /experimente / repita os passos com: • Flask • CherryPy • Django • … Servidor REST nas Nuvens: Outras Frameworks
  • 34. © 2015 Marcio Marchini 34i • http://faruk.akgul.org/blog/python-web-frameworks- benchmark/ Alguns benchmarks de Frameworks Diferentes
  • 35. © 2015 Marcio Marchini 35i • http://klen.github.io/py-frameworks-bench/ Alguns benchmarks de Frameworks Diferentes
  • 36. © 2015 Marcio Marchini 36i • http://mindref.blogspot.com.br/2012/09/python- fastest-web-framework.html Alguns benchmarks de Frameworks Diferentes
  • 37. © 2015 Marcio Marchini 37i • Config do nome da app no New Relic Adicionando Alerta de Indisponibilidade
  • 38. © 2015 Marcio Marchini 38i • Settings New Relic Adicionando Alerta de Indisponibilidade
  • 39. © 2015 Marcio Marchini 39i • Settings New Relic Adicionando Alerta de Indisponibilidade
  • 40. © 2015 Marcio Marchini 40i • Settings New Relic Adicionando Alerta de Indisponibilidade
  • 41. © 2015 Marcio Marchini 41i • Settings New Relic Adicionando Alerta de Indisponibilidade
  • 42. © 2015 Marcio Marchini 42i • Mudar pra 0 dynos no heroku Testando o Alerta de Indisponibilidade
  • 43. © 2015 Marcio Marchini 43i • New Relic mostra que está caída Testando o Alerta de Indisponibilidade
  • 44. © 2015 Marcio Marchini 44i • New Relic Mobile mostra que está caída Testando o Alerta de Indisponibilidade
  • 45. © 2015 Marcio Marchini 45i • Dúvidas / Perguntas? • Próximos Capítulos / Em outro módulo: 1. Camadas e Arquitetura: Como separar a camada Controller/REST da camada Modelo para não ter um macarrão 2. Como testar as camadas MODEL e CONTROLLER/REST separadamente Servidor REST nas Nuvens: Fim

Editor's Notes

  1. git checkout tags/INITIAL
  2. git checkout tags/NEWRELIC
  3. git checkout tags/GUNICORN