Escalando aplicação Python usando Getup OpenShift

21
Criando e escalando uma aplicação Python/Flask + MySQL Mateus Caruccio - CEO [email protected] @mateuscaruccio Assista o video em http://goo.gl/wYylfj

description

Um pouco sobre OpenShift e como publicar e escalar uma aplicação Python baseado no volume de acessos. Esta apresentação foi feita em um live hangout que pode ser assistido em http://goo.gl/wYylfj

Transcript of Escalando aplicação Python usando Getup OpenShift

Page 1: Escalando aplicação Python usando Getup OpenShift

Criando e escalando umaaplicação Python/Flask + MySQL

Mateus Caruccio - [email protected]

@mateuscaruccio

Assista o video em http://goo.gl/wYylfj

Page 2: Escalando aplicação Python usando Getup OpenShift

Getup Cloud

● PaaS - Platform as a Service● Camada de abstração sobre a Infra (IaaS)● Foco em desenvolvimento

[ Aplicação ] ← Você

[ PaaS ] ← Nós

[ IaaS ] ← Amazon/Rackspace/Etc.

[ VM|HW ]

Page 4: Escalando aplicação Python usando Getup OpenShift

OpenShift Origin (cont.)

● DNS e SSL built-in● Git

$ git commit && git push

... e pronto (morte ao ftp!)

● Integração Contínua com Jenkins

Page 5: Escalando aplicação Python usando Getup OpenShift

Gear

● Gear: ambiente de execução

● Compartilha recursos do hostFatia de CPU + 512 MB RAM + 1G Disco

Pense no gear como um servidor particular,que você não precisará administrar

Page 6: Escalando aplicação Python usando Getup OpenShift

Cartridge

● Componente de código, executa no gear.

● Cartridges disponíveis

Linguagem: PHP, Python, Ruby, Nodejs, Java, Go...Banco: MySQL/MariaDB, PostgreSQL, MongoDB...Cache: Memcached, Redis...WebServer: Apache, Nginx

● Do-It-Yourself (DIY) -> Template exemplo

● Onde procurar: https://github.com/search?q=openshift

Page 7: Escalando aplicação Python usando Getup OpenShift

Aplicação

● Gear(s) + Cartridge(s) = Aplicação

● Não escalável: Um gear

● Escalável:Múltiplos gears

Page 9: Escalando aplicação Python usando Getup OpenShift

Ferramentas - Console Web

● Prós○ Fácil○ Rápido○ Next -> Next -> Finish

● Cons○ Menor flexibilidade

https://broker.getupcoud.com

Page 10: Escalando aplicação Python usando Getup OpenShift

Ferramentas - RHC (terminal)● Prós

○ Fácil○ Mais rápido ainda○ API completa

● Cons○ Precisa instalar localmente

Linux/Mac: $ gem install rhcWindows: https://github.com/getupcloud/openshift-rhc-installer/releases

$ rhc [comando] [opções]

Page 11: Escalando aplicação Python usando Getup OpenShift

Ferramentas - Eclipse (IDE)

● Prós○ Ambiente de dev completo○ Amplamente conhecido○ Deploy fácil via plugin

● Cons○ Precisa instalar localmente

Page 12: Escalando aplicação Python usando Getup OpenShift

Ferramentas - GIT

● Prós○ É o git... não preciso falar mais :)

● Cons○ Curva de aprendizado

Sugestão: Instale um cliente gráfico:● http://git-scm.com/downloads/guis● https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools● Dica: TortoiseGit é massa - https://code.google.com/p/tortoisegit/

Page 13: Escalando aplicação Python usando Getup OpenShift

Mão na massa

● Antes de começar, instale/atualize seu RHC:○ Linux/Mac

$ gem install rhc

$ gem update rhc

○ Windowshttps://github.com/getupcloud/openshift-rhc-installer/releases

Page 14: Escalando aplicação Python usando Getup OpenShift

Criar a aplicaçãoToda aplicação precisa de um cartridge web

$ rhc cartridges

php-5.3 PHP 5.3 web

python-2.6 Python 2.6 web

python-2.7 Python 2.7 web

python-3.3 Python 3.3 web

ruby-1.8 Ruby 1.8 web

$ rhc app create flask python-2.7 --scaling

Acesse em http://flask-[namespace].getup.io

Nome do app Cartridge web Auto-escalável

Page 15: Escalando aplicação Python usando Getup OpenShift

Adicionar cartridge MySQL$ rhc cartridge add mysql-5 --app flask

Conecte no banco usando env vars do gear:> env|grep OPENSHIFT_MYSQL

OPENSHIFT_MYSQL_DB_HOST=524b7b8bc99349fc7c00006c-caruccio.getup.io

OPENSHIFT_MYSQL_DB_PORT=43556

OPENSHIFT_MYSQL_DB_USERNAME=adminXXX

OPENSHIFT_MYSQL_DB_PASSWORD=passwdXXX

OPENSHIFT_MYSQL_DB_URL=mysql://admXXX:passXXX...flask-caruccio.getup.io:43556/

Sim, é só isso.

Page 16: Escalando aplicação Python usando Getup OpenShift

Informações sobre a aplicação$ rhc app show flask

Listar os gears:$ rhc app show flask --gears

Acessar o gear web:$ rhc ssh flask

Acessar um gear específico:$ ssh [UUID]@[UUID]-[NAMESPACE].getup.io

ssh url

Page 17: Escalando aplicação Python usando Getup OpenShift

Flask!“Talk is cheap. Show me the code” - Linus

from flask import Flaskapp = Flask(__name__)

@app.route("/") ← quando bater em “/”def hello(): ← executar isso return "Hello World!" ← retornar isso

if __name__ == "__main__": app.run()

http://flask.pocoo.org/

Page 18: Escalando aplicação Python usando Getup OpenShift

Nossa aplicação Flask

Usando um quickstart reutilizamos códigohttps://github.com/caruccio/openshift-flask-mysql-example

$ cd flask

$ git remote add upstream -m master \

https://github.com/caruccio/openshift-flask-mysql-example

$ git pull -s recursive -X theirs upstream master

$ git push

Page 19: Escalando aplicação Python usando Getup OpenShift

Inicializando o BD$ rhc ssh flask

> source python/bin/activate_virtenv

> cd $OPENSHIFT_REPO_DIR/wsgi

> python

>>> from myflaskapp import *

>>> db.create_all()

>>> admin = User('admin', '[email protected]')

>>> guest = User('guest', '[email protected]')

>>> db.session.add(admin)

>>> db.session.add(guest)

>>> db.session.commit()

SSH no gear

Ativandovirtualenv

Populandoa base

Page 20: Escalando aplicação Python usando Getup OpenShift

Inicializando o BDListar usuários:

GET http://flask-caruccio.getup.io

Acessar usuário:GET http://flask-caruccio.getup.io/guest

Incluir usuário:$ curl http://flask-caruccio.getup.io/coderstv \

--data [email protected]

Page 21: Escalando aplicação Python usando Getup OpenShift

Escalando o Everest● Usando o Apache Benchmarking Tool

○ 60 reqs simultâneas○ 100.000 reqs total

$ ab -n 100000 -c 60 http://flask-caruccio.getup.io/

Tempo de warm up: 1:30s

Monitorando gears:HAProxy →http://flask-caruccio.getup.io/haproxy-status$ watch -n 1 rhc app show flask --gears