Привет всем.
Не подскажите, есть ли "стандартные" схемы горизонтального масштабирования Instant Messaging (IM) серверов.
А именно интересует как делается взаимодействие между несколькими серверами. Т.е. напрмер когда есть два пользователя — один приконекчен к одному серверу, второй — к другому. Как в этом случае происходит обмен сообщениями между ними.
А>Не подскажите, есть ли "стандартные" схемы горизонтального масштабирования Instant Messaging (IM) серверов.
А>А именно интересует как делается взаимодействие между несколькими серверами. Т.е. напрмер когда есть два пользователя — один приконекчен к одному серверу, второй — к другому. Как в этом случае происходит обмен сообщениями между ними.
Здесь есть несколько задач:
1. Хранение всех зарегистрированных пользователей и фиксированной информации о каждом из пользователей.
Как правило информация о пользователях хранится в единой базе.
Если необходимо масштабировать эту базу, то при работе на одной территории просто строится кластер.
Если же нужно размазать базу по регионам — применяется простейшая кластеризация один ко многим.
2. Регистрация активного пользователя.
Как правило пользователь привязывается к одной из баз/серверов регистрации активных пользователей.
В таких базах хранятся данные о текущем местоположении активных пользователей
Назначение сервера как правило статическое, хотя можно делать и динамически (выбираем тот, что ближе).
Как правило повторная привязка выполняется не часто. При этом информация о выбранном для данного пользователя сервере регистрации распространяется либо:
а) путем записи идентификатора сервера (или списка серверов) на которых можно найти данного пользователя в единую базу пользователей
б) путем оповещения всех серверов регистрации
в) путем поиска запрашиваемого пользователя во всех доступных серверах регистрации
(нужный вариант выбирается по критериям — надёжность, скорость доступа, неуязвимость

)
3. Передача сообщений между пользователями.
Как правило производится с использованием прокси-серверов, но можно и напрямую.
Информация о прокси-сервере или адресе получателя берется с сервера регистрации при входе в сеть и периодически обновляют.
4. Если нужна отложенная доставка сообщений(когда пользователь входит в сеть), то ставят хранилища сообщений.
Они могут располагаться: у прокси, у регистраторов, у центральной базы; ближе к отправителю(как в SMSC), ближе к получателю.
Здесь вариантов масса.
Конкретные же варианты реализаций выбирайте исходя из используемых протоколов IM.
Как правило в них даны намеки о необходимых компонентах и их распределении в зависимости от целей разработчиков протоколов.
Здравствуйте, Аноним, Вы писали:
А>Не подскажите, есть ли "стандартные" схемы горизонтального масштабирования Instant Messaging (IM) серверов.
А>А именно интересует как делается взаимодействие между несколькими серверами. Т.е. напрмер когда есть два пользователя — один приконекчен к одному серверу, второй — к другому. Как в этом случае происходит обмен сообщениями между ними.
Рекомендую посмотреть
http://ejabberd.jabber.ru/ — это распределенный отказоустойчивый Jabber-сервер.
А>Не подскажите, есть ли "стандартные" схемы горизонтального масштабирования Instant Messaging (IM) серверов.
Один из "частных" подходов к созданию масштабируемой IM системы —
архитектура Google Tolk