Распределённая очередь сообщений
От: Аноним  
Дата: 03.08.13 16:28
Оценка:
Всем добра!
Ранее я не имел дела с высоконагруженными сетевыми приложениями и распределёнными службами, поэтому сейчас нахожусь в некотором замешательстве. Ситуация такая. У меня есть 20 экземпляров одного и того приложения, запущенного на 6 машинах. Каждый из экземпляров обслуживает до 500 клиентских подключений. Понадобилась возможность отправлять клиентам уведомления о изменениях в состоянии общих документов, над которыми они работают. Вот ключевые моменты, которые меня смущают:
1. Уведомления надо отправлять группам клиентов, которые группы могут быть распределены по экземплярам любым образом.
2. Я не могу подключиться к экземпляру, к которому подключен конкретный клиент и сказать ему, чтобы тот передал уведомление. Тоесть технически могу, но это требование заказчика.
Я резонно предположил, что должны существовать сервисы подобные memcached, но предоставляющие очередь с функцией подписки вместо хэштаблицы. С возможностью линейного масштабирования. В принципе я представляю как написать такую штуку самому и даже нашёл годную статью как это сделать, но не хочу велосипед. Всё, что мне нужно, это создавать очереди и подписываться на сообщения в них для группы адресатов. Тогда каждый экзепляр приложения сможет отправить данные любому пользователю, а экземпляр, обслуживающий группу пользователей, сможет получить и переправить им соответствующие уведомления.
Непосредственно вопросы такие.
1. Правильное ли решение я пытаюсь применить или можно лучше/проще?
2. Какие из существующих технологий уважаемое сообщество порекомендует мне применить в моём случае? Сам я сейчас читаю про rabbitMQ и 0mq, но мне они видятся слишком навороченными для моего простейшего случая.
Спасибо уже за то, что дочитали вопрос до конца
Re: Распределённая очередь сообщений
От: roro  
Дата: 03.08.13 18:32
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всем добра!

А>Ранее я не имел дела с высоконагруженными сетевыми приложениями и распределёнными службами, поэтому сейчас нахожусь в некотором замешательстве. Ситуация такая. У меня есть 20 экземпляров одного и того приложения, запущенного на 6 машинах. Каждый из экземпляров обслуживает до 500 клиентских подключений. Понадобилась возможность отправлять клиентам уведомления о изменениях в состоянии общих документов, над которыми они работают. Вот ключевые моменты, которые меня смущают:
А>1. Уведомления надо отправлять группам клиентов, которые группы могут быть распределены по экземплярам любым образом.
А>2. Я не могу подключиться к экземпляру, к которому подключен конкретный клиент и сказать ему, чтобы тот передал уведомление. Тоесть технически могу, но это требование заказчика.
А>Я резонно предположил, что должны существовать сервисы подобные memcached, но предоставляющие очередь с функцией подписки вместо хэштаблицы. С возможностью линейного масштабирования. В принципе я представляю как написать такую штуку самому и даже нашёл годную статью как это сделать, но не хочу велосипед. Всё, что мне нужно, это создавать очереди и подписываться на сообщения в них для группы адресатов. Тогда каждый экзепляр приложения сможет отправить данные любому пользователю, а экземпляр, обслуживающий группу пользователей, сможет получить и переправить им соответствующие уведомления.
А>Непосредственно вопросы такие.
А>1. Правильное ли решение я пытаюсь применить или можно лучше/проще?
А>2. Какие из существующих технологий уважаемое сообщество порекомендует мне применить в моём случае? Сам я сейчас читаю про rabbitMQ и 0mq, но мне они видятся слишком навороченными для моего простейшего случая.
А>Спасибо уже за то, что дочитали вопрос до конца

Redis может подойти Publish/Subscribe messaging

Если уведомления не тяжеловесные 60000(6*20*500) может даже справится один хороший сервер.
Масштабируется через репликацию, master + много slave.
Простейший вид балансировки запросов прямо на клиенте. Сервер выбирается случайно из списка.

list servers = ["server1" ... "serverN"];
redis.connect( servers[ random(servers.length) ] );
Re[2]: Распределённая очередь сообщений
От: Аноним  
Дата: 03.08.13 19:05
Оценка:
Здравствуйте, roro, Вы писали:

R>Redis может подойти Publish/Subscribe messaging


Спасибо, посмотрю.

R>Если уведомления не тяжеловесные 60000(6*20*500) может даже справится один хороший сервер.

R>Масштабируется через репликацию, master + много slave.

Звучит заманчиво.

R>Простейший вид балансировки запросов прямо на клиенте. Сервер выбирается случайно из списка.


R>list servers = ["server1" ... "serverN"];

R>redis.connect( servers[ random(servers.length) ] );

Используется оптимизированный вариант этого метода — перемешать список случайным образом при старте и использовать сервера по очереди
Re: Распределённая очередь сообщений
От: Nikolay_P_I  
Дата: 05.08.13 06:08
Оценка:
А>2. Какие из существующих технологий уважаемое сообщество порекомендует мне применить в моём случае? Сам я сейчас читаю про rabbitMQ и 0mq

Прежде всего поинтересуйтесь — как на это смотрит заказчик. Когда мы решали подобный вопрос — я не нашел messaging system БЕЗ выделенного сервера. А заказчик выразил категорическое пожелание в нежелании его ставить. Пришлось писать велосипед.
Re: Распределённая очередь сообщений
От: Sashaka Россия  
Дата: 05.08.13 11:05
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Всем добра!

А>2. Какие из существующих технологий уважаемое сообщество порекомендует мне применить в моём случае? Сам я сейчас читаю про rabbitMQ и 0mq, но мне они видятся слишком навороченными для моего простейшего случая.
А>Спасибо уже за то, что дочитали вопрос до конца

RabbitMQ — годная штука, и неплохо масштабируемая.
Re: Распределённая очередь сообщений
От: Аноним  
Дата: 05.08.13 12:55
Оценка:
MSMQ, тоже вариант
Re: Распределённая очередь сообщений
От: evgeny.e Китай  
Дата: 07.08.13 13:59
Оценка:
embedded messaging — ActiveMQ или HornetMQ?
Re: Распределённая очередь сообщений
От: RobinHood  
Дата: 19.08.13 15:36
Оценка:
Здравствуйте, Аноним, Вы писали:

apache kafka
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.