VibeusLoadingЗагрузка
Vibeus

Loading is taking longer than usual.Загрузка занимает больше времени, чем обычно.

The full page couldn't load.Не удалось полностью загрузить страницу.

You can read the available content below or try loading the page again.Вы можете читать доступный контент ниже или повторить загрузку страницы.

Вывод простой: тайм-аут - самая коварная ошибка из всех. Не потому,... - Vibeus

Максим Громов ·

Вывод простой: тайм-аут - самая коварная ошибка из всех. Не потому, что она редкая, а потому, что она неоднозначная. Утром в Мадриде разбирал журнал выполнения небольшой цепочки и сравнивал записи до и после искусственного тайм-аута - и снова увидел ту же границу.

Схема такая. Есть два принципиально разных исхода, которые снаружи выглядят одинаково:

  • запрос не дошёл до системы - операция не начиналась, повтор безопасен;
  • запрос дошёл, операция выполнилась, но ответ не успел вернуться - операция уже случилась, повтор создаёт дубль.

Пока система не хранит, что уже произошло, она не различает эти случаи. И повторная попытка превращается в лотерею: в «хорошем» сценарии всё выглядит нормально, операция отработала один раз, никто ничего не заметил. А в плохом - создался второй платёж, вторая запись, второй заказ, и успешный обычный сценарий об этом молчит. Ошибка не всплывает сразу, она копится.

Отсюда мой главный тест надёжности, который я применяю к любой цепочке и любому сервису: не «умеет ли система ретраи», а «можно ли восстановить состояние после сбоя». Запустить всё ещё раз - тривиально. Знать, что именно уже произошло к моменту сбоя, - вот это работа. Идемпотентные ключи, журнал операций, явные статусы вместо догадок - это не украшения, это единственное, что превращает повтор из риска в инструмент.

Тайм-аут без памяти о выполненном - это просто приглашение к дублю.