Skype - известная система интернет-телефонии, которой пользуется очень много народу по всему миру. Разберемся как оно работает.
Skype для работы использует P2P соединения, а не клиент-серверную модель. Что неудивительно, если вспомнить, что
авторы Skype - те же люди, что работали над Kazaa. Однако совсем от клиент-серверной архитектуры им отойти не удалось. У них есть логин-серверы - это единственной централизованный компонент Скайпа (список серверов, к которым надо коннектиться запрятан в исходники Скайповского клиента). И
этот единственный централизованный компонент их как-то раз подвел. В 2007 году пользователи Скайпа не могли с ним работать в течение двух дней. Причиной было то, что был выпущен Виндовый патч, который вызвал ребут всех пользовательских машин. Машины ребутнулись и стали дружно логиниться. Сервера Skype были погребены под огромным количеством одновременных логинов.
P2P соединения - это, конечно, хорошо. Однако как быть, если два пользователя, которые хотят сконнектиться, сидят за фаирволлами? Skype борется с симметричными
NATами и фаирволлами следующим образом - гонит трафик через тех пользователей, кто не сидит за фаирволлом. Вообще в скайповской сети машины подразделяются на ноды - обычные машины, суперноды - которые разруливают трафик нодов, ну и на их собственные логин-серверы. Так вот, если у вас публичный IP адрес, достаточная мощность CPU, много памяти и пропускная способность сети не подкачала, то вы - супернод! И через вас пойдет чужой трафик. :-)
В качестве базы данных для работы Skype использует PostgreSQL. Но им пришлось PostgreSQL под себя затачивать. Результаты заточки распространяются под BSD лицензией. Лежат
тут.
Недавно поставили себе амбициозную цель: PostgreSQL должен масштабироваться до одного миллиарда пользователей.
Исходники Скайпа закрыты, протокол тоже закрыт. Есть, правда,
Skype API, который позволяет расширять пользовательский интерфейс. Однако пытливые умы ковыряются в скайповском протоколе и находят интересные вещи. Есть очень известный доклад Vanilla Skype, в котором подробно рассказывается об особенностях работы Скайпа и о потенциальных его уязвимостях.
Еще парочка фактов: Для передачи звука они используют Global IP Sound (GIPS). Железо - dual или quad Opteron'ы со SCSI RAID.
Ссылки по теме:
Доклад Vanilla Skype
part1[.pdf] и
part2[.pdf]. Можно посмотреть
видеозапись этого доклада. Осторожно, английский с сильным французским акцентом.
Skype Protocol - статья в Википедии
An Analysis of the Skype Peer-to-Peer Internet Telephony Protocol - довольно старые слайды
Иван Золотухин в своем
докладе на РИТ2007 немного говорил о скайповском PostgreSQL.