Size: a a a

Saint P Ruby Community

2019 October 07

MK

Mikhail Kuzmin in Saint P Ruby Community
lowkiq - это не сразу появился, была более простая реализация для одной конкретной задачи
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
нужно было индексировать сущности в эластик по их id
источник

AD

Anton Davydov in Saint P Ruby Community
ну смотри, у вас проблема в порядке выполнения и в поочередной обработке списка задач (не важно как сгрупированных). по сути, тут можно взять что-то уже готовое, а можно натянуть все это на сайдкик (ну или написать все самому). вот интересно, как решаются подобные вещи и интересно, почему все так на сайдкик завязаны в котором куча архитектурных проблем
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
т.е. взять id, вычитать из бд несколько связанных сущностей, сделать документ, положить в эластик
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
Anton Davydov
ну смотри, у вас проблема в порядке выполнения и в поочередной обработке списка задач (не важно как сгрупированных). по сути, тут можно взять что-то уже готовое, а можно натянуть все это на сайдкик (ну или написать все самому). вот интересно, как решаются подобные вещи и интересно, почему все так на сайдкик завязаны в котором куча архитектурных проблем
давай я дойду до сути и будет видно
и да lowkiq - это не плагин для сайдкика, у них нет ничего общего
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
этот проект назывался indexer
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
если я правильно помню, то делался он для того, чтобы не индексировать по 100500 раз одно и тоже и снизить нагрузку таким образом
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
«очередь» представляла собой простое множество в редисе
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
что-бы это можно было масштабировать - это множество разбивалось на шарды по id
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
и каждый шард обрабатывался выделенным тредом
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
для этой задачи не важен порядок задач
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
упавшие задачи складывались обратно в ту же очередь
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
из мониторинга был только размер очереди
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
потом решили идею с однопоточной обработкой перенести на обработку сообщений из сторонней системы
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
т.к. там были дедлоки
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
и для некотороых сообщений мжно было отбросить предыдущие сообщения из очереди
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
теперь почему sidekiq-grouping не подходит
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
как он работает?
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
есть родная sidekiq очередь
источник

MK

Mikhail Kuzmin in Saint P Ruby Community
а есть буфер от sidekiq-grouping
источник