11 poin oleh GN⁺ 2024-03-09 | 1 komentar | Bagikan ke WhatsApp

Antrean tugas terdistribusi yang toleran terhadap kegagalan

  • Hatchet memungkinkan perancangan beban kerja yang tahan lama untuk menggantikan antrean atau sistem pub/sub yang sulit dikelola, dengan kemampuan pulih dari kegagalan serta menyelesaikan masalah seperti konkurensi, keadilan, dan pembatasan laju.
  • Alih-alih mengelola sendiri antrean tugas atau sistem pub/sub, Anda dapat menggunakan Hatchet untuk mendistribusikan fungsi ke serangkaian worker dengan konfigurasi atau infrastruktur yang minimal.

Kelebihan Hatchet

  • Penjadwalan latensi ultra-rendah dan throughput tinggi
    • Hatchet dibangun di atas antrean berlatensi rendah dengan waktu mulai rata-rata 25ms, sehingga menghadirkan keseimbangan yang sangat baik antara kemampuan interaksi real-time dan keandalan yang dibutuhkan untuk pekerjaan mission-critical.
  • Konkurensi, keadilan, pembatasan laju
    • Strategi seperti FIFO, LIFO, Round Robin, dan Priority Queues diimplementasikan sebagai strategi bawaan Hatchet untuk mengatasi masalah penskalaan umum dengan konfigurasi minimal.
  • Ketahanan yang dirancang sejak awal
    • Dengan kebijakan retry kustom dan penanganan error yang terintegrasi, Hatchet memastikan tugas dapat dipulihkan dengan cepat dari kegagalan sementara.

Visibilitas dan kontrol yang ditingkatkan

  • Observabilitas
    • Semua eksekusi dapat dicari sepenuhnya, sehingga masalah dapat diidentifikasi dengan cepat.
  • Eksekusi tahan lama yang (praktis)
    • Anda dapat memutar ulang event dan memulai ulang eksekusi secara manual dari tahap tertentu dalam workflow.
  • Cron
    • Anda dapat menjadwalkan eksekusi fungsi secara berulang.
  • Penjadwalan sekali jalan
    • Anda dapat menjadwalkan eksekusi fungsi pada waktu dan tanggal tertentu.
  • Perlindungan terhadap lonjakan
    • Mengurangi lonjakan traffic dan hanya menjalankan beban yang dapat ditangani sistem.
  • Streaming progresif
    • Anda dapat berlangganan pembaruan sesuai progres worker latar belakang.

Contoh use case

  • Keadilan untuk Generative AI
    • Hatchet dapat digunakan untuk mendistribusikan permintaan ke worker secara adil agar pengguna yang sangat sibuk tidak membebani sistem secara berlebihan.
  • Pemrosesan batch untuk pengindeksan dokumen
    • Hatchet dapat menangani pemrosesan batch skala besar untuk dokumen, gambar, dan data lainnya, serta melanjutkan pekerjaan dari titik tengah saat terjadi kegagalan.
  • Orkestrasi workflow untuk sistem multimodal
    • Hatchet dapat mengoordinasikan input dan output multimodal, serta menangani eksekusi bergaya DAG secara menyeluruh.
  • Ketepatan untuk pemrosesan berbasis event
    • Dapat merespons event eksternal maupun event internal sistem, serta secara otomatis memutar ulang event.

Memulai dengan cepat

  • Hatchet mendukung SDK open source untuk Python, Typescript, dan Go.
  • Untuk memulai, Anda dapat merujuk ke dokumentasi Hatchet atau melihat repositori quickstart.

Repositori SDK

  • Hatchet pada dasarnya menyediakan SDK Go.
  • SDK Typescript juga tersedia.
  • Jika Anda mengalami masalah terkait SDK, Anda dapat mengajukan issue di repositori terkait.

Apakah ada versi cloud terkelola dari Hatchet?

  • Ya, selama periode beta mereka menyediakan versi cloud untuk beberapa perusahaan yang membantu membangun dan membentuk produk.

Apakah ada versi self-hosted dari Hatchet?

  • Ya, petunjuk untuk container Docker open source untuk self-hosting dapat ditemukan di dokumentasi.

Bagaimana perbandingannya dengan alternatif lain? (Celery, BullMQ)

  • Mengapa membuat antrean terkelola lain?
    • Mereka ingin menghadirkan manfaat antrean transaksional secara menyeluruh, terutama untuk eksekusi bergaya DAG, dan sangat meyakini bahwa Postgres dapat menggantikan sebagian besar use case antrean.
    • Banyak antrean dibangun di atas Redis, dan jika tidak berhati-hati dapat terjadi kehilangan data akibat OOM, tetapi dengan menggunakan PG masalah ini dapat dihindari.

Masalah

  • Anda dapat mengirimkan bug yang ditemukan melalui issue GitHub.
  • Karena proyek ini masih berada pada tahap awal, sebaiknya hubungi mereka terlebih dahulu melalui Discord sebelum mengajukan permintaan fitur yang kompleks.

Jika ingin berkontribusi

  • Lihat dokumentasi kontribusi, dan beri tahu apa yang ingin Anda kerjakan di channel #contributing di Discord agar lebih mudah membentuk arah proyek dan berkolaborasi.

Opini GN⁺

  • Hatchet tampak sebagai solusi yang mengurangi kompleksitas pengelolaan antrean tugas dalam sistem terdistribusi serta menyediakan high availability dan toleransi terhadap kegagalan, khususnya berguna untuk pemrosesan data skala besar dan layanan real-time.
  • Dibandingkan sistem antrean lain yang digunakan di pasar saat ini, stabilitas dan skalabilitas yang diperoleh dengan menggunakan Postgres merupakan keunggulan yang patut diperhatikan.
  • Hal-hal yang perlu dipertimbangkan saat mengadopsi Hatchet mencakup kompatibilitas dengan infrastruktur yang ada, migrasi data, dan kapabilitas teknis tim.
  • Fitur visibilitas dan kontrol tingkat lanjut yang disediakan Hatchet dapat mempermudah pemantauan performa sistem dan pemecahan masalah, sehingga mengurangi beban kerja developer dan tim operasional.
  • Karena Hatchet masih berada pada tahap beta, diperlukan verifikasi yang memadai dari sisi stabilitas dan fungsionalitas, serta pengujian yang cukup sebelum diterapkan pada sistem berskala besar.

1 komentar

 
GN⁺ 2024-03-09
Komentar Hacker News
  • Seorang pengguna mengatakan bahwa selama 3 tahun ia mencari produk dengan antrean pekerjaan berbasis Postgres, worker yang bekerja dalam berbagai bahasa, serta kemampuan observabilitas bawaan yang memadai. Pengguna ini memeriksa pasar setiap 6 bulan dan mengevaluasi alternatif, tetapi selalu kecewa. Namun, ia menyebut lebih memilih antrean berbasis Postgres karena ingin menghindari dependensi tambahan seperti RabbitMQ. Saat ini ia menggunakan graphile-worker, tetapi mengatakan masih ada kebutuhan yang belum terpenuhi.
  • Pengguna lain menunjukkan bahwa produk ini didanai oleh Y Combinator, dan bertanya-tanya apakah perusahaan ini akan mengikuti model "open core" atau mencari cara monetisasi lain.
  • Pengguna lain lagi menyebut bahwa ia menyukai fitur push subscription pada sistem pub/sub, dan menjelaskan bahwa misalnya di GCP pub/sub, dimungkinkan memiliki subscriber yang mendorong ke endpoint HTTP alih-alih menarik event dari antrean. Pendekatan ini memiliki keunggulan karena dapat menggunakan runtime seperti Cloud Run atau Lambda untuk melakukan scaling berdasarkan permintaan HTTP dan scale to zero. Ia mengatakan pengaturan auto-scaling untuk worker bisa lebih rumit, dan meskipun auto-scaling KEDA dapat disiapkan di RabbitMQ berdasarkan metrik kedalaman antrean, hal itu menambah kompleksitas. Pengguna tersebut bertanya apakah ada rencana untuk mendukung model di mana daemon yang mempertahankan koneksi HTTP dapat mendorong pekerjaan.
  • Seorang pengguna meminta penjelasan mengapa semua fungsi menerima context sebagai argumen. Ia merasa hal ini membuat banyak boilerplate harus ditulis saat membuat fungsi.
  • Pengguna lain mengatakan akan sangat bagus jika ide ini sudah ada saat ia mengimplementasikan sistem pemrosesan DAG terdistribusi, dan ia ingin mencobanya.
  • Seorang pengguna bertanya apakah harga layanan cloud terkelola dipublikasikan, dan apakah ada rencana membuat operator Kubernetes untuk opsi self-hosting. Ia juga mengungkapkan kekhawatiran bahwa dengan menggunakan lisensi MIT, Amazon pada akhirnya bisa membuat layanan Amazon Hatchet.
  • Pengguna lain mengatakan bahwa ia sedang menulis antrean pekerjaan untuk job runner berbasis DAG, dan ingin agar graf pekerjaan dapat dijalankan menggunakan PostgreSQL, SQLite, in-memory, dan lainnya tanpa mempertimbangkan retry, timeout, resource yang diserialkan, dan sebagainya. Pengguna ini tertarik pada pendekatan tersebut.
  • Seorang pengguna mengatakan bahwa ia membutuhkan antrean pekerjaan di mana klien (browser web) dapat memantau progres pekerjaan hingga selesai. Ia menyukai kesederhanaan dan aksesibilitas Deno Queue, tetapi harus mengimplementasikan sendiri cara agar klien dapat berlangganan status pekerjaan. Ia bertanya-tanya apakah hal itu bisa dilakukan berbasis Postgres, dan mengonfirmasi melalui tautan dokumentasi bahwa hal itu memungkinkan.
  • Pengguna lain menyebut bahwa di tempat kerja sebelumnya ia menghadapi masalah harus menjadwalkan pekerjaan dalam jumlah tak terbatas. Misalnya, ketika pasien membuat janji 6 bulan ke depan, perlu menjadwalkan serangkaian notifikasi pengingat janji selama periode tersebut. Pengguna ini awalnya memasukkan record ke antrean database dan melakukan polling setiap beberapa detik, tetapi biaya IO akibat polling tidak ideal sehingga ia ingin menyelesaikannya tanpa memakai sistem terdistribusi. Ia lalu beralih ke Redis, tetapi menghadapi masalah seperti kompleksitas dalam menangani beberapa dispatcher, masalah OOM, dan perlunya menjalankan job tambahan untuk memindahkan pekerjaan ke antrean langsung. Ia sempat mempertimbangkan beralih ke PG dan menggunakan SKIP LOCKED, tetapi kemudian pindah kerja. Ia bertanya-tanya apakah Hatchet cocok untuk use case seperti ini.
  • Terakhir, seorang pengguna bertanya bagaimana perbandingan Hatchet dengan Temporal/Cadence/Conductor, dan apakah Hatchet juga mendukung durable execution.