Diversus
@Diversus
Программист

TeamViewer и Ammyy admin. Как работают эти программы?

Добрый день.
Заинтересовался вопросом работы программ подобного класса. Да и вообще, интересно как можно организовать работу аналогичного сервиса.

Как я это понимаю и думаю как это реализовано в самом первом приближении?

Весь комплекс возможно состоит из следующих основных программ:
  1. Клиент (который мы все качаем, запускаем и используем)
  2. Серверы авторизации (содержит БД клиентов, список серверов соединений, статистики и прочей доп. информации)
  3. Серверы соединений

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

Такая схема работы позволит быстро увеличивать количество серверов соединений.

Повторю, я думаю в самом первом приближении, это может работать так. Хотя, конечно, какие-то пункты могут быть не верными и/или пропущенными (например, регистрация соединения/отключения между А и Б на сервере авторизации в БД).

Собственно, теперь вопросы:
1) Такая ли схема работы?
2) Как добиваются того, чтобы серверы авторизации имели одну БД? Ведь если сервер авторизации отвалится, то не будет работать вся схема. В этом отношении серверы соединений вторичны, с точки зрения надежной работы, т.к. если они не доступны то с ними просто не будут соединять серверы авторизации, а если один из серверов соединений отвалится во время работы, то клиенты этого сервера снова обратятся к серверу авторизации и тот им даст новые серверы соединений.
3) Каковы могут быть мощности серверов авторизации и серверов соединений?
4) Могут ли быть в качестве серверов соединений использованы сами клиенты, по принципу работы торрентов?
5) На чем могут быть написаны каждая из программ сервиса?

Вообще, интересная тема, конечно...

Что скажете?
  • Вопрос задан
  • 6193 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
Сервер авторизации нужен исключительно для платежеспособных клиентов, предоставлять дополнительные функции. Нагрузка там небольшая.
Сервер соединений не нужен, потому что задача не соединять кого-то с кем-то, а передать информацию о том, куда подключаться.

Если ты подключаешься по ID тимвивера, то тебе сервер тимвивера скажет, что ID куда ты подключаешься это IP a.b.c.d порт x

Если человек сидит за натом, сервер тимвивера просто скажет тебе IP роутера этого человека с портом, который замаплен на роутере для тимвивера.

Хорошая статья, чтобы подробнее про все, что выше на хабре:
habrahabr.ru/post/129347
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы