Краткое содержание
- Fastly сообщает, что развёртывание программного обеспечения, начавшееся 12 мая 2021 года, внесло скрытый дефект. 8 июня клиент внёс корректное изменение конфигурации, содержавшее необычные условия, которые его активировали. В результате отказа 85 % сети Fastly возвращали ошибки. Fastly обнаружила сбой в течение одной минуты и восстановила 95 % сети в течение 49 минут.
- Инцидент не был публично идентифицирован как утечка BGP-маршрутов, сбой пиринга, дефицит транзита, кибератака или некорректные действия клиента. Независимые наблюдения зафиксировали ошибки приложений при внешне нормальном состоянии сетевого уровня. Это различие важно: CDN может обладать широкой физической и операторской диверсификацией и при этом оставаться коррелированной через общее программное обеспечение, семантику конфигураций, системы развёртывания и средства восстановления.
- Результаты для клиентов зависели от архитектуры и операционной готовности. У GOV.UK был постоянно доступный резервный CDN и документированная процедура переключения, но распространение DNS и компромиссы деградированного режима всё равно потребовали времени. GitLab лишь частично зависел от Fastly в основном сервисе, однако внешняя зависимость от пакета помешала обычному конвейеру, которым инженеры хотели воспользоваться для обхода отказавшего CDN.
- Ответственность поэтому лежит по обе стороны границы сервиса, но не делится поровну. Fastly контролировала код платформы, тестирование, сдерживание развёртывания, изоляцию глобального отказа и восстановление провайдера. Клиенты контролировали картирование зависимостей, альтернативную доставку, мощности origin, готовность DNS и сертификатов, инструменты восстановления и допустимые уровни бизнес-последствий. Советы директоров и регуляторы должны запрашивать проверенные доказательства по обеим областям, а не принимать процент доступности или контракт со вторым вендором за подтверждение устойчивости.
Одно корректное изменение — один глобальный домен отказа
8 июня 2021 года в 09:47 UTC значительная часть публичного веб-пространства начала возвращать ошибки. Новостные сайты, коммерческие сервисы, платформы для разработчиков, стриминговые площадки и центральный правительственный сайт Соединённого Королевства оказались среди видимых жертв. Со стороны событие выглядело так, будто одновременно отказали множество несвязанных организаций. С точки зрения инфраструктуры они были связаны: запросы к этим сервисам сходились на сети доставки контента Fastly.
Всводке Fastly о сбое 8 июняизложена основная версия причин. Развёртывание программного обеспечения, начатое 12 мая, внесло дефект. Он оставался скрытым, пока клиент не внёс корректное изменение конфигурации в условиях, требовавшихся для его активации. Fastly сообщает, что 85 % её сети затем возвращали ошибки. Мониторинг выявил глобальное нарушение в 09:48, через минуту после начала. Первое публичное обновление статуса последовало в 09:58. Инженеры идентифицировали конфигурацию клиента в 10:27, восстановление началось в 10:36, и 95 % сети работали нормально через 49 минут после начала.
Fastly отметила инцидент как смягчённый в 12:35 и как разрешённый в 12:44, после чего в 17:25 начала развёртывание постоянного исправления дефекта.
В архивированнойзаписи об инциденте в статусе Fastlyсодержится операционная деталь, которую простая хронология «работает / не работает» упускает. По мере восстановления сервиса клиенты могли наблюдать более высокую нагрузку на origin-серверах и более низкий коэффициент попаданий в кэш. Восстановление периферийной сети не обязательно означало восстановление всего клиентского сервиса. Кэши должны были прогреваться, запросы, которые обычно обслуживались на периферии, могли в необычных объёмах достигать origin-серверов, а собственные зависимости каждого клиента должны были стабилизироваться. Восстановление провайдера было критической вехой, но не всеобщим концом последствий.
Fastly принесла извинения и заявила, что инцидент был масштабным и серьёзным. Она также сделала ценное заявление о подотчётности: хотя триггер зависел от специфических условий, провайдер должен был их предвидеть. Эта фраза отвергает самое простое, но наименее полезное объяснение — что клиент что-то изменил и потому вызвал сбой. Действие клиента было корректным. Платформа его приняла. Катастрофическая реакция возникла из-за программного обеспечения провайдера и способа распространения его отказа.
Публичный отчёт намеренно остаётся на высоком уровне. В нём не раскрываются затронутая подсистема, точная комбинация конфигурации, дефект ПО, внутреннее тестовое покрытие, топология развёртывания или механизм, посредством которого конфигурация одного клиента вызвала ошибки в несвязанных клиентских сервисах. Такие опущения могут быть разумными в коротком публичном отчёте, особенно когда речь идёт о конфиденциальности клиентов и безопасности платформы. Они также ограничивают внешнюю проверяемость.
Публика может сверить хронологию с наблюдениями; она не может самостоятельно определить по одному лишь посту Fastly, устранило ли постоянное исправление только триггер, восстановило ли глубинный дефект или изменило ли архитектуру, допускавшую столь широкий радиус поражения.
Этот пробел должен определять выводы. Зафиксированные данные подтверждают наличие скрытого дефекта, корректного триггера, глобального поведения с ошибками, быстрого обнаружения и относительно быстрого смягчения. Они не подтверждают детальную теорию о дефектном коде или о действиях отдельного инженера. Анализ подотчётности следует вести на уровне управления: проектирование тестов, изоляция конфигураций, безопасность развёртывания, сдерживание глобальных отказов, наблюдаемость, полномочия при инцидентах и доказательства, предоставляемые клиентам и директорам.
Хронология отделяет скрытый риск от активного сбоя
Для многих пользователей инцидент длился менее часа, но значимое контрольное окно началось почти на четыре недели раньше. Дефект может присутствовать операционно, не давая видимых симптомов. Именно это делает скрытые неисправности сложными, а гарантию качества релизов — чем-то большим, чем наблюдение за первыми минутами после развёртывания.
| Дата и время (UTC) | Событие | Значение для подотчётности |
|---|---|---|
| 12 мая 2021 | Fastly начала развёртывание ПО, которое, по её позднейшему сообщению, внесло дефект. | Риск попал в производственную платформу в ходе контролируемого провайдером изменения ПО, а не позднее, при действии клиента. |
| 12 мая — 8 июня | Дефект оставался необнаруженным. | Штатная работа в этот период не доказывала безопасность для всего пространства корректных клиентских конфигураций. |
| 8 июня, 09:47 | Корректное изменение конфигурации клиента встретило условия срабатывания; 85 % сети Fastly начали возвращать ошибки. | Действие в границах одного арендатора вскрыло отказ, общий для всей платформы. Корректность ввода и безопасность обработки оказались не эквивалентны. |
| 09:48 | Мониторинг Fastly выявил глобальное нарушение. | Обнаружение было быстрым. Быстрое обнаружение сокращает длительность, но не заменяет превентивного сдерживания. |
| 09:58 | Fastly опубликовала первое публичное сообщение о статусе. | Десятиминутный интервал между обнаружением и публичным уведомлением значим для часов инцидентов клиентов и автоматических оповещений поставщиков. |
| 10:27 | Инженеры определили конфигурацию клиента-триггера. | Время изоляции триггера составило около 40 минут с начала. Публичный отчёт не сообщает, существовал ли автоматический откат конфигурации. |
| 10:36 | Затронутые сервисы начали восстанавливаться после отключения конфигурации. | Смягчение воздействовало на триггер до развёртывания постоянного исправления ПО. |
| 11:00 | Fastly сообщила, что большинство сервисов восстановлено. | Клиентские сервисы всё ещё могли испытывать прогрев кэша, низкие коэффициенты попаданий и нагрузку на origin. |
| 12:35–12:44 | Инцидент был смягчён, а затем отмечен как разрешённый. | Статусное закрытие провайдера последовало более чем через два часа после первоначальной вехи восстановления 95 % сети. |
| 17:25 | Началось развёртывание постоянного исправления дефекта. | Исправление последовало за операционным смягчением. Публичные данные не раскрывают кольца его развёртывания или независимую проверку. |
| 4 августа | Fastly сообщила инвесторам, что сбой затронул почти всех клиентов, снизил трафик, привёл к кредитам и повлиял на прогноз. | Технический отказ стал измеримым событием для клиентов, выручки, контрактов и доверия. |
Эта последовательность показывает, почему распространённая фраза «изменение конфигурации вызвало сбой» слишком неточна. Изменения конфигурации происходят постоянно на периферийной платформе, ценность которой включает программируемость. Корректная конфигурация может быть финальным стимулом в причинной цепочке, точно так же, как обычный запрос может спровоцировать дефект сервера. Владелец контроля — сторона, обладающая возможностью делать корректные вводы безопасными, отклонять комбинации, которые не может обработать, или ограничивать отказ рамками сервиса, предоставившего эти вводы.
Было бы также неверно утверждать, что триггер неважен. Анализ триггера значим для воспроизведения, обнаружения, отката и будущих защитных мер. Дело в том, что атрибуция триггера и атрибуция ответственности отвечают на разные вопросы. Клиент предоставил условие. Fastly предоставила поведение программного обеспечения и общую производственную среду. Сам отчёт Fastly признаёт, что это условие следовало предвидеть.
Скрытый интервал не менее важен. Релиз, переживший несколько недель, накопил производственную экспозицию, а не доказательство устойчивости к непротестированным состояниям. Конфигурируемые платформы сталкиваются с комбинаторной проблемой: версионированное ПО взаимодействует с клиентским VCL, заголовками, origin-серверами, правилами кэширования, щитовыми узлами (shielding), контролем доступа, флагами функций и периферийной логикой. Исчерпывающее тестирование каждой комбинации может быть невозможным.
Это делает сдерживание, поэтапное развёртывание, проверку инвариантов, фаззинг, репрезентативные корпуса конфигураций, изоляцию времени выполнения и быстрый автоматический откат более важными, а не менее.
Это был отказ приложения, а не коллапс маршрутизации
Сбой относится к обсуждению пиринга и транзита, потому что CDN — это бизнес взаимоподключения, а также программная платформа. Но его не следует переписывать как инцидент пиринга или транзита. Данные указывают в обратную сторону.
Втогдашних сетевых наблюдениях Kentikсобытие началось в 09:49 UTC, а объём трафика от Fastly упал примерно на 75 %, прежде чем трафик начал возвращаться в 10:39.Послойный анализ Cisco ThousandEyesзафиксировал ошибки сервисов при продолжавших работать сетевых путях и описал разные паттерны восстановления клиентов по мере переключения трафика между провайдерами доставки. Более поздний продуктовый анализ ThousandEyes сформулировал различие прямо: ошибки 503 появлялись на прикладном уровне, тогда как сетевой уровень выглядел нормальным.
Собственнаяполитика пиринга Fastlyопределяет AS54113 как автономную систему, через которую компания обменивается трафиком с интернет-провайдерами и контентными сетями. Еёдокументация о глобальной сети POPобъясняет, что точки присутствия размещаются вблизи плотных точек обмена интернет-трафиком, а разнообразие провайдеров и сетевая близость входят в число факторов проектирования. DNS и anycast направляют пользователей к ближайшим мощностям Fastly. При физически локализованном отказе эти свойства позволяют обходить повреждённый канал, оператора, объект или POP.
До инцидента Fastly описывала сеть из 68 POP в 26 странах и на шести континентах, соединённую через сочетание транзита, точек обмена интернет-трафиком, облачного пиринга и частных взаимоподключений. Еёотчёт о планировании мощностейсообщал, что компания моделирует отказы POP и связности и поддерживает региональный резерв для переполнения. Это значимые формы устойчивости. Они снижают зависимость от одного кабеля, одного оператора, одного здания и одной городской площадки.
Они не устранили режим отказа 8 июня. Если многие POP работают на одном и том же дефектном коде платформы и принимают общую модель конфигураций, географическое разнообразие может воспроизводить дефект, а не изолировать его. Несколько транзитных провайдеров могут надёжно доставлять пользователей к периферийным узлам, которые надёжно возвращают ошибки. Больше пиринговых сессий может улучшить достижимость и выбор пути, оставляя обслуживающее приложение недоступным. Anycast может перенести запрос на другой POP, но если этот POP разделяет ту же программную участь, пользователь сменил локацию, не изменив результат.
Это центральный урок оптики пиринга: разнообразие путей — это не разнообразие сервисов. Сетевые операторы давно проектируют под отказы каналов и маршрутов, поскольку такие отказы видны на уровне, которым они управляют. Облачные и периферийные сервисы добавляют общие режимы верхних уровней. Общий код, глобальное распространение конфигураций, идентификация, логирование, плоскости управления, сертификатные системы, автоматизация развёртывания и инструменты инцидентов могут коррелировать инфраструктуру, которая выглядит физически независимой.
Серьёзный обзор устойчивости поэтому требует матрицы доменов отказа, а не подсчёта POP или операторов. В одной колонке должны быть перечислены физические объекты, энергоснабжение, оборудование, волокно, транзит, пиринг и маршрутизация. В другой — версии программного обеспечения, компиляторы конфигураций, контроллеры развёртывания, сервисы ключей и сертификатов, система имён, наблюдаемость и административный доступ. В третьей — зависимости, контролируемые клиентом: авторитетный DNS, хостинг origin, альтернативный CDN, политики WAF, объектное хранилище и конвейеры релизов.
Разнообразие существует только там, где одно и то же событие не может вывести из строя одновременно и основной сервис, и путь, используемый для его восстановления.
Распределённость и концентрация могут сосуществовать
Сбой породил визуальный парадокс. Затронутая инфраструктура была разбросана по всему миру, однако одно скрытое условие вызвало одновременные отказы во многих местах и у многих организаций. Распределённость описывает, где находятся ресурсы. Концентрация описывает, сколько независимых решений, реализаций и путей восстановления стоит между неисправностью и масштабным ущербом. Система может получить высокий балл по первому и низкий по второму.
Опубликованные после инцидента исследования помогают количественно оценить общий контекст, не доказывая точную долю рынка Fastly на тот день. Исследованиезависимостей от сторонних сервисов в 50 странахвыявило широкую опору на внешние DNS, CDN и удостоверяющие центры со значительными различиями по странам и сильно концентрированным набором провайдеров. Другое исследование —A First Look at the Consolidation of DNS and Web Hosting Providers(«Первый взгляд на консолидацию провайдеров DNS и веб-хостинга») — показало, что Cloudflare, Amazon, Akamai, Fastly и Google вместе размещали около 62 % стартовых страниц в первой десятке тысяч списка Tranco в его замере и обеспечивали большую часть внешних ресурсов многих сайтов.
Эти замеры — снимки с методологическими ограничениями. Их не следует превращать в утверждение, что 62 % веб-пространства зависели от Fastly или что все измеренные хостинговые отношения были критическими. Их значимость структурная. Популярные сервисы часто полагаются на небольшую группу провайдеров, и отдельная страница может содержать ресурсы сразу нескольких из них. Концентрация может поэтому проявляться на нескольких уровнях:
- Клиент может использовать один CDN для корневого документа и всех ключевых объектов.
- Клиент может использовать несколько CDN, но оставить критический скрипт, шрифт, изображение, API, сертификат или путь редиректа у одного провайдера.
- Два номинально независимых CDN могут разделять облако origin, авторитетный DNS, транзитный путь, репозиторий конфигураций, систему идентификации или конвейер развёртывания.
- Множество несвязанных организаций могут независимо выбрать одного и того же провайдера, создав сквозную общую зависимость, которую ни один отдельный клиент не может полностью наблюдать.
- Запасной вариант может существовать технически, но требовать людей, учётных данных, кода, репозиториев пакетов, информации о статусе или каналов связи, которые нарушены тем же самым событием.
Рыночная концентрация и архитектурная концентрация связаны, но не тождественны. На рынке может быть несколько крупных поставщиков, в то время как конкретная организация может оставаться привязанной к одному провайдеру (single-homed). И наоборот: клиент может иметь контракты с двумя поставщиками и всё равно создать один логический домен отказа через общий DNS, общий origin, синхронизированную ошибочную конфигурацию или непротестированное переключение. Советам директоров следует сопротивляться использованию количества вендоров как замены анализа зависимостей.
Социальный охват CDN также важен. Fastly не владела затронутыми газетами, магазинами, программными проектами или государственными сервисами. Однако пользователи пережили их недоступность через общего посредника, которого большинство пользователей никогда не видит. Это форма делегированной операционной власти. Провайдер может повышать скорость и поглощать нагрузку в масштабе, который каждый клиент с трудом воспроизвёл бы сам, но дефект провайдера может также синхронизировать отказы, которые в противном случае были бы независимыми.
Сама по себе концентрация не безответственна. Концентрированные экспертиза и инфраструктура могут давать лучшие безопасность, производительность и надёжность, чем тысячи слабых индивидуальных развёртываний. Вопрос подотчётности в том, соответствует ли эффективность, полученная от общей инфраструктуры, более сильным сквозным контролем, прозрачными доказательствами по инцидентам и реалистичными вариантами выхода или запасных путей. Чем значительнее агрегация, тем менее убедительно трактовать безопасность платформы в целом как обычный вопрос качества продукта.
У GOV.UK был резервный CDN — и всё же произошёл сбой
Публичныйотчёт об инциденте GOV.UKот Government Digital Service — одна из самых ясных записей решений со стороны клиента. GOV.UK обнаружила влияние через четыре минуты после начала, назначила руководителей инцидента и коммуникаций, подтвердила основной CDN как источник и нашла документированную процедуру переключения на резервного провайдера.
Это не было резервированием только на бумаге. Резервный CDN был постоянно доступен, хотя обычно не нёс производственного трафика. Код переключения был готов. Команда понимала основной CDN как возможную единую точку отказа. Эти меры ставили GOV.UK в значительно более сильную позицию, чем организацию, обнаруживающую свои варианты во время сбоя.
Тем не менее пользователи не могли получать доступ к информации и сервисам GOV.UK в течение менее часа. Команда намеренно ждала 15 минут после обнаружения, прежде чем решиться на переключение, потому что резервный сервис давал деградированный опыт. Динамические функции, такие как поиск и сервисы на основе геолокации, не работали бы с обычным качеством, а слишком раннее переключение во время короткого инцидента у провайдера могло продлить или усугубить нарушение. После решения изменениям DNS всё равно требовалось время на распространение.
В течение 30 минут изменения были развёрнуты, и трафик начал перемещаться, но Fastly уже восстанавливалась.
Затем команда переключилась обратно на более качественный основной сервис.
Так выглядит настоящая устойчивость: вариант с издержками, переходами состояний, суждениями и задержкой. Резервная система снизила риск длительного сбоя. Она не сделала переключение мгновенным или без последствий. Инцидент также вскрыл зависимость в коммуникации с пользователями. Универсальная страница 503 Fastly находилась вне контентного контроля GOV.UK и не дотягивала до стандартов сервиса в части полезной публичной информации.
Запись GOV.UK даёт несколько тестов подотчётности. Был ли резервный сервис действительно тёплым? Да. Была ли документированная процедура и назначенный ответственный? Да. Была ли понятна деградация? Да. Был ли механизм переключения достаточно быстрым для допустимого времени последствий сервиса? Наблюдаемая хронология даёт лицам, принимающим решения, доказательства для ответа, а не теоретическую гарантию. Отчёт также демонстрирует, почему советам директоров следует запрашивать медианное и наихудшее время перевода значимого пользовательского трафика, а не только сведения о том, заключён ли контракт со вторым CDN.
Для публичных сервисов это различие особенно важно. Сбой на периферийном слое, обращённом к пользователю, может сделать недоступными налоговые разъяснения, информацию о пособиях, материалы о здоровье, нормативные инструкции и экстренные обновления, даже если базовые ведомственные системы остаются здоровыми. Периферия — не декорация, когда она является публичной точкой входа. Картирование бизнес-последствий должно трактовать потерю доставки как потерю сервиса, до которого пользователи реально могут дотянуться.
GitLab нашёл зависимость внутри пути восстановления
Публичнаязапись о производственном инциденте GitLabпоказывает другую архитектуру и другой отказ. Fastly обслуживала ассеты GitLab.com, поэтому основной сайт был серьёзно деградирован для пользователей, в браузерах которых не было кэшированных JavaScript и изображений. About.GitLab.com, где Fastly была первой точкой входа, был полностью недоступен. API, Git, Registry и Pages продолжали работать, что показывает ценность разделения служебных путей.
В 10:18 UTC инженеры GitLab подготовили merge request для замены CDN, используемого для ассетов. Они не могли применить его через обычный конвейер, потому что образ в этом конвейере пытался установить пакет из внешнего репозитория, который также был затронут сбоем Fastly. Предназначенный механизм восстановления унаследовал то же внешнее событие через зависимость, не являвшуюся изменяемой настройкой CDN.
Это компактный пример транзитивной концентрации. На архитектурной диаграмме приложение, конвейер конфигураций, образ контейнера, индекс пакетов и CDN могут выглядеть разными блоками. Операционно действие по восстановлению зависит от каждого блока, необходимого для его выполнения. Если один шаг сборки обращается к недоступному внешнему сервису, конвейер недоступен именно в тот момент, когда он нужен для удаления другой зависимости.
GitLab протестировал ручной обход в среде staging, затем на канареечном сегменте (canary), пока Fastly восстанавливалась. Корректирующие меры включали неизменяемые образы для критических компонентов, инструкции (runbook) для ручного применения изменений, бэкенд-бакет и балансировщик нагрузки для более быстрого восстановления CDN, рассмотрение резервных CDN и пожарное учение для случаев, когда обычные рабочие процессы нарушены внешними факторами. Эти меры ценны тем, что направлены на возможность восстановления, а не только на первоначальный отказ вендора.
Частичный характер последствий для GitLab также предостерегает от бинарных реестров зависимостей. Пометка «Fastly: сторонний сервис» мало что говорит. Полезная карта указывает, какие hostname'ы, пути, объекты и пользовательские пути требуют провайдера; могут ли браузеры использовать кэшированные ассеты; остаются ли API достижимыми; где завершается TLS; как работают редиректы; и могут ли сотрудники развернуть обход, не обращаясь к отказавшему пути. Декомпозиция сервисов может сохранять высокоценные функции, но только если оценка последствий отражает то, что пользователи могут сделать при отсутствии визуальных или клиентских компонентов.
GitLab и GOV.UK пришли к разным результатам, потому что устойчивость локальна для конкретной реализации. Инцидент у провайдера был общим. Радиус поражения клиентов — нет. Поэтому клиентскую подотчётность нельзя сбрасывать со счетов словами «вендор упал», а подотчётность провайдера нельзя размывать словами «у некоторых клиентов не было второго CDN». Fastly отвечала за предотвращение и восстановление общего отказа. Каждый клиент отвечал за форму и готовность своей зависимости.
Восстановление может превратить эффективность кэша в нагрузку на origin
CDN обычно экранирует origin от значительной доли запросов. GOV.UK сообщила, что примерно 93 % её запросов обслуживались из кэша. Вдокументации Fastly о щитовых узлах (shielding)описан обычный сценарий: периферийные POP обслуживают кэшированные объекты, а назначенный щитовой узел может консолидировать промахи до того, как они достигнут origin. Архитектура повышает производительность и может резко сократить трафик к origin.
При восстановлении эта эффективность может обратиться вспять. Если кэши холодные или коэффициенты попаданий падают, больше периферийных запросов уходит вверх по потоку. Если клиент полностью обходит CDN, origin может получить трафик, на который он никогда не рассчитывался, поскольку обычное планирование мощностей предполагало поглощение на периферии. Если многие пользователи повторяют запросы после серии ошибок, всплеск может превысить обычный спрос. Предупреждение Fastly о повышенной нагрузке на origin поэтому не было примечанием. Оно указывало на риск второго порядка, порождённый восстановлением.
Многопровайдерная архитектура (multi-CDN) должна это учитывать. Резервный провайдер без тёплых объектов может немедленно тянуть всё с того же origin. Два восстанавливающихся провайдера могут порождать дублирующиеся промахи. Конфигурация щитового узла может снизить нагрузку, но создать ещё одну важную точку концентрации. Лимиты скорости, аутентификация, списки разрешений, правила WAF и лимиты соединений с origin могут различаться между вендорами. Журналы могут поступать в разных форматах или с разной скоростью как раз тогда, когда участники реагирования нуждаются в связной картине.
Прямой запасной путь к origin не автоматически безопаснее. Публикация адресов origin может изменить поверхность атаки. Сертификаты и маршрутизация хостов должны быть корректными. Origin должен поглощать спрос и защищать себя без сервисов, обычно предоставляемых на периферии. Обход, восстанавливающий статические страницы, но отключающий вход, оформление заказа, поиск, персонализацию или защиту от злоупотреблений, может быть правильным деградированным режимом, но такой режим требует явного одобрения бизнеса и коммуникации с пользователями.
Практический тест — учение по трафику. Может ли организация направить ограниченный процент производственного трафика на альтернативный путь без кризиса? Возвращает ли альтернатива то же ключевое содержимое и те же заголовки безопасности? Выдерживает ли она ожидаемую нагрузку и всплеск повторов? Доступны ли инвалидация кэша и экстренная публикация? Могут ли инженеры управлять этим с помощью учётных данных, устройств, репозиториев и каналов связи, находящихся вне домена отказа основного вендора? Обратимы ли шаги восстановления без создания второго инцидента?
Соглашения об уровне сервиса не отвечают на эти вопросы. Кредиты компенсируют узкую контрактную меру задним числом. Они не возвращают упущенную транзакцию, задержанное публичное уведомление или рабочий процесс разработчика. Клиент, полагающийся на SLA вместо отработки запасного пути, передал часть финансовых последствий, но не операционную ответственность за непрерывность.
Multi-CDN — это операционная модель, а не галочка в закупках
ThousandEyes наблюдала, что клиенты с несколькими провайдерами доставки добились разного успеха. Некоторые перевели корневой трафик с Fastly, но продолжали загружать критичные объекты страниц с неё. Другим потребовалось больше времени, чтобы убрать все зависимости от Fastly. Это поведение иллюстрирует ловушку проектирования: управления трафиком на первом запросе недостаточно, если страница затем требует скрипты, стили, API, изображения, шрифты, редиректы или ассеты аутентификации от нарушенного провайдера.
Реализуемый multi-CDN дизайн имеет как минимум восемь требовательных свойств.
Первое: конфигурация должна быть переносимой. Ключи кэша, правила времени жизни, поведение при устаревшем содержимом, выбор origin, редиректы, периферийный код, политики WAF, защита от ботов и манипуляции заголовками различаются у вендоров. Номинально эквивалентная конфигурация может вести себя по-разному при необычных запросах. Переносимость требует проверенной семантической эквивалентности, а не переведённого файла, ожидающего в репозитории.
Второе: система имён должна поддерживать своевременные изменения. Низкие значения TTL в DNS могут сократить некоторые переходы, но резолверы и клиенты обновляются не в идеальный момент. Записи apex, цепочки CNAME, адреса anycast и проверка сертификатов накладывают ограничения. Слой управления трафиком сам может стать концентрированной зависимостью. Организациям нужны измеренные данные о распространении из реальных учений по переключению.
Третье: origin должен принимать обоих провайдеров доставки. Сетевые списки разрешений, взаимный TLS, подписанные запросы, проверки здоровья, пулы соединений и лимиты скорости должны работать до чрезвычайной ситуации. Альтернативный CDN, который не может аутентифицироваться на origin, — это инвентарь, а не устойчивость.
Четвёртое: критичное содержимое должно быть полным. Корневая страница, ключевые объекты, страницы ошибок, редиректы, API и коммуникации с пользователями нуждаются в независимой доставке. Второй вендор, обслуживающий только изображения, может улучшить производительность, но не доступность. Картирование зависимостей должно следовать за пользовательскими путями, а не за контрактами с вендорами.
Пятое: у альтернативы должны быть мощности и коммерческое разрешение. Бездействующий провайдер может не иметь зарезервированных мощностей под внезапный глобальный перевод. Согласованные уровни трафика, цены на пиковые нагрузки, допущения по DDoS и скорость поддержки должны быть определены заранее. Концентрацию нельзя решить созданием резервной системы, которая отказывает под первой реальной нагрузкой.
Шестое: телеметрия должна переживать сбой. Внешние пробы должны проходить через разные сети доступа и регионы. Журналы обоих провайдеров должны достигать независимого пути анализа. Страницы статуса и инструменты оповещения не должны размещаться исключительно за сервисом, чей статус они сообщают. Клиенту нужно быстро различать отказы DNS, маршрутизации, TLS, периферийного приложения, origin и отдельных объектов.
Седьмое: полномочия должны быть явными. У команды GOV.UK были руководитель инцидента и порог решения, когда деградированный запасной вариант предпочтительнее. Без такой конструкции решений участники реагирования могут потратить сбой на споры о том, разрешено ли им переводить трафик, принимать сниженную функциональность или нести более высокие расходы.
Восьмое: возврат на основной сервис (failback) требует той же дисциплины, что и переключение. Кэши, ответы DNS, сессии, сертификаты и нагрузка на origin могут быть нестабильными, пока трафик возвращается. Первоначальное восстановление Fastly и финальное закрытие инцидента были разными вехами. Клиенты должны определять собственную точку восстановления на основе успешных пользовательских путей и стабильных мощностей, а не автоматически зеркалить цвет статуса вендора.
Эти требования объясняют, почему multi-CDN может быть оправдан для критического сервиса, но не экономичен для каждого сайта. Небольшие организации могут рационально принять короткий сбой, а не финансировать дублирующую инженерию доставки. Подотчётность не требует одинаковой архитектуры для каждого клиента. Она требует явного допустимого уровня последствий, понятой зависимости, соразмерного варианта восстановления и отсутствия ложных утверждений, что обычное резервирование у вендора покрывает программный сбой всей платформы.
Ответ Fastly был быстрым, но публичные гарантии — узкими
По хронологии реакции Fastly во многих отношениях действовала хорошо. Мониторинг обнаружил глобальную проблему в течение одной минуты. Инженеры определили конфигурацию-триггер в течение 40 минут. Её отключение вернуло 95 % сети в течение 49 минут. Постоянное исправление начало развёртываться позднее в тот же день. Компания сообщила, что изменение клиента было корректным, и признала, что должна была предвидеть это условие.
Эти факты не следует преуменьшать. Быстрое обнаружение и восстановление существенно снизили публичный вред. Распределённые системы отказывают, и подотчётность по инцидентам должна признавать качество контроля, а не только его сбой. Организация, которая обнаруживает серьёзный дефект и локализует его менее чем за час, представляет иной риск, чем та, что не может увидеть или откатить собственное состояние платформы.
Тем не менее публичный разбор оставляет сторону предотвращения нераскрытой. В нём говорится, что Fastly расследует, почему контроль качества и тестирование не обнаружили дефект, оценит способы улучшения времени восстановления и продолжит добиваться большей изоляции через WebAssembly и Compute@Edge. Он не публикует результаты расследования, владельцев действий, сроки, доказательства закрытия или независимую оценку. Нет публичного объяснения того, почему одна конфигурация затронула несвязанные сервисы, было ли развёртывание поэтапным по POP или когортам клиентов, и какой защитный барьер теперь предотвращает повторение того же класса отказа.
Это не доказывает, что Fastly не выполнила эти действия внутри. Крупные провайдеры часто предоставляют клиентам конфиденциальные отчёты. Это устанавливает границу публичной уверенности. Внешние наблюдатели могут зачесть наблюдаемое восстановление и заявленные обязательства; они не могут трактовать краткий пост как доказательство завершённых мер.
Квартальныйотчёт Fastly за июнь 2021 годапревратил событие в формальное раскрытие рисков. В документе описан необнаруженный программный дефект, вызванный человеческой ошибкой и активированный корректной конфигурацией клиента. Сообщалось, что клиенты сократили или убрали трафик и предъявили претензии по уровню сервиса. Также раскрывались более широкие зависимости от арендованной пропускной способности и возможность того, что сбои провайдеров, споры, отказы сетевых операторов, природные события, лимиты трафика или регулирование могут сделать эти мощности недоступными.
Формулировка «вызванный человеческой ошибкой» менее информативна, чем техническая последовательность компании. Всё ПО пишут и эксплуатируют люди. Вопрос управления в том, какая система позволила обычному человеческому действию создать широкий коррелированный отказ. Язык индивидуальной ошибки может затемнять механизмы проектирования и контроля, которые существуют именно потому, что люди и код небезошибочны.
Экономическая запись сделала надёжность вопросом управления
Вписьме акционерам за второй кварталFastly сообщила, что сбой затронул почти всех клиентов. Объёмы трафика снизились, клиентам были выданы кредиты, несколько клиентов, включая одного из десяти крупнейших, ещё не вернули трафик, а ряд клиентов отложили новые проекты. Поскольку модель Fastly основана на использовании, меньший трафик напрямую означал давление на выручку. Компания заявила, что сбой и отложенный трафик повлияют на прогноз на третий квартал и на весь год.
В том же письме сообщалось о выручке $85 млн за второй квартал, а годовой прогноз был установлен в диапазоне от $340 млн до $350 млн с указанием, что прогноз отражает сбой, сроки набора трафика и ожидаемые продления. Эти факторы нельзя чисто отделить от публичных цифр, поэтому было бы необоснованно приписывать все изменения ожиданий одному часу простоя. Защищаемый вывод уже: сбой вызвал сервисные кредиты и решения клиентов о трафике, которые продлили его экономический эффект за пределы технического инцидента.
В годовомотчёте Fastly за 2021 годпозднее сообщалось, что затронутые клиенты вернули трафик, но не весь трафик вернулся на уровни до сбоя. Также было раскрыто более раннее нарушение платформы в январе 2021 года, вызванное необнаруженным дефектом в обновлении ПО и приведшее к претензиям по уровню сервиса. Эти два инцидента не были описаны как имеющие одинаковую техническую причину. Их сосуществование, однако, делает устойчивость релизов ПО разумным предметом постоянного внимания совета директоров, а не разовой операционной аномалией.
Вдоверенности на годовое собрание за 2021 год, поданной до июньского собрания, говорилось, что совет отвечает за информированный надзор за рисками и мониторинг стратегической подверженности рискам, тогда как исполнительное руководство управляет существенными рисками в повседневной деятельности. Надзор за рисками информационной безопасности был закреплён за комитетом по аудиту. Документ не раскрывает, что совет знал о риске доступности платформы в целом до сбоя и что он рассматривал после. Он устанавливает архитектуру управления, а не качество фактического расследования совета.
Для провайдера, чей продукт — общая операционная инфраструктура, доступность относится к стратегическому надзору, даже когда заявленная сфера комитета по аудиту подчёркивает информационную безопасность. Часовой дефект изменил решения клиентов о маршрутизации, подверженность сервисным кредитам, ожидания выручки и доверие. Это прямой мост от инженерных контролей к стоимости предприятия. Директорам не нужно отлаживать периферийное ПО, но им нужны доказательства того, что руководство может ограничить программный релиз, изолировать конфигурацию арендатора, безопасно восстанавливать и проверять исправления.
Подотчётность разделена, но не размыта
Разделенную ответственность часто призывают после облачных инцидентов так, будто она распределяет ответственность настолько широко, что ни одна сторона не остаётся явно подотчётной. Более правильный метод — распределять ответственность по способности к контролю.
Fastly контролировала развёртывание кода, внёсшее дефект. Она контролировала парсер, компилятор, среду выполнения или иной механизм платформы, принявший и обработавший корректную конфигурацию. Она контролировала, могло ли изменение в границах одного клиента повлиять на несвязанных клиентов, как ПО достигало POP, что мог видеть мониторинг и как быстро платформа могла отключить триггер и развернуть исправление. Это обязанности провайдера, потому что клиенты не могли их инспектировать или управлять ими.
Клиенты контролировали решение разместить конкретные пользовательские пути за Fastly, мощности и безопасность origin, использование одного или нескольких CDN, конфигурации DNS и сертификатов, статический запасной контент, альтернативные пути и готовность процедур восстановления. Они также контролировали, разделяют ли критичные внутренние инструменты развёртывания и коммуникации те же зависимости. Это обязанности клиентов, потому что Fastly не могла определить допустимый простой каждого сервиса или финансировать запасной вариант каждого клиента.
Пиринговые партнёры и транзитные провайдеры переносили трафик к Fastly и от неё, но публичные записи не называют их причиной. Их разнообразие могло помогать сети оставаться достижимой, пока отказывало приложение. Приписывание вины «интернету» или BGP стёрло бы послойные данные.
Клиент, предоставивший конфигурацию-триггер, контролировал своё собственное корректное изменение сервиса. Публичные записи не называют клиента, не раскрывают конфигурацию и не предполагают нарушения. Мультиарендная платформа должна предполагать, что корректные действия арендаторов будут происходить. Этому клиенту не следует приписывать ответственности сверх неподтверждённого факта роли триггера.
Советы директоров с обеих сторон контролировали аппетит к риску и требования к доказательствам. Совет Fastly может спросить, есть ли у релиза платформы независимые контроли радиуса поражения и может ли действие арендатора пересекать границы сервисов. Советы клиентов могут спросить, какие важные сервисы подключены к одному провайдеру и укладывается ли время переключения в допустимый уровень бизнес-последствий. Ни один совет не может перепоручить свой вопрос другому.
У регуляторов более узкая, но важная роль там, где общие провайдеры поддерживают критические секторы. ИнструментарийСовета по финансовой стабильности по управлению рисками третьих сторонразличает управление рисками третьих сторон на уровне фирмы и потребность властей в выявлении системных зависимостей. ДокументSS2/21 Банка Англии об аутсорсинге и управлении рисками третьих стороножидает от регулируемых фирм управления концентрацией и операционной устойчивостью. Принятый позднееРегламент ЕС о цифровой операционной устойчивости (Digital Operational Resilience Act)формализовал внимание к концентрации ИКТ-третьих сторон и ответственности руководящих органов для подпадающих под него финансовых организаций.
Эти рамки не создают ретроспективной претензии к Fastly и не применяются одинаково к каждому клиенту CDN. Они показывают направление политики: пользователи критических сервисов остаются ответственными за свои зависимости, а надзорным органам также нужна видимость общих провайдеров, чей отказ может затронуть многие фирмы одновременно. Переключение на уровне фирмы и концентрация на уровне системы — отдельные проблемы, требующие разных доказательств.
Что советы директоров должны требовать после скрытого периферийного отказа
Пакет для совета должен начинаться с карты доменов отказа, а не с размера сети. Число POP, мощности и широта пиринга полезны, но директора должны видеть, какие контроли глобальны, а какие независимо изолированы. Карта должна связывать версии ПО, распространение конфигураций, границы арендаторов, плоскости управления, DNS, сертификаты, логирование, коммуникацию статуса, экранирование origin и инструменты восстановления провайдера.
Для провайдера доказательства должны отвечать на конкретные вопросы:
- Какой класс корректных вводов активировал дефект, и какой инвариант должен был его отклонить или сдержать?
- Почему предпроизводственные тесты, производственные канареечные развёртывания и промежуток с 12 мая не выявили его?
- Сколько клиентов, POP и запросов может затронуть одна конфигурация или одна когорта релиза до автоматической остановки?
- Независимы ли канареечные группы по коду, плоскости управления, географии и трафику, или они разделяют тестируемый механизм?
- Может ли платформа отключить конфигурацию-триггер арендатора, не полагаясь на нарушенный путь обслуживания?
- Превращает ли изоляция времени выполнения искажённое состояние или программное исключение в ошибку в границах арендатора, а не в отказ процесса или всей сети?
- Какие доказательства показывают, что постоянное исправление и контроли более широкого класса развёрнуты везде, где нужно?
- Какие метрики восстановления описывают опыт клиента, нагрузку на origin, прогрев кэша и остаточные ошибки, а не только здоровье узлов?
Для клиента пакет должен показывать важные пользовательские пути и точные внешние ресурсы, которые каждый из них требует. Он должен называть владельца, допустимый уровень последствий, режим запасного варианта, порог решения и дату последнего учения. Время на обнаружение, решение, изменение DNS или управления трафиком, обслуживание значимого трафика и безопасный возврат должны измеряться раздельно. Переключение, которое завершается после исчерпания допустимого времени последствий, — это механизм обучения, а ещё не эффективный контроль.
РуководствоNIST по планированию непрерывностидаёт устойчивую последовательность: анализ бизнес-последствий, превентивные контроли, стратегии восстановления, планы, тестирование, обучение, учения и обслуживание. Его федеральная сфера не должна восприниматься как универсальное правовое требование, но рабочий принцип переносится хорошо. План восстановления становится надёжным через учения и обслуживание.
РуководствоNIST по рискам цепочки поставоканалогично подчёркивает сниженную видимость того, как приобретённые технологии разрабатываются, интегрируются и развёртываются. Клиент CDN не может инспектировать все внутренности провайдера. Но он может требовать условий по инцидентам, раскрытия материальных зависимостей, часов уведомлений, доказательств восстановления, прав на аудит, соразмерных критичности, переносимости конфигураций, экспорта данных и поддержки проверенного выхода.
Метрики должны избегать лёгких зелёных сигналов. «Заключены контракты с двумя CDN» — слабо. «Девяносто процентов критических путей обслуживаются через альтернативу в течение восьми минут на последнем несогласованном учении» — сильнее. «Глобальная сеть восстановлена» — слабо для клиента, чей origin перегружен. «Успешные транзакции стабильны в пределах обычного бюджета ошибок в течение 30 минут» — сильнее. «Дефект исправлен» — слабо без регрессионного класса, доказательств развёртывания и владельца закрытия.
Устойчивый урок — о независимом восстановлении
Сбой Fastly 8 июня был серьёзным, заметным и сравнительно коротким. Такое сочетание может подталкивать к неверным выводам. Один — самоуспокоенность: раз большинство сервисов вернулось за 49 минут, событие становится эффектной историей восстановления. Другой — фатализм: раз крупный провайдер может отказать, сбои неизбежны и дальнейшая подотчётность бесполезна. Данные не поддерживают ни одного.
Быстрое восстановление заслуживает признания. Заслуживает его и признание Fastly, что она должна была предвидеть условие срабатывания. Но скрытый дефект просуществовал с 12 мая, одно корректное изменение клиента затронуло большую часть сети, а публичный след исправлений остался тонким. Предотвращение, сдерживание, реагирование и гарантии — разные контроли. Сильные результаты в реагировании не закрывают остальные три.
Для клиентов инцидент показал, что origin, второй контракт или процедура DNS — не автоматически независимый путь восстановления. Подготовленный резерв GOV.UK всё равно включал намеренное ожидание, деградированный сервис и распространение DNS. Обычный путь изменений GitLab касался внешней зависимости от пакета, затронутой тем же событием. Это не аргументы против планирования непрерывности. Это доказательства того, что запасные варианты становятся реальными, только когда отработаны через все свои зависимости.
Для сетевого риска сбой показал, почему анализ пиринга и транзита должен подниматься по стеку. Географически распределённая, многократно соединённая периферия Fastly снизила многие физические риски. Она не помешала общему ПО превратить эту периферию в единый логический домен отказа. Само взаимоподключение, дающее экстраординарную производительность, может распространять общую ошибку с той же дальностью.
Финальный вывод о подотчётности поэтому конкретен. Fastly отвечала за дефект на стороне провайдера, его распространение и доказательства того, что класс отказа сдержан. Клиенты отвечали за знание того, что станет недоступным при отказе Fastly, и за выбор запасного варианта, соразмерного этому ущербу. Директора отвечали за проверку того, что заверения провайдера и клиента сходятся на действительно исполняемой границе восстановления. Регуляторы там, где затронуты критические секторы, отвечали за взгляд за пределы отдельных контрактов на общие зависимости, которые ни одна отдельная фирма не могла увидеть.
Релевантный вопрос после следующего периферийного сбоя будет не о том, распределена ли сеть. Он будет о том, распределены ли независимо также программная судьба, операционные полномочия и возможности восстановления.

