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

Message Queue

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

[identity profile] 4g9h992s.livejournal.com 2014-05-24 12:06 pm (UTC)(link)
дурачок из россии, ты пишешь здесь потому что ты забыл выпить таблетки? :)

[identity profile] 4g9h992s.livejournal.com 2014-05-24 12:07 pm (UTC)(link)
даун, пиши на российских сайтах. тут тебе нечего делать :)

[identity profile] anonim-legion.livejournal.com 2014-05-24 01:02 pm (UTC)(link)
Верните настоящего Глазова, этот уныл.

[identity profile] 4g9h992s.livejournal.com 2014-05-24 01:27 pm (UTC)(link)
лошок, не выебывайся. все давно ясно с тобой.

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

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

[identity profile] juan-gandhi.livejournal.com 2014-05-24 04:10 pm (UTC)(link)
А вы с какой целью спрашиваете?

[identity profile] anonim-legion.livejournal.com 2014-05-24 04:11 pm (UTC)(link)
Да просто сложилось такое впечатление из ваших комментариев к этому посту.

[identity profile] sbj-ss.livejournal.com 2014-05-24 04:12 pm (UTC)(link)
Йобана обізьяна, Єбіческа сила, потусторонні сили зла. ©

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

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

[identity profile] juan-gandhi.livejournal.com 2014-05-24 06:38 pm (UTC)(link)
Хорошо. Тогда ответ на предыдущий вопрос: "да".

[identity profile] avnik.livejournal.com 2014-05-24 08:11 pm (UTC)(link)
две ноды запросто могут отдать одно и тоже сообщение разным получателям.
То есть вся отдача должна быть транзакционна, в пределах тех нод которые держат реплики.

Со стороны получателя требуется сказать ack или reject

[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".

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

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

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

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

[identity profile] hshhhhh.livejournal.com 2014-05-26 11:15 am (UTC)(link)
ну можно добавить еще одну очередь на принимающей стороне чтобы было 3 очереди.
1) очередь на генераторе
2) оригинальная очередь
3) локальная очередь на клиенте
3.1) или много локальных очередей на многих клиентах

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

[identity profile] hshhhhh.livejournal.com 2014-05-26 12:29 pm (UTC)(link)
Больше очередей во имя бога очередей! Восславим бога очередей!

[identity profile] berezovsky.livejournal.com 2014-05-26 02:13 pm (UTC)(link)
я уже запутался, где настоящий глазофф, где поддельный и где поддельный березовский.

[identity profile] nivanych.livejournal.com 2014-05-27 11:42 am (UTC)(link)
По-моему, гениально!
Вы придумали?

[identity profile] berezovsky.livejournal.com 2014-05-27 11:45 am (UTC)(link)
оно само

[identity profile] nivanych.livejournal.com 2014-05-27 11:50 am (UTC)(link)
От оно, оказывается, окакое отродилось!

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

Page 2 of 3