Вчера вечером случилось неожиданное отключение Skype — крупнейшей сети интернет-телефонии. Прошли уже сутки, но проблема до сих пор полностью не устранена. Больше всего в этой истории интересно вот что: сеть Skype основана на пиринговой технологии и лишена центрального сервера. Это делает её падение почти невозможным, однако она падает уже второй раз. Почему?
Согласно сообщению «Компьюленты», трудности со звонками возникли 22 декабря примерно в 19:00 по московскому времени. Вскоре стало ясно, что сбой носит глобальный характер и справиться с ним в короткие сроки не удастся.
Вечером на сайте Skype появилось краткое объяснение, согласно которому проблемы начались с обновления клиентской программы. Ошибка в ней привела к отключению настолько большого количества так называемых «суперузлов», что сеть рассыпалась на части. Чтобы починить её, инженеры Skype не покладая рук добавляют «мега-суперузлы» (я не шучу — в сообщении сказано именно так).
Значение этих терминов вряд ли знакомо даже тем, кто имеет представление об устройстве обычных сетевых сервисов. Причина в том, что Skype — не обычный сервис, состоящий из серверов и подключающихся к ним клиентских компьютеров. Он построен на совершенно других принципах.
Skype использует децентрализованную пиринговую сеть, состоящую из компьютеров рядовых пользователей, которые объединены в замысловатую двухуровневую структуру.
Первый уровень образуют компьютеры пользователей, подключённые к интернету по быстрому каналу и обладающие собственным внешним IP-адресом. Это и есть те самые «суперузлы». Рядовые узлы, из которых состоит второй уровень сети, подключаются к одному из суперузлов и ведут все операции через него.
Сеть функционирует совершенно автономно: программы сами выбирают, какие компьютеры сделать суперузлами, куда подключиться и что делать, если с этим возникли трудности. Отключение суперузлов — это не проблема, а заурядное событие, происходящее постоянно. Пропал один — отключившиеся от него узлы найдут другой.
В сети Skype есть только один сервер, контролируемый компанией. Он проверяет пароли при подключении новых узлов и хранит списки контактов. Ни теперь, ни в прошлом он не становился причиной недоступности Skype. Кроме того, компания поддерживает работу семи резервных суперузлов. Их адреса зашиты в исполняемом файле клиентской программы. Она подключается к одному из них, когда не удаётся связаться ни с одним известным ей суперузлом.
Единственная ситуация, которую не предусмотрели разработчики? — полное разрушение пиринговой сети. Skype без труда восстанавливает нарушенные связи между отдельными узлами, но не умеет автоматически развёртываться с нуля.
В прошлый раз Skype был выбит в оффлайн в 2007 году, когда множество (сотни тысяч?) суперузлов почти одновременно установили патч Windows и отключились. Остаток сети утопили нагрузка, которую создали осиротевшие узлы, ищущие нового «хозяина», и попытки вернувшихся после перезагрузки суперузлов нащупать старые связи. Чтобы вырастить сеть заново, потребовалось два дня.
Отключение 22 декабря, судя по всему, имеет ту же природу, только теперь компании некого винить, кроме себя: массовое отключение суперузлов вызвал не патч Windows, а ошибка в клиенте Skype. Кое-что, впрочем, всё-таки изменилось: появились «мега-суперузлы».
В Skype пока не объяснили, что это такое, но у меня есть правдоподобная теория: это серверы, которые работают в точности так же, как суперузлы, но обладают более высокой «ёмкостью». Серверы-суперузлы у компании уже были — без них трудно обеспечить бесперебойность платного «корпоративного» Skype, который, к слову, вчера продолжал работать как ни в чём не бывало.
Теперь главный вопрос в том, что в Skype будут делать дальше. Сохранят мега-суперузлы (возможно, дополнив системой, которая автоматически развернёт их в трудный момент)? Или добавят в клиентские программы алгоритм, позволяющий сети восстанавливаться даже после таких ударов? Второй путь интереснее, зато первый — проще.