fastqueue – как мы сделали свою очередь на perl и redis
Post on 14-Aug-2015
79 Views
Preview:
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
top related