O Heroku permite implantações baseadas em contêineres e o [Iron’s Worker] (( https://iron.io/worker?utm_source=coderwall ) torna a execução e o escalonamento de trabalhos em segundo plano extremamente fáceis. Eles funcionam muito bem lado a lado. O Heroku torna extremamente fácil coloque um aplicativo em funcionamento e o Iron brilha na escalabilidade das cargas de trabalho. Implantaremos um aplicativo Python simples no Heroku e, em seguida, escreveremos um Iron Worker para fazer algum trabalho em segundo plano
Objetivos
- Executar um aplicativo da web encaixado no Heroku
- Crie um novo projeto no Iron que você usará para este aplicativo
- Crie um trabalhador em segundo plano usando Iron Worker
- Dispense seu funcionário por meio de seu aplicativo da web
Clone um projeto “Hello World” simples, carregue-o no registro de contêiner do Heroku e implante-o:
> git clone https://github.com/heroku/alpinehelloworld.git
> cd alpinehelloworld
> heroku create
> heroku plugins:install heroku-container-registry
> heroku container:login
> heroku container:push web
> heroku open
Você deverá ver seu navegador aberto com o texto “hello world”. Isso significa que seu aplicativo está funcionando corretamente no Heroku.
Agora vamos criar nosso trabalhador de ferro
Crie um arquivo chamado “worker.py” (na realidade, provavelmente seria nomeado algo como email worker.py ou image processor.py ou o que quer que o worker em segundo plano realmente faça). Vamos imprimir “Hello from IronWorker”.
> cd webapp
> echo "print 'Hello from IronWorker'" > worker.py
Agora você precisa pegar suas credenciais do Iron
Faça login em sua conta em https://www.iron.io , crie seu projeto e, em seguida, baixe o arquivo iron.json correspondente associado ao seu novo projeto. Copie-o para a raiz do seu aplicativo.
> cp iron.json webapp/
Você pode testar se o seu trabalhador é executado corretamente, executando-o localmente
> cd ..
> docker run --rm -v "$PWD":/worker -w /worker iron/python:2 python worker.py
Agora você precisa compactar seu worker e seu arquivo de configuração e enviá-los para o Iron
> cd webapp
> zip -r worker.zip worker.py iron.json
> iron worker upload --zip worker.zip --name worker iron/python:2 python worker.py
Depois de fazer o upload para o Iron, você pode disparar os workers na linha de comando
> iron worker queue --wait worker
… Ou por meio de seu aplicativo usando uma biblioteca cliente. Vamos modificar nosso aplicativo para que ele inicie um trabalho em segundo plano no Iron assim que alguém visitar seu site. A primeira coisa que precisamos fazer é adicionar a biblioteca-cliente python iron-worker ao arquivo requirements.txt. Isso permite que o pip saiba que essa é uma dependência necessária.
> cd webapp
> echo "iron-worker" >> requirements.txt
Agora vamos modificar o arquivo app.py para incluir o código abaixo e disparar nosso novo trabalhador no Iron
import os
from flask import Flask
from iron_worker import *
app = Flask(__name__)
@app.route('/')
def hello():
task = IronWorker()
task.queue(code_name="worker")
return 'Hello world!'
if __name__ == '__main__':
app.run(host='0.0.0.0')
É isso aí. Vamos implantar o código mais recente no Heroku e ver como as coisas vão
> heroku container:push web
> heroku open
Você deve ver uma mensagem hello world em seu navegador e, se visitar o painel de seus projetos no Iron, verá que sua tarefa já foi executada e gerou a mensagem hello do trabalhador lá também.
Conclusão
O Iron possui bibliotecas de clientes na maioria das linguagens e também uma API REST completa. Ele também executa seu próprio algoritmo de escalonamento automático, portanto, se você precisava lidar com 1 tarefa por minuto e 1000 no minuto seguinte, isso não seria um problema. Ele também suporta instalações em diferentes fornecedores de nuvem e instalações no local, para que possa se mover com você e sua empresa.