Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Escalando aplicação Python usando Getup OpenShift

2,613 views

Published on

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

Published in: Technology
  • Be the first to comment

Escalando aplicação Python usando Getup OpenShift

  1. 1. Criando e escalando uma aplicação Python/Flask + MySQL Mateus Caruccio - CEO mateus.caruccio@getupcloud.com @mateuscaruccio Assista o video em http://goo.gl/wYylfj
  2. 2. 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 ]
  3. 3. OpenShift Origin ● Open Source – sem lock-in https://github.com/openshift/origin-server https://github.com/getupcloud/origin-server https://github.com/VOCÊ/origin-server ! ● Padronização de componentes – Cartridges ● Agnóstico a linguagens – qualquer binário ● Isolamento total entre aplicações SELinux, cgroups Docker.io em breve!
  4. 4. OpenShift Origin (cont.) ● DNS e SSL built-in ● Git $ git commit && git push ... e pronto (morte ao ftp!) ● Integração Contínua com Jenkins
  5. 5. Gear ● Gear: ambiente de execução ● Compartilha recursos do host Fatia de CPU + 512 MB RAM + 1G Disco Pense no gear como um servidor particular, que você não precisará administrar
  6. 6. 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
  7. 7. Aplicação ● Gear(s) + Cartridge(s) = Aplicação ● Não escalável: Um gear ● Escalável: Múltiplos gears
  8. 8. Quickstart ● Aplicações prontas: Wordpress, Drupal, Rails, Magento, Sinatra, Django, Tiny Tiny RSS... ● Provavelmente já existe o que você procura https://github.com/search?q=openshift+quickstart&type=Repositories
  9. 9. Ferramentas - Console Web ● Prós ○ Fácil ○ Rápido ○ Next -> Next -> Finish ● Cons ○ Menor flexibilidade https://broker.getupcoud.com
  10. 10. Ferramentas - RHC (terminal) ● Prós ○ Fácil ○ Mais rápido ainda ○ API completa ● Cons ○ Precisa instalar localmente Linux/Mac: $ gem install rhc Windows: https://github.com/getupcloud/openshift-rhc-installer/releases $ rhc [comando] [opções]
  11. 11. Ferramentas - Eclipse (IDE) ● Prós ○ Ambiente de dev completo ○ Amplamente conhecido ○ Deploy fácil via plugin ● Cons ○ Precisa instalar localmente
  12. 12. 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/
  13. 13. Mão na massa ● Antes de começar, instale/atualize seu RHC: ○ Linux/Mac $ gem install rhc $ gem update rhc ○ Windows https://github.com/getupcloud/openshift-rhc-installer/releases
  14. 14. Criar a aplicação Toda 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
  15. 15. 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.
  16. 16. 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
  17. 17. Flask! “Talk is cheap. Show me the code” - Linus from flask import Flask app = 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/
  18. 18. Nossa aplicação Flask Usando um quickstart reutilizamos código https://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
  19. 19. 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', 'admin@example.com') >>> guest = User('guest', 'guest@example.com') >>> db.session.add(admin) >>> db.session.add(guest) >>> db.session.commit() SSH no gear Ativando virtualenv Populando a base
  20. 20. Inicializando o BD Listar 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=coderstv@getupcloud.com
  21. 21. 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

×