Спирай скриптовете да се изпълняват два пъти: умна проверка преди старт
Спри да изпълняваш скриптове два пъти: интелигентна проверка преди старт
Случвало ли ти се е скрипт да мине успешно, а после да се стартира повторно? Често това се дължи на автоматични retry механизми, нервно повторно пускане или объркана CI/CD конфигурация. Резултатът е един и същ – миграциите в базата се прилагат два пъти, инфраструктурните ресурси се дублират и webhook-овете се задействат отново.
Точно тук идва на помощ предварителната проверка на състоянието.
Идентотентността не е гаранция
Повечето разработчици разчитат, че скриптовете им са идентотентни – тоест втори път няма да променят нищо. Теорията звучи добре, но на практика това е рисковано.
Представи си следните случаи:
- скрипт за създаване на AWS ресурси
- миграция на база данни
- обработка на webhook за регистрации
- batch job за синхронизация на данни
Дори и тези операции да са „почти“ идентотентни, бързото повторно изпълнение може да доведе до грешки. Таймстамп се обновява два пъти, брояч се увеличава неправилно или клиентът получава уведомление два пъти.
Проблемът е, че разчиташ на идентотентност без да имаш реално доказателство.
Проверка преди изпълнение
Съвременните практики се отказват от простата надежда, че скриптът ще се изпълни само веднъж. Вместо това се използва експлицитно проследяване на състоянието. Първа стъпка преди старта е да питаш: „Това вече изпълнявано ли е?“
Това е Kernprinzip на всякакви enterprise-grade валидационни системи. Те поддърат запис за състоянието – междувременно с timestamps, hashes, database flags или distributed locks – и отt