Архитектура Skype

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.

Leave a comment

Please be polite and on topic. Your e-mail will never be published.

You must be logged in to post a comment.