I. Pendahuluan
Sistem antrian tugas adalah infrastruktur yang digunakan untuk menangani dan mengeksekusi tugas-tugas secara terstruktur, terutama dalam konteks aplikasi web dan layanan berbasis mikro. Ini memungkinkan pemisahan antara pemrosesan tugas secara langsung oleh aplikasi dan pemrosesan tugas di latar belakang, meningkatkan kinerja dan skalabilitas aplikasi.
Celery adalah pustaka Python yang populer untuk menangani antrian tugas. Ini memungkinkan Anda untuk membuat tugas-tugas yang terpisah dari aplikasi utama dan menjalankannya secara terpisah dalam proses yang terpisah. Celery juga menyediakan dukungan untuk berbagai fitur seperti penjadwalan tugas, pemantauan, dan penanganan kesalahan, menjadikannya solusi yang kuat untuk membangun sistem antrian tugas yang terdistribusi.
Daftar Isi
- I. Pendahuluan
- II. Pengaturan Lingkungan Pengembangan
- III. Membuat dan Mengelola Tugas Celery
- IV. Penggunaan Tugas Berjadwal
- V. Integrasi dengan Django
- VI. Pengelolaan dan Pemantauan Sistem Antrian Tugas
- VII. Penanganan Kasus Pengguna
Tutorial ini akan membahas langkah-langkah praktis untuk menggunakan Celery dalam aplikasi web Django untuk membangun sistem antrian tugas yang terdistribusi. Ini akan mencakup pengaturan awal Celery, pembuatan dan pengelolaan tugas-tugas, integrasi dengan Django, pengelolaan sistem antrian tugas, dan penanganan kasus pengguna umum. Dengan mengikuti tutorial ini, Anda akan mendapatkan pemahaman yang komprehensif tentang cara menggunakan Celery untuk meningkatkan kinerja dan skalabilitas aplikasi web Anda.
II. Pengaturan Lingkungan Pengembangan
Dalam bagian ini, kita akan membahas langkah-langkah yang diperlukan untuk menyiapkan lingkungan pengembangan untuk menggunakan Celery dalam aplikasi web Django.
A. Instalasi Django dan Celery
Untuk memulai, pastikan Anda memiliki Django dan Celery terinstal dalam lingkungan pengembangan Anda. Anda dapat menginstalnya menggunakan pip, manajer paket Python.
pip install django celery
B. Konfigurasi Proyek Django untuk Menggunakan Celery
- Tambahkan Celery ke INSTALLED_APPS: Buka file
settings.py
proyek Django Anda dan tambahkan'celery'
ke dalamINSTALLED_APPS
.
INSTALLED_APPS = [
...
'celery',
]
Code language: JavaScript (javascript)
- Konfigurasi Broker Pesan (Message Broker): Celery membutuhkan broker pesan untuk mengirim dan menerima pesan antar proses. Anda dapat menggunakan RabbitMQ, Redis, atau database seperti SQLAlchemy sebagai broker pesan. Konfigurasikan broker pesan di dalam
settings.py
.
CELERY_BROKER_URL = 'redis://localhost:6379/0'
Code language: JavaScript (javascript)
- Konfigurasi Worker dan Beat (Jadwal): Worker Celery bertanggung jawab untuk mengeksekusi tugas-tugas yang dikirimkan ke antrian, sedangkan Beat adalah penjadwal tugas untuk menjalankan tugas berjadwal. Konfigurasikan kedua komponen ini di dalam
settings.py
.
CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
Code language: JavaScript (javascript)
C. Membuat File Konfigurasi Celery
Buat file konfigurasi Celery di dalam direktori proyek Anda, misalnya celery.py
. File ini akan digunakan untuk mengonfigurasi aplikasi Celery Anda.
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
# Set nama default untuk modul setting Django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nama_proyek.settings')
app = Celery('nama_proyek')
# Konfigurasi Celery menggunakan file settings Django
app.config_from_object('django.conf:settings', namespace='CELERY')
# Auto-discover tugas-tugas dari semua aplikasi Django yang terinstal
app.autodiscover_tasks()
Dengan mengikuti langkah-langkah di atas, Anda akan menyiapkan lingkungan pengembangan Anda untuk menggunakan Celery dalam aplikasi web Django. Pastikan untuk mengonfigurasi setiap langkah dengan cermat sesuai kebutuhan proyek Anda.
III. Membuat dan Mengelola Tugas Celery
Dalam bagian ini, kita akan membahas langkah-langkah untuk membuat dan mengelola tugas-tugas Celery dalam aplikasi web Django.
A. Mendefinisikan Tugas Celery
- Membuat Tugas Celery: Buat fungsi Python yang akan dijalankan sebagai tugas Celery. Tugas ini harus berada di dalam modul yang dapat diakses oleh aplikasi Celery.
from celery import shared_task
@shared_task
def tambah(x, y):
return x + y
Code language: JavaScript (javascript)
B. Membuat dan Menjalankan Tugas Celery
- Mengirim Tugas ke Antrian: Gunakan fungsi
.delay()
untuk mengirim tugas ke antrian Celery.
from .tasks import tambah
result = tambah.delay(4, 5)
Code language: JavaScript (javascript)
- Mengambil Hasil Tugas: Anda dapat menunggu hasil tugas menggunakan metode
.get()
atau menangani hasilnya secara asinkron.
print(result.get())
Code language: CSS (css)
C. Mengelola Status Tugas Celery
- Memantau Status Tugas: Celery menyediakan berbagai cara untuk memantau status tugas, termasuk menggunakan metode
.ready()
untuk memeriksa apakah tugas sudah selesai.
if result.ready():
print("Tugas selesai dengan hasil:", result.get())
Code language: CSS (css)
- Menghapus Tugas dari Antrian: Anda juga dapat menghapus tugas dari antrian jika diperlukan menggunakan metode
.forget()
.
result.forget()
Code language: CSS (css)
Dengan langkah-langkah di atas, Anda akan dapat membuat dan mengelola tugas-tugas Celery dalam aplikasi web Django. Pastikan untuk memeriksa dokumentasi Celery untuk informasi lebih lanjut tentang berbagai fitur dan opsi yang tersedia untuk mengelola tugas-tugas Celery Anda.
IV. Penggunaan Tugas Berjadwal
Dalam bagian ini, kita akan membahas penggunaan tugas berjadwal dengan Celery dalam aplikasi web Django.
A. Mengatur dan Menjalankan Tugas Celery secara Berjadwal
- Membuat Tugas Berjadwal: Tentukan tugas berjadwal dengan mendekorasi fungsi yang akan dijalankan sebagai tugas Celery dengan
@shared_task
dan@periodic_task
.
from celery.task import periodic_task
from datetime import timedelta
@periodic_task(run_every=timedelta(seconds=60))
def tugas_berjadwal():
# Logika tugas berjadwal
pass
Code language: CSS (css)
- Menjalankan Tugas Berjadwal: Pastikan Anda telah menjalankan worker Celery dan Celery Beat untuk mengeksekusi tugas-tugas berjadwal.
celery -A nama_proyek worker --beat
B. Konfigurasi Jadwal untuk Tugas Berjadwal
- Menentukan Interval Waktu: Atur interval waktu antara setiap eksekusi tugas berjadwal menggunakan argumen
run_every
dalam dekorator@periodic_task
.
@periodic_task(run_every=timedelta(hours=1))
def tugas_berjadwal():
# Tugas yang dijalankan setiap jam
pass
Code language: CSS (css)
- Penggunaan Ekspresi Cron: Anda juga dapat menggunakan ekspresi cron untuk mengatur jadwal tugas berdasarkan pola waktu yang kompleks.
@periodic_task(run_every=crontab(hour=7, minute=30, day_of_week='mon-fri'))
def tugas_berjadwal():
# Tugas yang dijadwalkan setiap hari Senin hingga Jumat pukul 07:30 pagi
pass
Code language: CSS (css)
C. Menangani Kesalahan dan Penjadwalan Ulang Tugas
- Penanganan Kesalahan: Pastikan untuk menangani kesalahan yang mungkin terjadi selama eksekusi tugas berjadwal dan melaporkannya jika diperlukan.
@periodic_task(run_every=timedelta(hours=1))
def tugas_berjadwal():
try:
# Logika tugas berjadwal
pass
except Exception as e:
logger.error(f"Kesalahan saat menjalankan tugas berjadwal: {e}")
Code language: PHP (php)
- Penjadwalan Ulang Tugas: Anda dapat menggunakan mekanisme Celery untuk menjadwal ulang tugas jika terjadi kesalahan atau penundaan.
@periodic_task(run_every=timedelta(minutes=5), max_retries=3)
def tugas_berjadwal():
try:
# Logika tugas berjadwal
pass
except Exception as e:
logger.error(f"Kesalahan saat menjalankan tugas berjadwal: {e}")
raise self.retry(exc=e, countdown=60) # Menjadwalkan ulang tugas setelah 60 detik
Code language: PHP (php)
Dengan mengikuti langkah-langkah di atas, Anda akan dapat menggunakan tugas berjadwal dengan Celery dalam aplikasi web Django Anda. Pastikan untuk memeriksa dokumentasi Celery untuk informasi lebih lanjut tentang cara mengatur dan mengelola tugas berjadwal dengan Celery Beat.
V. Integrasi dengan Django
Dalam bagian ini, kita akan membahas integrasi Celery dengan aplikasi web Django.
A. Membuat Aplikasi Django yang Menggunakan Celery
- Struktur Aplikasi Django: Buat aplikasi Django yang akan menggunakan Celery untuk tugas-tugas latar belakang.
python manage.py startapp nama_aplikasi
Code language: CSS (css)
- Konfigurasi Aplikasi Django: Tambahkan aplikasi baru ke dalam
INSTALLED_APPS
di dalam filesettings.py
.
INSTALLED_APPS = [
...
'nama_aplikasi',
]
Code language: JavaScript (javascript)
B. Mengintegrasikan Tugas Celery dengan Aplikasi Django
- Menggunakan Tugas Celery dalam Kode Django: Impor dan panggil tugas Celery di dalam kode aplikasi Django Anda.
from .tasks import tambah
def contoh_view(request):
result = tambah.delay(4, 5)
return HttpResponse(result.get())
Code language: JavaScript (javascript)
- Menangani Hasil Tugas Celery: Tangani hasil tugas Celery di dalam kode Django, misalnya, menampilkan hasilnya di dalam respons HTTP.
from django.http import HttpResponse
from .tasks import tambah
def contoh_view(request):
result = tambah.delay(4, 5)
return HttpResponse(f"Hasil tambah: {result.get()}")
Code language: JavaScript (javascript)
C. Penggunaan Celery dalam Tugas Latar Belakang untuk Django
- Pengolahan Latar Belakang: Gunakan Celery untuk menangani tugas-tugas yang memerlukan waktu pemrosesan yang lama tanpa mengganggu respons HTTP.
from celery import shared_task
@shared_task
def tugas_latar_belakang(data):
# Proses data secara latar belakang
pass
Code language: CSS (css)
- Panggilan Tugas Latar Belakang dari Kode Django: Panggil tugas latar belakang saat diperlukan dalam kode aplikasi Django Anda.
from .tasks import tugas_latar_belakang
def contoh_view(request):
tugas_latar_belakang.delay(data)
return HttpResponse("Tugas latar belakang telah dimulai")
Code language: JavaScript (javascript)
Dengan mengikuti langkah-langkah di atas, Anda dapat dengan mudah mengintegrasikan Celery dengan aplikasi web Django Anda. Pastikan untuk memastikan bahwa Anda memahami bagaimana Celery bekerja dan cara terbaik untuk menggunakan tugas-tugas latar belakang dalam aplikasi Anda.
VI. Pengelolaan dan Pemantauan Sistem Antrian Tugas
Dalam bagian ini, kita akan membahas tentang bagaimana cara mengelola dan memantau sistem antrian tugas Celery untuk aplikasi web Django.
A. Memantau Kinerja dan Status Antrian Tugas
- Pemantauan dengan Celery Flower: Gunakan Celery Flower untuk memantau status antrian tugas, kinerja worker, dan penggunaan sumber daya.
celery -A nama_proyek flower
- Pemantauan dengan Dashboard Django: Integrasikan Django dengan modul pemantauan Celery dan tampilkan status antrian tugas melalui dashboard Django.
# settings.py
CELERY_EXPORTER_ENABLED = True
Code language: PHP (php)
B. Skalabilitas dan Penanganan Beban Kerja
- Penambahan Worker: Tambahkan lebih banyak worker Celery untuk menangani beban kerja yang lebih besar.
celery -A nama_proyek worker --concurrency=4
- Skalabilitas Horizontal: Gunakan Celery untuk skalabilitas horizontal dengan menambahkan lebih banyak instans worker saat diperlukan.
docker-compose up --scale worker=4
C. Konfigurasi untuk Toleransi Kesalahan dan Redundansi
- Penanganan Kesalahan: Konfigurasikan tugas Celery untuk menangani kesalahan dengan baik dan menjadwalkan ulang tugas jika terjadi kesalahan.
@shared_task(acks_late=True)
def tugas_aneh():
# Logika tugas
pass
Code language: PHP (php)
- Redundansi Worker: Tambahkan redundansi pada worker Celery dengan menambahkan lebih banyak instance worker yang identik.
docker-compose up --scale worker=4
Dengan memantau kinerja dan status antrian tugas Celery serta mengelola skalabilitas dan toleransi kesalahan dengan baik, Anda dapat memastikan bahwa sistem antrian tugas Anda dapat menangani beban kerja yang besar dan menjaga aplikasi Anda tetap responsif dan andal.
VII. Penanganan Kasus Pengguna
Dalam bagian ini, kita akan membahas beberapa contoh kasus pengguna umum di mana penggunaan Celery dalam aplikasi web Django dapat memberikan manfaat yang signifikan.
A. Pengiriman Email Secara Asinkron
- Deskripsi: Menggunakan Celery untuk mengirim email secara asinkron, memungkinkan aplikasi untuk tetap responsif kepada pengguna tanpa harus menunggu proses pengiriman email selesai.
- Implementasi: Definisikan tugas Celery untuk mengirim email dan panggil tugas tersebut dari tampilan yang sesuai setelah pengguna menyelesaikan tindakan tertentu.
B. Proses Pembayaran dan Transaksi
- Deskripsi: Memproses transaksi pembayaran atau tugas yang memerlukan pemrosesan keuangan secara asinkron, mengurangi waktu respons aplikasi dan meningkatkan keandalan sistem.
- Implementasi: Panggil tugas Celery untuk memproses transaksi pembayaran setelah pengguna menyelesaikan pembelian atau tindakan keuangan lainnya.
C. Pembaruan dan Pengolahan Data Periodik
- Deskripsi: Melakukan pembaruan data periodik seperti pembaruan indeks pencarian atau penghitungan statistik secara otomatis menggunakan tugas berjadwal Celery.
- Implementasi: Tentukan tugas Celery yang dijadwalkan untuk dijalankan secara berkala dan tangani pembaruan atau pemrosesan data yang diperlukan di dalam tugas tersebut.
D. Pengiriman Pemberitahuan Real-Time
- Deskripsi: Menggunakan Celery untuk mengirim pemberitahuan atau notifikasi secara real-time kepada pengguna, seperti pemberitahuan push atau pemberitahuan melalui email atau pesan teks.
- Implementasi: Buat tugas Celery yang akan dipanggil saat terjadi peristiwa tertentu yang memerlukan pemberitahuan kepada pengguna, dan kirim pemberitahuan melalui saluran yang sesuai.
Dengan menggunakan Celery untuk menangani kasus pengguna seperti pengiriman email, pemrosesan transaksi, pembaruan data, dan pengiriman pemberitahuan, Anda dapat meningkatkan responsivitas dan keandalan aplikasi Anda, serta memberikan pengalaman pengguna yang lebih baik secara keseluruhan.
0 Comments