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) ] );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.