Hatchet, platform orkestrasi tugas latar belakang yang dibangun di atas PostgreSQL, telah secara resmi meluncurkan rilis v1-nya. Platform ini bertujuan untuk menyelesaikan tantangan umum yang dihadapi pengembang ketika mengelola tugas latar belakang dalam skala besar, menawarkan alternatif untuk sistem antrean tugas tradisional seperti Celery atau BullMQ, serta orkestrator alur kerja seperti Temporal dan Airflow.
Tugas latar belakang sangat penting untuk aplikasi modern, membantu mengalihkan beban kerja dari server web dan memastikan operasi penting selesai bahkan selama lonjakan lalu lintas. Meskipun banyak pengembang memulai dengan antrean sederhana berbasis Redis atau RabbitMQ, solusi ini sering menjadi sulit untuk di-debug dan dipantau seiring aplikasi bertambah kompleks.
Arsitektur Berbasis PostgreSQL dengan Skalabilitas Mengesankan
Tim Hatchet melakukan perubahan arsitektur yang signifikan dalam rilis v1 mereka, beralih dari pola FOR UPDATE SKIP LOCKED tradisional yang biasa digunakan dalam antrean berbasis PostgreSQL. Menurut para pengembang, pendekatan ini tidak dapat diskalakan dengan baik di atas 25.000 kueri per detik, terutama ketika berhadapan dengan banyak pekerja dan backlog tugas yang besar.
Awalnya kami menggabungkan beberapa tabel alur kerja dengan tabel pemantauan kami... Tabel ini menggunakan UUID sebagai kunci utama, karena kami menginginkan UUID melalui API daripada ID yang bertambah secara otomatis. UUID menyebabkan beberapa masalah di kemudian hari ketika mencoba menghapus batch data dan mencegah pembengkakan indeks.
Tim ini mengimplementasikan beberapa optimasi, termasuk memisahkan tabel pemantauan dari tabel antrean untuk mencegah masalah seperti pembengkakan tabel, mem-buffer pembacaan dan penulisan untuk mengurangi beban database, dan mengubah tabel volume tinggi untuk menggunakan kolom identitas daripada UUID. Perubahan ini telah secara signifikan meningkatkan kinerja dan stabilitas di bawah beban berat.
Model Eksekusi Tugas yang Fleksibel
Hatchet mendukung beberapa pola eksekusi tugas, memenuhi kebutuhan pengembang yang berbeda. Platform ini menawarkan antrean tugas tradisional untuk pekerjaan latar belakang sederhana dan orkestrasi alur kerja yang lebih kompleks melalui grafik asiklik terarah (DAG) dan pola eksekusi yang tahan lama.
Untuk pengembang yang berasal dari sistem seperti Celery atau SQS, Hatchet menyediakan fungsionalitas antrean yang familiar dengan pemantauan yang ditingkatkan. Untuk mereka yang membutuhkan alur kerja yang lebih kompleks, platform ini mendukung pembuatan turunan dan pola eksekusi tahan lama yang mirip dengan alur kerja dan aktivitas Temporal.
Salah satu pengguna menyoroti dukungan Pydantic kelas satu dalam SDK v1 sebagai keuntungan utama bagi pengembang yang beralih dari Celery, mencatat bahwa keamanan tipe secara signifikan meningkatkan pengalaman pengembang. Kombinasi SDK Python dan TypeScript juga memungkinkan fleksibilitas yang lebih besar dalam implementasi, dengan dukungan Go juga tersedia.
Fitur Utama Hatchet
- Antrian: Antrian tugas yang tahan lama untuk eksekusi tugas yang andal
- Dukungan Bahasa: SDK untuk Python, TypeScript, dan Go
- Orkestrasi Tugas: Dukungan untuk DAG (Directed Acyclic Graphs)
- Kontrol Aliran: Logika kondisional dan percabangan
- Penjadwalan: Eksekusi tugas berbasis waktu
- Manajemen Konkurensi: Kontrol konkurensi dinamis
- Pembatasan Rate: Kontrol tingkat eksekusi tugas
- Pemantauan: Dashboard web real-time
- Opsi Penerapan: Layanan cloud atau self-hosted
Metode Penerapan
- Hatchet Cloud: Layanan terkelola
- Hatchet Lite: Opsi self-hosted yang terintegrasi
- Docker Compose: Penerapan multi-kontainer
- Kubernetes: Tersedia Helm chart
Poin Perbandingan
- vs Temporal: Lebih fokus pada pengembang aplikasi dibandingkan orkestrasi alur kerja
- vs Antrian Tugas (BullMQ, Celery): Pemantauan lebih baik, eksekusi lebih tahan lama
- vs Platform DAG (Airflow, Prefect, Dagster): Lebih fokus pada kebutuhan aplikasi daripada alur data
- vs Cloud Tasks: Kemampuan orkestrasi lebih kompleks tetapi dukungan webhook serupa
Pengalaman Pengembang dan Pemantauan
Hatchet memberikan penekanan signifikan pada observabilitas dan pengalaman pengembang. Tidak seperti banyak sistem antrean tugas di mana pemantauan menjadi menantang pada skala besar, Hatchet memisahkan infrastruktur pemantauannya dari tabel antrean, memungkinkan pengembang untuk menanyakan baik antrean aktif maupun data tugas historis tanpa penurunan kinerja.
Platform ini mencakup dasbor web real-time yang menawarkan visibilitas yang lebih baik dibandingkan dengan alat seperti Flower milik Celery. Fokus pada pemantauan ini mengatasi masalah umum yang diangkat oleh pengguna - memahami apa yang terjadi ketika tugas gagal dan cara men-debug masalah secara efektif.
Beberapa pengguna telah mencatat adanya ketidaksempurnaan dalam dasbor dan dokumentasi, meskipun tim tampaknya responsif terhadap umpan balik. Pemisahan pemantauan dari tabel antrean juga memungkinkan opsi untuk menjalankan pemantauan pada database yang benar-benar terpisah jika diperlukan, memberikan fleksibilitas tambahan untuk deployment skala tinggi.
Opsi Deployment dan Integrasi
Hatchet tersedia baik sebagai layanan cloud maupun sebagai solusi yang dihosting sendiri. Untuk self-hosting, tim menyediakan opsi hatchet-lite yang menggabungkan semua layanan internal, serta opsi deployment yang lebih kompleks melalui Docker Compose dan Helm charts untuk Kubernetes.
Platform ini juga mendukung webhook workers, memungkinkan tugas untuk memicu endpoint HTTP daripada memerlukan pekerja jangka panjang khusus. Pendekatan ini memberikan fleksibilitas yang mirip dengan layanan seperti Google Cloud Tasks, meskipun beberapa pengguna mencatat bahwa fungsionalitas ini tampaknya kurang menonjol dalam dokumentasi dibandingkan fitur lainnya.
Sementara fokus utama Hatchet adalah pada pengembang Python, TypeScript, dan Go, tim ini melacak permintaan untuk SDK bahasa tambahan. Arsitektur platform yang menggunakan gRPC untuk komunikasi pekerja mungkin menghadirkan tantangan untuk integrasi API langsung tanpa menggunakan SDK resmi.
Karena manajemen tugas latar belakang terus menjadi komponen penting dari arsitektur aplikasi modern, pendekatan Hatchet yang menggabungkan keandalan PostgreSQL dengan fitur orkestrasi canggih memposisikannya sebagai opsi menarik bagi tim pengembangan yang ingin menskalakan kemampuan pemrosesan latar belakang mereka.
Referensi: Run Background Tasks at Scale