Программный Кодекс
64 subscribers
1.84K photos
167 videos
2 files
477 links
👋 Привет, добро пожаловать на мой канал. Пишу об ИТ и рядом: новости компаний, комментарии, личные истории и наблюдения.
Download Telegram
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.

Инфраструктурный код заслуживает не меньше внимания, чем продакт-фичи.

Любая система уязвима, если в ней нет культуры устойчивости к дефектам.
Please open Telegram to view this post
VIEW IN TELEGRAM
June 19