Добрый день.
Заинтересовался вопросом работы программ подобного класса. Да и вообще, интересно как можно организовать работу аналогичного сервиса.
Как я это понимаю и думаю как это реализовано в самом первом приближении?
Весь комплекс возможно состоит из следующих основных программ:
- Клиент (который мы все качаем, запускаем и используем)
- Серверы авторизации (содержит БД клиентов, список серверов соединений, статистики и прочей доп. информации)
- Серверы соединений
Алгоритм работы наверное какой-нибудь такой:
- "Клиент А" при запуске пытается обратиться к любому из доступных серверу авторизации (список серверов фиксирован и жестко задан, например, ammyy отвечает на rl.ammyy.com может есть еще какие-то), который фиксирует факт использования лицензионности, фиксирует, что клиент подключился, фиксирует доп. параметры клиента.
- Далее сервер авторизации ищет наименее загруженный сервер соединений из списка серверов в своей БД учитывая мощности каждого сервера и количество уже подключенных к ним пользователей.
- Находит наименее загруженный и говорит клиенту какой сервер будет являться сервером соединений персонально для него. Допустим это "Сервер соединений А".
- "Клиент А" устанавливает постоянное соединение с "Сервером соединений А".
- С "Клиентом Б" совершаются аналогичные действия и ему находится и подключается "Сервер соединений Б".
- "Клиент А" хочет подключиться к "Клиенту Б". Для этого снова идет обращение к серверу авторизации и сервер авторизации ищет к какому серверу подключен "Клиент Б". "Клиент А" получает информацию о "Сервере соединений Б"
- "Клиент А" шлет "Серверу соединений Б", мол хочу подключиться к тебе, к "Клиенту Б", который находится у тебя.
- "Сервер соединений Б" если находит у себя такой коннект подсоединяет к себе "Клиента А" и перенаправляет все пакеты "Клиента А" на "Клиента Б" и наоборот (?).
- После окончания сеанса "Клиент А" закрывает соединение с "Сервером соединений Б".
Такая схема работы позволит быстро увеличивать количество серверов соединений.
Повторю, я думаю в самом первом приближении, это может работать так. Хотя, конечно, какие-то пункты могут быть не верными и/или пропущенными (например, регистрация соединения/отключения между А и Б на сервере авторизации в БД).
Собственно, теперь вопросы:
1) Такая ли схема работы?
2) Как добиваются того, чтобы серверы авторизации имели одну БД? Ведь если сервер авторизации отвалится, то не будет работать вся схема. В этом отношении серверы соединений вторичны, с точки зрения надежной работы, т.к. если они не доступны то с ними просто не будут соединять серверы авторизации, а если один из серверов соединений отвалится во время работы, то клиенты этого сервера снова обратятся к серверу авторизации и тот им даст новые серверы соединений.
3) Каковы могут быть мощности серверов авторизации и серверов соединений?
4) Могут ли быть в качестве серверов соединений использованы сами клиенты, по принципу работы торрентов?
5) На чем могут быть написаны каждая из программ сервиса?
Вообще, интересная тема, конечно...
Что скажете?