FastQueue – как мы сделали свою очередь на perl и redis
-
Upload
ivsokolov -
Category
Engineering
-
view
79 -
download
8
Transcript of FastQueue – как мы сделали свою очередь на perl и redis
![Page 1: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/1.jpg)
11
FastQueue – как мы сделали свою очередь на Perl и Redis
Иван Соколов
![Page 2: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/2.jpg)
2
До появления FastQueue и полной переработки доменов, эта самая проверка представляла собой жалкое зрелище. Бизнес требовал сделать как у мировых лидеров доменной индустрии.
Предпосылки
![Page 3: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/3.jpg)
3
Почему свой велосипед?Сложная бизнес-логика проверки доменовМного legacy кодаЖелание полностью управлять очередьюВсе существующие решения нужно допиливать под насЛибо вообще не подходят под требованияДругие очереди сложно деплоить или админитьRails Resque и Rails Sidekiq иcпользуют RedisА почему бы и не сделать?
![Page 4: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/4.jpg)
4
Что получилосьСхема
Задача
Очереди
СтатистикаКонфигурация
Код
![Page 5: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/5.jpg)
5
Redis
fastqpfastq_maint
fastqp
fastqp
Серверы исполнители
Постановка в очередьПолучение из очереди
Постановка в очередь
Получение из очереди
Различныескрипты, демоны
![Page 6: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/6.jpg)
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 );
![Page 7: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/7.jpg)
ЗадачаОдин модуль на задачу FastQueue::Task::Some::ClassУникальный id в очереди Отдает один или несколько результатовМожет заменять другие задачиМожет создавать новыеТри типа состояний queued, inprogress, failedКеширование результатов выполнения задачи
7
![Page 8: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/8.jpg)
8
ОчередьSome:Task:Class:subqueueМожно одну очередь в отдельном процессеМожно несколько процессов на одну очередьВ какую очередь попадает задача, определяет сама задача
![Page 9: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/9.jpg)
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:*
![Page 10: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/10.jpg)
10
Конфигурация 2fastqp_servers: orders.shop.ru: batches: - batch_name: orders workers: 20 ordering: normal queues: - Order:vip - Order:normal
![Page 11: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/11.jpg)
11
Конфигурация 3fastqp_servers: misc.shop.ru: batches: - batch_name: images workers: 2 restart_after_n_jobs: 500 queues: - Reports:* - NotifyTop:*
![Page 12: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/12.jpg)
12
СтатистикаПо типам состоянийПо очередямРазличные счетчикиВсё агрегируется и пишется в логПо логу строятся графикиОповещения в случае превышения кол. заданий в очередях
![Page 13: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/13.jpg)
13
Статистика - график
![Page 14: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/14.jpg)
14
Где используемПроверка доменовВзаимодействие с платежными системамиПочтовые рассылкиОтправка ошибок сайта в SentryОтправка запросов в тех. поддержку
Или любая другая медленная операция, которую можно сделать асинхронно
![Page 15: FastQueue – как мы сделали свою очередь на perl и redis](https://reader034.fdocuments.us/reader034/viewer/2022052217/55cd2cabbb61ebe6038b469b/html5/thumbnails/15.jpg)
Написание возможно в 2 строкиПлашку регулировать по длине текста
Вывод или посыл зрителюСпасибо!Буду рад ответитьна ваши вопросы!
E-mail:[email protected]
15