Резюме
- Cloudflare устранила инцидент
238b69fw6l554 августа в 07:12:40 UTC после того, как выпуск среды выполнения Workers открыл непредусмотренный глобальный объектTemporal. Temporal.Nowсообщал 1 января 1970 года, тогда какDateиDate.now()продолжали показывать правильное время.- Workers, которые устанавливали полифилл
Temporalтолько при отсутствии нативной реализации, могли незаметно пропустить полифилл и рассчитывать токены, TTL или арифметику дат относительно 1970 года. - Отдельный инцидент
qtn3z0pny08nне позволял развёртывать Workers и Workers for Platforms сnodejs_compatи датой совместимости 4 августа 2026 года или позже. - Cloudflare посоветовала пользователям удалить
nodejs_compatкак временный обход проверки развёртывания, а затем устранила этот инцидент в 03:03:00 UTC. - Cloudflare не раскрыла техническую первопричину ни одного из инцидентов, затронутую аудиторию, ущерб для клиентов или изменения в контроле выпусков, и не сообщила, что инциденты связаны.
Один релиз изменил то, что код считал существующим
Инцидент во время выполнения не был просто медленно идущими часами. Cloudflare сообщила, что последний выпуск Workers Runtime API открыл глобальный объектTemporal, который не должен был быть доступен. Поэтому определение возможностей вернуло другой ответ: код мог решить, что нативный API времени существует, хотя его часы были зафиксированы на эпохе Unix.
Это различие объясняет путь тихого отказа. Некоторые Workers устанавливали полифилл только тогда, когдаTemporalотсутствовал. После появления нового глобального объекта такие Workers могли перестать устанавливать известную реализацию и начать использовать неисправную. Cloudflare сообщила, что ошибка не возникала. Токен мог быть выпущен в нулевой момент времени и истечь в 1970 году; расчёт TTL или даты мог быть столь же неверным, пока Worker оставался отзывчивым.
DateиDate.now()не были затронуты. Эта граница важна, потому что случившееся не доказывает ни отказа каждой функции времени в Workers, ни того, что каждый Worker использовалTemporal. Подверженность зависела от логики приложения, определения возможностей и наличия условного полифилла.
Второй инцидент произошёл до этапа выполнения
Инцидент с развёртыванием действовал на другом этапе. Workers и Workers for Platforms с флагом совместимостиnodejs_compatи датой совместимости 4 августа или позже отклонялись. Код сначала не развёртывался и после этого не давал сбоев — слой управления отказывал в указанной конфигурации.
Cloudflare сообщила, что работает над смягчением проверки, и посоветовала удалить флаг, чтобы избежать ошибки. Это была инструкция по обходу, а не доказательство того, что каждое затронутое приложение могло безопасно работать без совместимости с Node.js. Флаг может означать API и поведение, от которых зависит Worker. Удаление без тестирования может заменить видимый сбой развёртывания на менее заметное различие во время выполнения.
Инцидент длился 4 000,289 секунды с момента открытия до устранения. Cloudflare не опубликовала число отклонённых развёртываний, сведения о том, были ли все регионы затронуты одинаково, и какие проверки изменились перед смягчением проверки.
Даты совместимости — это операционный интерфейс
Даты совместимости предназначены для того, чтобы платформа могла развиваться, не заставляя каждое приложение сразу принимать новое поведение. Поэтому это больше, чем документация: они часть контракта, используемого системами сборки, политиками развёртывания и процедурами отката.
Проверка от 4 августа показывает обратную сторону, когда сам контракт становится поверхностью сбоя. Команда, следующая опубликованному механизму — устанавливающая текущую дату и требуемый флаг совместимости, — могла быть заблокирована именно из-за этой комбинации. Процесс выпуска, который тестирует отдельные флаги, но не репрезентативные матрицы «флаг плюс дата», может пропустить этот класс регрессий.
Клиентам следует проверять будущие даты до основного окна выпуска, хранить последнюю заведомо рабочую дату совместимости и фиксировать, какие API действительно требуют каждого флага. Это не переносит ответственность за сбой платформы на клиента, но создаёт ограниченный вариант восстановления, пока провайдер чинит слой управления.
Определение возможностей требует семантических проверок
Инцидент сTemporalпоказывает связанную слабость распространённого защитного шаблона: «если глобальный объект существует, используй его». Наличие не означает корректность. Нативный объект может быть неполным, неправильно инициализированным или семантически несовместимым с полифиллом, который он вытесняет.
Более строгая проверка при запуске проверяла бы небольшой инвариант, например, находится ли полученный момент времени в приемлемом удалении от другого доверенного источника времени, прежде чем выбирать реализацию. Критические пути токенов и сроков действия также могут отклонять невозможные даты, а не выдавать правдоподобный, но неверный результат. Такие средства контроля стоят усилий на код и тесты, но защищают границу, где вышестоящая возможность незаметно меняет смысл.
Они также требуют осторожности.Date.now()в этом инциденте был корректен, но это не делает его универсальными независимыми часами. Урок в том, чтобы проверять семантическое предположение, от которого зависит приложение, а не объявлять один API постоянно авторитетным.
Устранение не описывает последствия
Инцидент во время выполнения оставался открытым 57 547,538 секунды — с 15:13:33 UTC 3 августа до 07:12:40 UTC 4 августа. Cloudflare сообщила, что неисправный глобальный объект был доступен с 30 июля, поэтому возможное воздействие на уровне приложений началось раньше времени инцидента. История статусов не говорит, сколько Workers использовали условный шаблон и превратились ли примеры ошибок в реальный ущерб для клиентов.
Аналогично устранённый инцидент с развёртыванием не показывает, сколько выпусков пропустили окно, сколько команд удалили флаг и не привёл ли какой-либо обходной путь к другой проблеме. Страницы статуса дают сведения о жизненном цикле, но редко содержат полный реестр последствий.
Полезный учёт для клиента поэтому находится локально: неудачные попытки развёртывания, Workers, обнаружившие глобальный объект, токены или TTL, выпущенные в период воздействия, отказы ниже по цепочке и последующая ротация или пересчёт. Без этих мер «незначительный» остаётся классификацией Cloudflare, а не количественной оценкой для каждого клиента.
Два инцидента не следует сводить к одной выдуманной причине
Оба события касались выпусков Workers и завершились в один день. Этой близости достаточно, чтобы обосновать проверку управления выпусками, но недостаточно, чтобы утверждать, что один неудачный релиз, одна команда или один технический дефект вызвали оба инцидента. Cloudflare такую связь не установила.
Общая аналитическая поверхность — контракт между изменениями платформы и автоматизацией клиентов. Одна регрессия изменила семантику возможностей во время выполнения, другая отклонила конфигурацию развёртывания. Обе могут обойти конвейер, который проверяет только доступность по HTTP. Для них нужны отдельные канареечные проверки: семантические зонды во время выполнения для первой и тесты развёртывания с будущими датами для второй.
Это более сильный вывод, чем просто назвать платформу ненадёжной. Он указывает наблюдаемые средства контроля, не выходя за пределы доказательств.
Источники
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров

