Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Escalando aplicação Python usando Getup OpenShift

Escalando aplicação Python usando Getup OpenShift

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

Avatar for Getup Cloud

Getup Cloud

October 08, 2013
Tweet

More Decks by Getup Cloud

Other Decks in Programming

Transcript

  1. Criando e escalando uma aplicação Python/Flask + MySQL Mateus Caruccio

    - CEO [email protected] @mateuscaruccio Assista o video em http://goo.gl/wYylfj
  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. 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. 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. 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. 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. 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
  8. Ferramentas - Console Web • Prós ◦ Fácil ◦ Rápido

    ◦ Next -> Next -> Finish • Cons ◦ Menor flexibilidade https://broker.getupcoud.com
  9. 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]
  10. Ferramentas - Eclipse (IDE) • Prós ◦ Ambiente de dev

    completo ◦ Amplamente conhecido ◦ Deploy fácil via plugin • Cons ◦ Precisa instalar localmente
  11. 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/
  12. 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
  13. 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
  14. 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.
  15. 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
  16. 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/
  17. 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
  18. 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 Ativando virtualenv Populando a base
  19. 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 protected]
  20. 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