June 12
Forwarded from Java hub
null, который положил Google Cloud Platform 😱
Вокруг только и разговоров, что о post-mortem недавнего инцидента в Google Cloud👩💻
12 июня Google Cloud прилёг. На несколько часов так прилёг. Упали App Engine, BigQuery, Cloud SQL, IAM, Cloud Run — и ещё с десяток ключевых сервисов.
А всё началось с Null Pointer Exception
29 мая в компонент GCP под названием Service Control добавили новую ветку логики для проверки квот. Код попал в прод, но не активировался — требовалась определённая конфигурация политики, которая на тот момент ещё не существовала.
12 июня эти политики всё-таки были задействованы. В Spanner (распределённая база данных от Google) записались данные с пустыми полями. Service Control начал использовать новую логику, где не было защиты от null. И началось: сервис стал падать в каждом регионе. Ошибки 503 прокатились по всем зависимым API. Глобальная катастрофа — за пару секунд.
Каковы корневые причины?
- Null Pointer Exception в новой логике квот.
- Отсутствие feature flag’а — код сразу пошёл "в бой", без фазового включения.
- Нет fallback-механизма (fail-open).
- Не было адекватного тестирования — критическая ветка не активировалась до продакшна.
- Мгновенная глобальная репликация метаданных — баг разлетелся по всему миру за секунды.
Кто бы мог подумать, что в 2025 году глобальный сервис положит банальный NPE.
Мы, Java-разработчики, к сожалению, не удивлены
null — это старая боль JVM.
Известный billion-dollar mistake, как его однажды окрестил Тони Хоар. За десятилетия было много попыток уменьшить ущерб от null:
- Kotlin с его строгой null safety.
- Optional в Java 8.
- Проект JSpecify, который пытается ввести строгую спецификацию аннотаций nullability.
- Черновик JEP'а про Nullable-типы на уровне JVM.
А ведь в Go (на нём пишут в Google), несмотря на переименование null в nil, проблемы всё те же, хе-хе👩💻
Крах Google Cloud — это textbook fail в области feature toggle практик.
Если бы новая логика была обёрнута в фичефлаг с постепенным rollout — баг бы нашли до продакшна.
Если бы был fail-open — сервис бы хотя бы не падал.
Если бы была деградация, а не crash loop — миллионы клиентов не увидели бы 503.
Инфраструктурный код заслуживает не меньше внимания, чем продакт-фичи.
Любая система уязвима, если в ней нет культуры устойчивости к дефектам.
Вокруг только и разговоров, что о post-mortem недавнего инцидента в Google Cloud
12 июня Google Cloud прилёг. На несколько часов так прилёг. Упали App Engine, BigQuery, Cloud SQL, IAM, Cloud Run — и ещё с десяток ключевых сервисов.
А всё началось с Null Pointer Exception
29 мая в компонент GCP под названием Service Control добавили новую ветку логики для проверки квот. Код попал в прод, но не активировался — требовалась определённая конфигурация политики, которая на тот момент ещё не существовала.
12 июня эти политики всё-таки были задействованы. В Spanner (распределённая база данных от Google) записались данные с пустыми полями. Service Control начал использовать новую логику, где не было защиты от null. И началось: сервис стал падать в каждом регионе. Ошибки 503 прокатились по всем зависимым API. Глобальная катастрофа — за пару секунд.
Каковы корневые причины?
- Null Pointer Exception в новой логике квот.
- Отсутствие feature flag’а — код сразу пошёл "в бой", без фазового включения.
- Нет fallback-механизма (fail-open).
- Не было адекватного тестирования — критическая ветка не активировалась до продакшна.
- Мгновенная глобальная репликация метаданных — баг разлетелся по всему миру за секунды.
Кто бы мог подумать, что в 2025 году глобальный сервис положит банальный NPE.
Мы, Java-разработчики, к сожалению, не удивлены
null — это старая боль JVM.
Известный billion-dollar mistake, как его однажды окрестил Тони Хоар. За десятилетия было много попыток уменьшить ущерб от null:
- Kotlin с его строгой null safety.
- Optional в Java 8.
- Проект JSpecify, который пытается ввести строгую спецификацию аннотаций nullability.
- Черновик JEP'а про Nullable-типы на уровне JVM.
А ведь в Go (на нём пишут в Google), несмотря на переименование null в nil, проблемы всё те же, хе-хе
Крах Google Cloud — это textbook fail в области feature toggle практик.
Если бы новая логика была обёрнута в фичефлаг с постепенным rollout — баг бы нашли до продакшна.
Если бы был fail-open — сервис бы хотя бы не падал.
Если бы была деградация, а не crash loop — миллионы клиентов не увидели бы 503.
Инфраструктурный код заслуживает не меньше внимания, чем продакт-фичи.
Любая система уязвима, если в ней нет культуры устойчивости к дефектам.
Please open Telegram to view this post
VIEW IN TELEGRAM
June 19
June 19