Зачем нужен отдельный сервис на Go для оркестратора
Что проверяют
Умеете ли вы обосновать архитектурное решение, а не повторять «Go быстрый». Интервьюер разделяет два вопроса: зачем выносить оркестрацию в отдельный сервис и почему именно на Go. Следом обычно спрашивают, что будет, если оркестратор упадёт посреди процесса.
Как отвечать
Про отдельный сервис:
- одно место для процесса: многошаговый сценарий вроде «зарезервировать товар, списать деньги, создать доставку» с компенсациями при сбое (сага). Оркестратор знает весь сценарий, а участники не знают друг о друге;
- свой жизненный цикл: его масштабируют и выкатывают отдельно, а сбой одного из участников не теряет состояние процесса;
- надёжность: состояние каждого процесса хранится в базе, шаги идемпотентны, повторы идут с backoff и таймаутами, события публикуются через outbox. После рестарта процесс продолжается с последнего сохранённого шага.
Про Go:
- конкурентность: горутины и
context.Contextдля отмены и дедлайнов,errgroupизgolang.org/x/syncдля параллельных вызовов с общей обработкой ошибок; - эксплуатация: статический бинарник, маленький образ, быстрый старт, скромный расход памяти;
- экосистема: gRPC,
client-goиcontroller-runtime, если оркестратор управляет ресурсами Kubernetes, который сам написан на Go.
Честно добавьте, что язык здесь вторичен: если команда пишет на Java, оркестратор на Java тоже нормальный выбор. И перед тем как писать свой, сравните с готовыми движками: Temporal (его сервер написан на Go, есть Go SDK), Camunda, Argo Workflows для задач в Kubernetes.
Где спотыкаются
Отвечают только про язык. Горутины объясняют, почему Go подходит, но не объясняют, зачем вообще отдельный сервис.
Держат состояние процесса в памяти горутины. Первый же деплой или падение пода обрывает незавершённые саги, и данные остаются в полусогласованном виде.
Не называют цену. Оркестратор становится критической зависимостью и точкой отказа, добавляет сетевые переходы и рискует превратиться в сервис, куда стекается вся бизнес-логика. Хороший ответ упоминает альтернативу: хореографию через события, где центра нет.