Базові даніФонова робота

Черги завдань

Черги FIFO, що не гублять завдання, коли воркер помирає, з виробниками й споживачами, що працюють паралельно.

LPUSH/с у конвеєрі, виміряно
31.6M
завдань втрачено при збої
0
опитування
0
Крок 1 з 5
Виробники додають завдання

Будь-який сервіс додає роботу, не чекаючи споживачів.

Приклад сесіїplaying
# Виробники додають завдання
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

Анімований покроковий розбір з реальними командами HotKV і прикладами відповідей. Натисніть будь-який крок, щоб перейти до нього. Команди та відповіді залишаються англійською, так само, як ви вводите й бачите їх у HotKV.

Проблема

Фонова робота, як-от листи, зміна розміру зображень і вебхуки, потребує черги між кодом, що її створює, і кодом, що її виконує. Черга, яка губить завдання, коли воркер падає посеред виконання, гірша за відсутність черги, бо ніхто не помічає, що завдання зникло.

Як це вирішує HotKV

Списки дають просту чергу FIFO. BLMOVE переносить кожне завдання до списку обробки в момент передачі воркеру, тож завдання в роботі завжди десь збережене, якщо цей воркер зникне. Виробників і споживачів обслуговують паралельні робочі потоки.

Крок за кроком

Що відбувається, команда за командою

  1. 01

    Виробники додають завдання

    Будь-який сервіс додає роботу, не чекаючи споживачів.

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

    Воркер безпечно бере завдання

    BLMOVE блокується, доки не з'явиться завдання, потім переносить його до списку обробки одним кроком.

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

    Підтвердіть після виконання

    Лист пішов. Завдання видаляється зі списку обробки.

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

    Воркер падає

    Воркер 2 помирає посеред завдання. Його завдання досі у списку обробки, не втрачене.

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

    Поверніть у чергу й продовжуйте

    Монітор повертає покинуте завдання в чергу, і його підхоплює інший воркер.

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
Де це доречно

Реальні сценарії

Транзакційні листи й SMS

Повідомлення про реєстрацію, квитанції та скидання ставляться в чергу вебзастосунком і надсилаються пулом воркерів.

Обробка медіа

Завантаження ставляться в чергу для створення мініатюр і транскодування, а транскодер, що впав, ніколи не губить файл.

Доставка вебхуків

Вихідні вебхуки ставляться в чергу й повторюються, не блокуючи запит, який їх запустив.

Вбудовано

Що ви отримуєте

FIFO з блокувальним читанням

LPUSH з BRPOP, а воркери сплять, доки не надійде робота.

LPUSHBRPOP

Жодних втрачених завдань

BLMOVE атомарно передає кожне завдання до списку обробки.

BLMOVELREM

Паралельні виробники та споживачі

Виробників і споживачів обслуговують паралельні робочі потоки.

Потрібно більше?

Для підтверджень, груп споживачів і повторного відтворення використовуйте потоки.

XADDXREADGROUP
Довідка:BLMOVEBRPOPLPUSHLMOVE

Поширені запитання

Що буде із завданням, якщо воркер упаде?

Якщо ви берете завдання через BLMOVE, завдання лежить у списку обробки. Монітор може повернути в чергу все, що пролежало там надто довго.

Чи мусять воркери опитувати?

Ні. BRPOP і BLMOVE блокуються, доки не надійде завдання, з необов'язковим тайм-аутом.

Списки чи потоки?

Списки є найпростішою чергою. Потоки додають групи споживачів, підтвердження для кожного повідомлення та історію. Дивіться сценарій потокової обробки подій.

Пов'язані сценарії використання

Спробуйте на власному навантаженні

HotKV розмовляє протоколом Redis, тож ви можете направити на нього наявний клієнт і виконувати ті самі команди.