[Moscow.pm] nosql сервер под очередь задач

Ivan Petrov i.petro.77.00 на gmail.com
Сб Янв 12 13:38:37 PST 2013


> Подскажите, какие сейчас есть nosql серверы, вроде Redis, чтобы не
> на яве и с биндингом для перла и можно было повесить хук на
> появление данных?  И, наверное, все данные должны сохранятся при
> потере питания, а скорость не очень критична - данных не много.

http://tarantool.org

мы сейчас тарантул допилили до того чтобы можно было сделать
полноценную очередь, мало того мы ее в процессе делания на нем и
соответственно в ближ недели она появится

вкратце что будет

1. консюмер может сказать "дай задачу" с таймаутом. далее ему либо не
вернется ничего либо выдастся задача.
2. если задач нет консюмер будет ее ожидать, получать будет по факту
ее появления
3. очередей поддерживается множество
4. если консьюмер отваливается сервер сам выводит задачу из статуса
taken (взята) в статус ready (готова ко взятию)
ну и тому подобное.

примерный API что мы делаем - компиляция бинстолка и наших размышлений
будет такой:

продюсер:

    put - кладет задачу в очередь
        можно указать:
            - интервал задержки
            - TTL
            - TTR
            - приоритет

    push - то же что и put но в начало очереди
        такие задания выполнятся в первую очередь

консюмер:

    take - берет задачу на выполнение (та помечается как taken), если за
           время TTR задача не будет исполнена, задача перепометится как
           ready

    ack  - сообщает очереди что задача выполнена (задача удаляется из
           очереди). проверяет некоторые условия вроде того что "этот
           консюмер брал и только он может сообщить о выполнении)

    touch - продлить ttr выполняемой задаче

    release - вернуть задачу в очередь невыполненной (можно отложить
           повторное выполнение, изменить TTL, TTRL при этом). тоже
           проверяет некоторые условия

    requeue - вернуть задачу в очередь (в статус ready), но поставить ее
           не в начало очереди а в конец

    done - перевести задачу в статус "выполнена"

    bury - закопать задачу (например после N неудачных попыток)


просто запросы:

    delete - удаление таска
    peek   - получить таск
    meta   - получить метаинфу по таску (TTL, TTR, счетчики итп)
    dig(unbury) - откопать задачу
    kick   - откопать N задач

    stats - получить статистику по вчем очередям (счетчики/размеры итп)

для Perl у тарантула есть DR::Tarantool который на базе AnyEvent
внутрях и так же Coro. есть синхронная версия (AE+condvars).
DR сейчас отвязали от зависимостей на libtarantool, поэтому не
страдает от обновления этих библиотек и сильно проще в сборке стал.
есть в Debian (правда пока в unstable)

еще Монс пилил свой драйвер для тарантула, но в Debian я пока его не
добавил (собираюсь). бенчмаркать он будет скорее всего получше чем DR.


ну и еще насчет тарантула:

тарантул потихоньку из noSQL БД превращается в апликейшн сервер.

например у него появились сокеты (пока не запушены в основную ветку,
но очень скоро там будут). таким образом у него появляется возможность
ваять свои серверы на борту у которых будет еще и noSQL БД (одна из
самых быстрых). серверы со своими протоколами (вплоть до http) которые
по прикидкам будут бенчмаркать на уровне nodejs и возможно nginx. но
при этом на борту таки БД. но к этому пока двигаемся. как там
говорится "оставайтесь с нами" :)


Подробная информация о списке рассылки Moscow-pm