Яндекс Еда: год на Temporal в продакшене — архитектура, тестирование и миграции Workflow на Go
Простым языком
Temporal — это движок для оркестрации сложных бизнес-процессов, которые состоят из множества шагов и должны переживать сбои сервисов. Яндекс Еда использует его для обработки заказов: каждый заказ — это Workflow, который проходит через оплату, сборку, доставку. Если сервис упал, Temporal восстанавливает процесс с того же места. Статья описывает реальные подводные камни, с которыми столкнулась команда за год работы.
Что нового
- Процессинг заказов Яндекс Еды полностью переведён на Temporal — почти год в продакшене
- Детерминизм Workflow как главный constraint: nondeterministic операции изолируются в Activity
- Паттерн безопасной миграции существующей бизнес-логики на Workflow без остановки сервиса
- Подходы к тестированию Workflow-кода в Go: unit-тесты с replay и интеграционные тесты
- Версионирование Workflow для безопасного развития в продакшене с учётом backward compatibility
Вердикт
Статья обязательна к прочтению командам, планирующим миграцию на Temporal или на ранних этапах его внедрения. Особенно ценна для Go-стека. Основной вывод: детерминизм и версионирование нужно проектировать заранее, а не фиксировать постфактум.
Temporal требует детерминизма Workflow: все nondeterministic операции (время, рандом, внешние вызовы) выносятся в Activity, а версионирование Workflow-кода нужно проектировать до первого продакшен-релиза, иначе безопасный replay станет невозможен.