Install Celery, Flower & Redis di Ubuntu 18.04
Install Celery untuk asynchronous job queue menggunakan Redis sebagai broker dan monitor job dengan Flower
Celery merupakan asynchronous job queue secara distributed message passing yang memungkinkan sebuah job dapat dieksesusi ditempat dan waktu berbeda dalam konteks distributed computing. Fokus utamanya adalah untuk real-time operation, meskipun demikian Celery mampu menjalankan scheduled operation. Exceution unit pada Celery disebut dengan task, yang akan dijalankan secara councurrent pada satu atau lebih worker servers menggunakan multiprocessing, Eventlet, atau gevent.
Flower merupakan web based monitoring dan administration untuk Celery clusters. Dalam tool ini kita dapat melakukan real-time monitoring, remote control dan broker monitoring.
Broker yang dapat digunakan oleh Celery diantaranya Redis, RabbitMQ, Amazon SQS, dll. Pada kesempatan kali ini kita akan gunakan Redis. Redis merupakan in-memory data structure store, dapat digunakan sebagai database, cache dan juga message broker. Redis tidak menyimpan data secara presistent, data hanya di-dump di memory database yang membuatnya sangat cocok untuk real-time data processing.
Berikut merupakan illustrasi Celery saat menggunakan Redis sebagai message broker untuk Flask web app.
Install Celery
untuk install celery, dapat dilakukan melalui pip,
$ sudo pip install celery
Setelah berhasil diinstal, selanjutnya kita akan install Redis server,
$ sudo apt install redis-server
Selanjutnya kita install celery redis extension,
$ sudo pip install celery['redis']
Setelah itu kita lanjutkan dengan install Flower,
$ sudo pip install flower
Testing
Selanjutnya kita akan buat sebuah task untuk dijalankan oleh Celery worker. Berikut adalam contoh implementasi Celery dengan Flask :
Struktur direktori :
app.py
init/
|_ make_celery.py
Buat sebuah file python dalam folder init
dengan nama make_celery.py
dan masukan program berikut,
Program tersebut akan membuat sebuah celery
object yang dapat dipanggil dari aplikasi lain.
Selanjutnya buat file python lainya, diluar folder init
dengan nama app.py
, dan masukan program berikut,
pada blok program diatas, kita meng-import object celery dari file make_celery.py
. Selanjutnya dengan menggunakan decorator @celery.task()
untuk menambahkan sebuah task dengan nama add_together
yang didalamnya hanya menjalankan operasi penjumlahan sederhana.
Setelah itu kita dapat panggil task tersebut di background,
result = add_together.delay(23, 42)
result.wait() # 65
untuk saat ini saya hanya jalankan melalui python mode REPL,
task tersebut, tidak akan diesksekusi sebelum worker dijalankan. Karena kita membuat object celery
pada script app.py
, maka untuk menjalankan celery worker lakukan dengan cara berikut,
celery -A app.celery worker
log saat Celery worker dijalankan,
jika kalian mendapati error,
hal ini disebabkan karena Celery tidak bisa terhubung ke Redis, periksa apakah Redis server yang sebelumnya kita install berjalan atau tidak, dengan cara berikut,
sudo systemctl status redis
jika terlihat normal (running), periksa apakah port yang digunakan sesuai dengan yang kita define diatas. Default port pada Redis adalah 6379, dapat dicek pada config Redis dengancara berikut,
sudo nano /etc/redis/redis.conf
Monitoring
Untuk melihat Flower web ui, jalankan command berikut pada terminal baru,
flower -A proj --port=5555
pada browser buka http://loaclhost:5555
Detail worker dengan status online
,
Selanjutnya msuk ke menu Task, untuk melihat log task yang dijalankan,
Detail task yang dijalankan dengan success
,
Nah sekian untuk install Celery, Flower dengan Redis, selanjutnya kita akan kupas lebih dalam pemanfaatan Celery untuk long running job seperti melakukan proses ML Workflow.
Sekian, terima kasih.
Sumber :
- https://en.wikipedia.org/wiki/Message_passing
- http://www.celeryproject.org/
- https://flower.readthedocs.io/en/latest/
- https://docs.celeryproject.org/en/latest/getting-started/brokers/
- https://redis.io/
- https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-redis-on-ubuntu-18-04
- https://flower.readthedocs.io/en/latest/install.html
- https://flask.palletsprojects.com/en/1.0.x/patterns/celery/