metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2014-05-24 02:23 am

Message Queue

Чо-то я не совсем понимаю идеологию работы с сабжами в случае, когда нет гарантии работоспособности промежуточных узлов.
Вот например, есть кролик (rabbitmq), на сервере. В него какие-нибудь клиентские программы складывают данные на обработку специально обученными пауками. Теперь приходит белтелеком, крадет у нас связность между сервером и клиентом, или например, админ, которому не досталось личной ежихи в дурдоме - режет витую пару и плетет из нее макраме.
Соответственно, клиентская прога должна в это время копить сообщения для очереди в себе и дожидаться пока санитары повяжут админа и восстановят доступность сервера. Причем делать это корректно даже в том случае, если электрики решат, что именно сегодня надо отключить электропитание.
Но это ж ведь блин получается, что в клиентской библиотеке должна быть такая же очередь со всеми потрохами - персистентностью, каким-то внешним хранилищем для недоставленных мессаг и прочим таким. В итоге, вместо клиент-серверной модели мы получаем какую-то распределенную хрень, когда и на клиенте и на сервере стоят одинаковые сервера очередей и занимаются между собой греховной репликацией.
Внимание вопрос: а что из готовых решений в такое умеет? А то самодельные очереди СУБД немного задолбали, не говоря уже о том, что и СУБД может сдохнуть не вовремя, соответственно, складируемые в нее сообщения надо тоже складывать в какую-то очередь на этот случай.

[identity profile] juan-gandhi.livejournal.com 2014-05-24 12:28 am (UTC)(link)
Старая песня. Ну воти фидо умело. Я по образу и подобию фидо в 11-м году такое делал в одной полоумной конторе; они там не оценили мою policy-based replication. Сейчас эту контору хозяева закрывают; жаль, концов теперь не найти. Но в принципе фигня; ну вот журнал, HBase ведь доступна в сорсах. Имплементировать это более прилично (у них там проблемы) - и все.

[identity profile] denisioru.livejournal.com 2014-05-24 06:34 am (UTC)(link)
Зачем изобретать велосипеды, есть MSMQ, есть MSSQL. Думаю, распределенные очереди есть и у других, не на платформе Microsoft.

[identity profile] metaclass.livejournal.com 2014-05-24 07:00 am (UTC)(link)
Надо что-нибудь гуманное, размером с клиентскую библиотеку, а не тащить MSSQL на клиентские машины :)

(no subject)

[identity profile] denisioru.livejournal.com - 2014-05-24 07:01 (UTC) - Expand

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2014-05-24 07:03 (UTC) - Expand

(no subject)

[identity profile] denisioru.livejournal.com - 2014-05-24 07:05 (UTC) - Expand

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2014-05-24 07:09 (UTC) - Expand

(no subject)

[identity profile] 4g9h992s.livejournal.com - 2014-05-24 12:06 (UTC) - Expand

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2014-05-24 16:10 (UTC) - Expand

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2014-05-24 18:38 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2014-05-24 07:12 (UTC) - Expand

(no subject)

[identity profile] avnik.livejournal.com - 2014-05-24 07:58 (UTC) - Expand

(no subject)

[identity profile] 4g9h992s.livejournal.com - 2014-05-24 12:07 (UTC) - Expand

(no subject)

[identity profile] 4g9h992s.livejournal.com - 2014-05-24 13:27 (UTC) - Expand

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2014-05-24 07:02 (UTC) - Expand

(no subject)

[identity profile] denisioru.livejournal.com - 2014-05-24 07:03 (UTC) - Expand

(no subject)

[identity profile] juan-gandhi.livejournal.com - 2014-05-24 07:04 (UTC) - Expand

[identity profile] berezovsky.livejournal.com 2014-05-24 03:28 am (UTC)(link)
msmq же было вроде, в одной известной Корпорации на одном интересном проекте пользовали, и оно даже само после восстановления связи старые сообщения подхватывало
сейчас, наверное, в дотнетовской обёртке что-то такое должно быть
(deleted comment)

(no subject)

[identity profile] berezovsky.livejournal.com - 2014-05-26 14:13 (UTC) - Expand

[identity profile] denisioru.livejournal.com 2014-05-24 04:16 am (UTC)(link)
Ну в случае распределенной работы - да, очереди живут и на клиенте и на сервере. В Server Broker в MSSQL даже локально всегда работа идет по цепочке "очередь клиента -> очередь обработчика". И в силу этого достаточно ненапряжно можно переключить очередь обработчика на ремотный сервер.

[identity profile] sbj-ss.livejournal.com 2014-05-24 06:19 am (UTC)(link)
Да, мы пользовались симметричным вариантом "по очереди на клиенте и сервере". И там и там инстансы MSSQL с брокером, так что вопрос "кто ведущий, а кто ведомый" поднимался только на более высоком уровне абстракции - и ничего греховного в этом имхо нет.

[identity profile] falcrum.livejournal.com 2014-05-24 04:39 am (UTC)(link)
Либо клиентская прога должна сказать: "Абзац, сервер недоступен, работать не буду" - самый частый вариант.

[identity profile] plumqqz.livejournal.com 2014-05-24 02:58 pm (UTC)(link)
Да, как-то так.

[identity profile] romik-g.livejournal.com 2014-05-24 06:22 am (UTC)(link)
Подразумевается высокая доступность для MQ сервиса и его близкое расположение к клиентам. И, как сказал [livejournal.com profile] falcrum, приложение должно уметь корректно откидывать ласты, если MQ не доступен.

[identity profile] 1master.livejournal.com 2014-05-24 06:44 am (UTC)(link)
Народ что-то подобное на transactional replication ваяет, временами с обвязкой из service broker. Но подробностей я не знаю, увы.

[identity profile] avnik.livejournal.com 2014-05-24 07:50 am (UTC)(link)
проблема одна -- все умеют либо доставку _минимум одного_ сообщения, либо гарантию отсуствия дубликатов. ИЛИ-ИЛИ.
Диванным теоретикам предлагаю описать алгоритм гарантированой доставки каждого сообщения в единственно мэкземпляре в условиях network parition (ага call me maybe -- это про это)

[identity profile] antilamer.livejournal.com 2014-05-24 05:44 pm (UTC)(link)
At least once + транзакционность получателя = exactly once.

(no subject)

[identity profile] avnik.livejournal.com - 2014-05-24 20:11 (UTC) - Expand

[identity profile] themech.livejournal.com 2014-05-24 08:03 am (UTC)(link)
Смотрели aws sqs?

[identity profile] avnik.livejournal.com 2014-05-24 08:36 am (UTC)(link)
дупит с неебическорй силой

(no subject)

[identity profile] berezovsky.livejournal.com - 2014-05-24 08:37 (UTC) - Expand

(no subject)

[identity profile] sbj-ss.livejournal.com - 2014-05-24 16:12 (UTC) - Expand

[identity profile] hahashi.livejournal.com 2014-05-24 06:27 pm (UTC)(link)
+1
Visibility Timeout все решает
если я правильно понял проблему

[identity profile] click0.livejournal.com 2014-05-24 02:47 pm (UTC)(link)
Berkeley DB ?

[identity profile] blackyblack.livejournal.com 2014-05-24 08:23 pm (UTC)(link)
Для начала, нужно выяснить, так ли нужна персистеность на клиенте. Если правда нужна, то можно поискать какую-нибудь persistent queue реализацию.
Через СУБД делать не стоит - это уродское решение. Однако хорошее решение навскидку не скажу.

[identity profile] golikov konstantine (from livejournal.com) 2014-05-25 11:51 pm (UTC)(link)
Scribe от фейсбука:

If a scribe instance on a client machine (we’ll call it a resender for the moment) is unable to send messages to the central scribe server it saves them on local disk, then sends them when the central server or network recovers.

[identity profile] hshhhhh.livejournal.com 2014-05-26 10:28 am (UTC)(link)
есть простое решение: нужно добавить раббита и на сервере где генерируется очередь, а в нормальную очередь пусть складывает очередь.

[identity profile] berezovsky.livejournal.com 2014-05-26 11:13 am (UTC)(link)
"Now they have two problems".

Однажды Онуфрий описывал очередь обработки. Освоил объекты, оглядел Оракл. Отладил операции, обрывы, ожидание. Обфусцировал, оформил окончательно. Одокументил окружение, обслуживание.

Очередь обработки оголтело отколбасила около осьми оборотов. Отключившись, околела окаянная. Огорчился Онуфрий. Откупорил, опрокинул, откусил окорок, окосел.

Оклемавшись, отправился одолевать Окамл. Однако! Очаровывает однозначно.

Опешил Онуфрий. Обдумал обновлённую, оригинальную очередь. Окамл, О'Рейли, отправка-обработка, одобрение-отклонение, от оно! Описал, отладил.

(no subject)

[identity profile] hshhhhh.livejournal.com - 2014-05-26 11:15 (UTC) - Expand

(no subject)

[identity profile] nivanych.livejournal.com - 2014-05-27 11:42 (UTC) - Expand

(no subject)

[identity profile] berezovsky.livejournal.com - 2014-05-27 11:45 (UTC) - Expand

(no subject)

[identity profile] nivanych.livejournal.com - 2014-05-27 11:50 (UTC) - Expand

[identity profile] metaclass.livejournal.com 2014-05-26 11:23 am (UTC)(link)
Да, к чему-то похожему мы и склоняемся.

(no subject)

[identity profile] hshhhhh.livejournal.com - 2014-05-26 12:29 (UTC) - Expand

[identity profile] napishi.livejournal.com 2014-05-29 02:30 am (UTC)(link)
Если клиенты виндовые, то я бы использовал (и использовал уже) родной MSMQ.
Он идёт в поставке, начиная с XP, имеет хорошую поддержку в .NET

[identity profile] inhate.livejournal.com 2014-06-09 07:07 pm (UTC)(link)
А зачем тебе верховная очередь? Пускай клиенты складывают себе сообщения локально, а паук будет по мере сил и коннекта опрашивать параллельно или по очереди удалённые очереди.