В 2017 году инженер GitLab выполнял ночную задачу по обслуживанию базы данных. Нужно было очистить директорию на вторичном сервере - там, где хранилась реплика. Он открыл консоль и выполнил команду. Выполнил не на том сервере. Через несколько секунд он понял, что очистил директорию на основном сервере. Около 300 гигабайт реальных данных - проекты, комментарии, пользователи - исчезли. Восстановление заняло 18 часов. Часть данных вернуть не удалось. Этот случай разбирают до сих пор. Но интересен он не тем, что инженер ошибся...
Роман Лизякин Эра системного анализа
Он забыл одну строчку в документе - и банк списал деньги дважды у 40 тысяч клиентов
В феврале 2026 года бельгийский банк BNP Paribas Fortis перезапускал обработку, которая была прервана. Технический сбой привёл к тому, что платежи за 1, 2 и 3 февраля были проведены повторно. Около 40 000 транзакций оказались затронуты: покупки в магазинах, снятия наличных, регулярные списания. У некоторых клиентов деньги ушли дважды, а то и больше. Банк принёс извинения и пообещал всё исправить автоматически, без заявлений от клиентов. В октябре 2024 года похожая история случилась в России. Клиенты разных банков столкнулись с двойными списаниями при оплате через терминалы Сбера...
Одна база данных не может делать всё
В июле 2019 года Cloudflare - компания, через которую проходит трафик значительной части интернета - задеплоила обновление правила безопасности. Обычное обновление, каких сотни. Внутри правила было регулярное выражение - формула для проверки строк. Формула оказалась тяжёлой. Не ошибочной - синтаксически она была корректна. Но при определённых входных данных она заставляла процессор перебирать варианты, количество которых росло экспоненциально. Это называется катастрофическим бэктрекингом. Процессоры на серверах Cloudflare загрузились на сто процентов...
"И", "или" и "ровно одно": как три слова ломают интеграцию с банком
В ноябре 2023 года на Хабре вышел разбор инструмента для генерации кода из OpenAPI-спецификаций. Автор отметил вещь, которая многое объясняет: генерация кода для oneOf без дискриминатора превращается в интерфейс с методами AsClient() и AsIdentity(), и разработчику приходится вручную выбирать, какой вариант использовать. С дискриминатором - в нормальные типы с аннотациями, которые сами знают, какой перед ними вариант. Это не академическая деталь. Это разница между спецификацией, которая работает, и спецификацией, которая ломается при первой же интеграции...
Почему ваши схемы никто не понимает
В 2017 году инженер GitLab выполнял ночную задачу по обслуживанию базы данных. Нужно было очистить директорию на вторичном сервере - там, где хранилась реплика, а не оригинал. Он открыл консоль и выполнил команду. Выполнил не на том сервере. Через несколько секунд он понял, что очистил директорию на основном сервере. Около 300 гигабайт реальных данных - проекты, комментарии, пользователи - исчезли. Восстановление заняло 18 часов. Часть данных вернуть не удалось. Этот случай до сих пор разбирают на конференциях...

