Компания Facebook заявила, что основной причиной отказа ее сервисов стало неудачное выполнение плановых работ по техническому обслуживанию. В результате серверы DNS оказались недоступны, но в первую очередь стоит отметить, что из строя вышла вся магистральная сеть Facebook.
Ситуация усугубилась тем, что потеря DNS сделала для инженеров Facebook невозможным получение удаленного доступа к тем самым устройствам, с помощью которых они рассчитывали восстановить работоспособность сети. Пришлось вручную перезапускать системы непосредственно в ЦОДах.
Все это задержало процесс, но он замедлился еще сильнее из-за мер предосторожности, которые затрудняют вмешательство в работу ЦОДов абсолютно всем. «Туда трудно попасть, а оборудование и маршрутизаторы спроектированы таким образом, что их работу трудно модифицировать даже при наличии физического доступа», – пояснил вице-президент Facebook по инфраструктуре и проектированию Сантош Джанардан.
Поэтому вся процедура заняла довольно продолжительное время. Но как только системы были восстановлены, сеть снова заработала.
Восстановление сервисов для клиентов, получающих доступ по сети, тоже длилось достаточно долго, потому что их одновременное включение порождало риск возникновения очередного витка сбоев. «В некоторых ЦОДах снижение энергопотребление измерялось десятками мегаватт, а резкий его рост мог привести к нежелательным последствиям, начиная от отказа электрических систем и заканчивая нарушением кеширования», – добавил Джанардан.
В общей сложности системный сбой Facebook продолжался семь часов и пять минут.
Сбой при проведении планового техобслуживания
При проведении технического обслуживания инженеры Facebook планировали отключить только часть магистральной сети. Но выполнение команды, предназначенной для оценки доступности глобальной магистрали, непреднамеренно привело к разрыву всех соединений с магистральной сетью и отключению всех ЦОДов Facebook.
У Facebook даже есть инструмент, предотвращающий выполнение команд, которые могут привести к таким катастрофическим последствиям, но в данном случае он не сработал. «Наши системы проводят аудит подобных команд, чтобы предотвратить действия такого рода, но ошибка в инструменте аудита помешала остановить выполнение команды», – указал Джанардан.
Когда это произошло, система DNS была обречена.
DNS: единая точка отказа
По словам Анжелики Медины, руководителя отдела маркетинга продуктов Cisco ThousandEyes, отслеживающих интернет-трафик и сбои в работе, автоматическая реакция на магистральный сбой привела к отказу системы DNS.
Система DNS (Domain Name System) отвечает за преобразование имен интернет-доменов в IP-адреса, а у Facebook имеются собственные серверы DNS. «В компании выстроена архитектура, позволяющая масштабировать сервис DNS вверх или вниз в зависимости от доступности сервера, – отметила Медина. – И когда уровень готовности серверов из-за сбоя в сети опустился до нуля, все серверы DNS были выведены из эксплуатации».
Вывод их из эксплуатации осуществлялся принадлежащими Facebook серверами имен DNS, отправлявшими соответствующие сообщения маршрутизаторам BGP (border gateway protocol), в которых хранилась информация о маршрутах, используемых для достижения конкретных IP-адресов. Информация о маршрутах регулярно рассылается на маршрутизаторы, чтобы они были "в курсе" того, как следует правильно распределять трафик.
Серверы DNS Facebook рассылали сообщения BGP, которые отключали маршруты, делая невозможным прохождение трафика по магистральной сети Facebook. «В результате оказались недоступными даже те серверы DNS, которые находились в рабочем состоянии, – пояснил Джанардан. – И обратиться к нашим серверам из оставшейся части Интернета стало невозможно».
Даже если бы доступ к DNS-серверам из Интернета сохранялся, клиенты Facebook все равно не смогли бы воспользоваться сервисом, поскольку сеть, к которой они пытались обратиться, вышла из строя. К несчастью для Facebook, ее собственные инженеры тоже утратили доступ к серверам DNS, которые были нужны платформе удаленного управления для подключения к вышедшей из строя магистральной системе.
«В Facebook сервис DNS используется не только для веб-ресурсов, преданазначенных на клиентов, – указала Медина. – Она нужна и для внутренних инструментов и систем. При полном ее отключении операторы и инженеры не могут получить доступ к внутренним системам, которые нужны им для устранения сбоя».
Для повышения надежности архитектура должна предусматривать наличие двух сервисов DNS, которые могут заменять друг друга. Например, Amazon Web Services использует для обеспечения резервных мощностей два внешних сервиса – Dyn и UltraDNS.
Уроки
Произошедший инцидент высветил недостатки архитектуры Facebook. «Почему DNS оказалась фактически единственной критической точкой? – спрашивает Медина. – В сложившейся ситуации отказа основного сервиса DNS, даже не затронувшего функционирование резервного сервиса, оказалось достаточно для длительного вывода из строя всей системы. Думаю, наличие дополнительной избыточности в системе DNS стало бы хорошим подспорьем».
Еще одно общее замечание касается всех провайдеров. Зачастую в их сетях так много взаимозависимостей, что даже небольшой сбой в какой-то части архитектуры сервисов может вызвать эффект домино и привести к самым серьезным последствиям.
«Многие компании используют массу различных внутренних сервисов, вмешательство в которые может привести к непредсказуемому результату, – добавила Медина. – Это касается в основном технического персонала, но на такие моменты тоже следует обратить внимание».