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] berezovsky.livejournal.com 2014-05-24 03:28 am (UTC)(link)
msmq же было вроде, в одной известной Корпорации на одном интересном проекте пользовали, и оно даже само после восстановления связи старые сообщения подхватывало
сейчас, наверное, в дотнетовской обёртке что-то такое должно быть

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

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

[identity profile] vinslivins.livejournal.com 2014-05-24 06:18 am (UTC)(link)
няяя

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

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

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

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

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

[identity profile] denisioru.livejournal.com 2014-05-24 07:01 am (UTC)(link)
Гуманное и распределенное? Вот чтото похожее?

[identity profile] juan-gandhi.livejournal.com 2014-05-24 07:02 am (UTC)(link)
Особенно MSSQL хорош для репликации содержимого HBase.

Ваш паровод, MSMQ, не годится для вольного использования. Так что пошел-ка он. Вы, может, предложите и Эрланг выбросить, потому что есть сишарп?

[identity profile] denisioru.livejournal.com 2014-05-24 07:03 am (UTC)(link)
Каждой задаче свой подход. Откуда мне знать, для чего у Вас эрланг и почему я должен предлагать выбросить сишарп?

[identity profile] juan-gandhi.livejournal.com 2014-05-24 07:03 am (UTC)(link)
А зачем изобрели этот велосипед? Ведь есть уже MSMQ и MSSQL, куда уж лучше-то? Или MSMQ не распределенный? Так и зачем тогда вы его поминали?

[identity profile] juan-gandhi.livejournal.com 2014-05-24 07:04 am (UTC)(link)
Вот.

[identity profile] denisioru.livejournal.com 2014-05-24 07:05 am (UTC)(link)
потому на момент Вашего первого сообщения у меня не было информации о том, что тут эрланг как-то фигурирует.

[identity profile] juan-gandhi.livejournal.com 2014-05-24 07:09 am (UTC)(link)
Где это "тут"? Я все написал на скале - но какая разница?

[identity profile] metaclass.livejournal.com 2014-05-24 07:12 am (UTC)(link)
RabbitMQ (http://www.rabbitmq.com): It is developed using the Erlang programming platform (that is developed by Ericsson). You need to install Erlang first. I spent a lot of time to install, configure, and write a sample application. It has a .NET client but I got many errors when trying to develop and run a simple application. It was very hard to install and to make two rabbitMQ Brokers work together on two different servers. After a few days, I gave up because I thought it must not be that hard to learn and to start developing applications.

Если человек не осилил запустить кролика - его код использовать противопоказано.

[identity profile] anonim-legion.livejournal.com 2014-05-24 07:25 am (UTC)(link)
У вас неприязнь к майкрософту?

[identity profile] anonim-legion.livejournal.com 2014-05-24 07:42 am (UTC)(link)
LocalDb же есть, вроде.

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

[identity profile] avnik.livejournal.com 2014-05-24 07:58 am (UTC)(link)
оно иногда более головой, жрет всю доступную память и дохнет.
И это пример _как не надо писать на ерланге_

[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)
дупит с неебическорй силой

[identity profile] berezovsky.livejournal.com 2014-05-24 08:37 am (UTC)(link)
ебiческая сила

Page 1 of 3