+ All Categories
Home > Technology > Fast queue – как мы сделали свою очередь на perl и redis

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

Date post: 16-Jul-2015
Category:
Upload: moscowpm
View: 225 times
Download: 10 times
Share this document with a friend
Popular Tags:
15
1 1 FastQueue – как мы сделали свою очередь на Perl и Redis Иван Соколов
Transcript
Page 1: Fast queue – как мы сделали свою очередь на perl и redis

11

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

Иван Соколов

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

2

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

Предпосылки

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

3

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

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

4

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

Задача

Очереди

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

Код

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

5

Redis

fastqpfastq_maint

fastqp

fastqp

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

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

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

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

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

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

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: Fast queue – как мы сделали свою очередь на perl и redis

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

7

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

8

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

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

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: Fast queue – как мы сделали свою очередь на perl и redis

10

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

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

11

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

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

12

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

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

13

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

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

14

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

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

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

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

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

E-mail:[email protected]

15


Recommended