Fast queue – как мы сделали свою очередь на perl и redis

Post on 16-Jul-2015

225 views 10 download

Tags:

transcript

11

FastQueue – как мы сделали свою очередь на Perl и Redis

Иван Соколов

2

До появления FastQueue и полной переработки доменов, эта самая проверка представляла собой жалкое зрелище. Бизнес требовал сделать как у мировых лидеров доменной индустрии.

Предпосылки

3

Почему свой велосипед?Сложная бизнес-логика проверки доменовМного legacy кодаЖелание полностью управлять очередьюВсе существующие решения нужно допиливать под насЛибо вообще не подходят под требованияДругие очереди сложно деплоить или админитьRails Resque и Rails Sidekiq иcпользуют RedisА почему бы и не сделать?

4

Что получилосьСхема

Задача

Очереди

СтатистикаКонфигурация

Код

5

Redis

fastqpfastq_maint

fastqp

fastqp

Серверы исполнители

Постановка в очередьПолучение из очереди

Постановка в очередь

Получение из очереди

Различныескрипты, демоны

6

Код

my $qp = FastQueue->create;

my $task = FastQueue::Task::Class->new;

$qp->enqueue($task, %opts );

$qp->get_result( $task || $task_id );

$qp->get_result_blocking( $timeout, $task || $task_id, $task || $task_id );

$qp->get_all_results_blocking( $timeout, $task || $task_id, $task || $task_id );

ЗадачаОдин модуль на задачу FastQueue::Task::Some::ClassУникальный id в очереди Отдает один или несколько результатовМожет заменять другие задачиМожет создавать новыеТри типа состояний queued, inprogress, failedКеширование результатов выполнения задачи

7

8

ОчередьSome:Task:Class:subqueueМожно одну очередь в отдельном процессеМожно несколько процессов на одну очередьВ какую очередь попадает задача, определяет сама задача

9

Конфигурация 1fastqp_servers: img1.my-gallery.ru: batches: - batch_name: images workers: 10 restart_after_n_jobs: 500 queues: - Images:*img2.my-gallery.ru: - batch_name: images workers: 10 restart_after_n_jobs: 500 queues: - Images:*

10

Конфигурация 2fastqp_servers: orders.shop.ru: batches: - batch_name: orders workers: 20 ordering: normal queues: - Order:vip - Order:normal

11

Конфигурация 3fastqp_servers: misc.shop.ru: batches: - batch_name: images workers: 2 restart_after_n_jobs: 500 queues: - Reports:* - NotifyTop:*

12

СтатистикаПо типам состоянийПо очередямРазличные счетчикиВсё агрегируется и пишется в логПо логу строятся графикиОповещения в случае превышения кол. заданий в очередях

13

Статистика - график

14

Где используемПроверка доменовВзаимодействие с платежными системамиПочтовые рассылкиОтправка ошибок сайта в SentryОтправка запросов в тех. поддержку

Или любая другая медленная операция, которую можно сделать асинхронно

Написание возможно в 2 строкиПлашку регулировать по длине текста

Вывод или посыл зрителюСпасибо!Буду рад ответитьна ваши вопросы!

E-mail:vaneska@reg.ru

15