Upload
getup-cloud
View
2.143
Download
0
Embed Size (px)
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
Citation preview
Criando e escalando umaaplicação Python/Flask + MySQL
Mateus Caruccio - [email protected]
@mateuscaruccio
Assista o video em http://goo.gl/wYylfj
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 ]
OpenShift Origin
● Open Source – sem lock-inhttps://github.com/openshift/origin-serverhttps://github.com/getupcloud/origin-serverhttps://github.com/VOCÊ/origin-server !
● Padronização de componentes – Cartridges● Agnóstico a linguagens – qualquer binário● Isolamento total entre aplicações
SELinux, cgroupsDocker.io em breve!
OpenShift Origin (cont.)
● DNS e SSL built-in● Git
$ git commit && git push
... e pronto (morte ao ftp!)
● Integração Contínua com Jenkins
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
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
Aplicação
● Gear(s) + Cartridge(s) = Aplicação
● Não escalável: Um gear
● Escalável:Múltiplos gears
Quickstart
● Aplicações prontas:Wordpress, Drupal, Rails, Magento, Sinatra, Django, Tiny Tiny RSS...
● Provavelmente já existe o que você procurahttps://github.com/search?q=openshift+quickstart&type=Repositories
Ferramentas - Console Web
● Prós○ Fácil○ Rápido○ Next -> Next -> Finish
● Cons○ Menor flexibilidade
https://broker.getupcoud.com
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]
Ferramentas - Eclipse (IDE)
● Prós○ Ambiente de dev completo○ Amplamente conhecido○ Deploy fácil via plugin
● Cons○ Precisa instalar localmente
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/
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
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
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.
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
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/
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
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
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]
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