Data intiPekerjaan latar belakang

Antrean Pekerjaan

Antrean FIFO yang tidak kehilangan pekerjaan saat worker mati, dengan produsen dan konsumen berjalan secara paralel.

LPUSH/detik dengan pipeline, terukur
31.6M
pekerjaan hilang saat crash
0
polling
0
Langkah 1 dari 5
Produsen mendorong pekerjaan

Layanan mana pun menambahkan pekerjaan tanpa menunggu konsumen.

Sesi contohplaying
# Produsen mendorong pekerjaan
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

Panduan beranimasi dengan perintah HotKV yang sebenarnya dan balasan contoh. Klik langkah mana pun untuk melompat ke sana. Perintah dan balasan tetap dalam bahasa Inggris, persis seperti yang Anda ketik dan lihat di HotKV.

Masalahnya

Pekerjaan latar belakang seperti email, pengubahan ukuran gambar, dan webhook memerlukan antrean antara kode yang membuatnya dan kode yang mengerjakannya. Antrean yang kehilangan pekerjaan saat worker crash di tengah tugas lebih buruk daripada tanpa antrean, karena tidak ada yang menyadari pekerjaan itu hilang.

Cara HotKV menanganinya

List memberi Anda antrean FIFO sederhana. BLMOVE memindahkan setiap pekerjaan ke list pemrosesan saat diserahkan kepada worker, sehingga pekerjaan yang sedang berjalan selalu tersimpan di suatu tempat jika worker itu menghilang. Produsen dan konsumen dilayani oleh worker thread paralel.

Langkah demi langkah

Apa yang terjadi, perintah demi perintah

  1. 01

    Produsen mendorong pekerjaan

    Layanan mana pun menambahkan pekerjaan tanpa menunggu konsumen.

    LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  2. 02

    Worker mengklaim pekerjaan dengan aman

    BLMOVE memblokir sampai pekerjaan tersedia, lalu memindahkannya ke list pemrosesan dalam satu langkah.

    BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0
  3. 03

    Konfirmasi saat selesai

    Email sudah terkirim. Pekerjaan dihapus dari list pemrosesan.

    LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  4. 04

    Sebuah worker crash

    Worker 2 mati di tengah pekerjaan. Pekerjaannya masih di list pemrosesan, tidak hilang.

    LRANGE queue:emails:processing 0 -1
  5. 05

    Antrekan ulang dan lanjutkan

    Sebuah monitor memindahkan pekerjaan yang ditinggalkan kembali ke antrean dan worker lain mengambilnya.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Di mana ini cocok

Skenario dunia nyata

Email dan SMS transaksional

Pesan pendaftaran, tanda terima, dan reset diantrekan oleh aplikasi web dan dikirim oleh kumpulan worker.

Pemrosesan media

Unggahan diantrekan untuk pembuatan thumbnail dan transcoding, dan transcoder yang crash tidak pernah menjatuhkan file.

Pengiriman webhook

Webhook keluar diantrekan dan dicoba ulang tanpa memblokir permintaan yang memicunya.

Bawaan

Yang Anda dapatkan

FIFO dengan pembacaan memblokir

LPUSH dengan BRPOP, dan worker tidur sampai pekerjaan tiba.

LPUSHBRPOP

Tidak ada pekerjaan hilang

BLMOVE menyerahkan setiap pekerjaan ke list pemrosesan secara atomik.

BLMOVELREM

Produsen dan konsumen paralel

Produsen dan konsumen dilayani oleh worker thread paralel.

Perlu lebih?

Untuk acknowledgement, consumer group, dan pemutaran ulang, gunakan stream.

XADDXREADGROUP

Pertanyaan umum

Apa yang terjadi pada pekerjaan jika worker crash?

Jika Anda mengklaim pekerjaan dengan BLMOVE, pekerjaan berada di list pemrosesan. Sebuah monitor dapat memindahkan apa pun yang berada di sana terlalu lama kembali ke antrean.

Apakah worker harus polling?

Tidak. BRPOP dan BLMOVE memblokir sampai pekerjaan tiba, dengan timeout opsional.

List atau stream?

List adalah antrean paling sederhana. Stream menambahkan consumer group, acknowledgement per pesan, dan riwayat. Lihat kasus penggunaan streaming peristiwa.

Kasus penggunaan terkait

Coba pada beban kerja Anda sendiri

HotKV berbicara protokol Redis, jadi Anda dapat mengarahkan klien yang sudah ada ke HotKV dan menjalankan perintah yang sama.