Restate workflow фреймворк
Restate workflow фреймворк
Примерно 2 года назад я познакомился в проектом Temporal - оркестратором воркфлоу как код. Идея простая: если тебе нужно сделать отказоустойчивый, durable кусок бизнес логики, но ты не хочешь заниматься настройкой кафки и созданием своего оркестратора/саги, ты можешь просто использовать этот готовый фреймворк. Это было открытием для меня тогда.
У Temporal есть нюансы, минусы. Лично я считаю основным его минусом - high latency, который в целом можно пофиксить, но будет это костыльно (https://youtu.be/mTNUjZGTfZk?t=362). Чуть терпимее минус - магия в SDK на Go.
Недавно нашел хорошую альтернативу - Restate.dev. Пока что не сильно глубоко вдавался в то, как он работает, но все очень похоже. Основное отличие, которое бросается в глаза сразу - это отсутсвтие поллинга задач. Все задачи поступают с минимальной задержкой в воркеры и выполняются на столько быстро, на сколько это возможно, благодаря прямому запросу к воркеру от оркестратора. Думаю понятно, что это меняет всю архитектуру с ног на голову, дает реально low latency.
Я попробовал его в действии, в своем пет-проектике. Пока что это для меня такой же эксперимент, как год назад разработка UTXO индексатора. Не все еще известно, и не понятно, какие могут быть проблемы (а они точно будут, не сомневаюсь).
Но вот что, отмечу: это сука чистый кайф!
Описал сервис в protobuf, сгенерировал к нему сервер, клиент. Имплементировал логику кодом (похоже на gRPC). Все взаимодействие выглядит как будто ты общаешься по gRPC, но только с гарантиями исполнения. Это удобно, быстро. Все вызовы так же через сервер restate, но, поскольку работает это все в формате bi-directional канала между сервером и воркером, на сервере необходимо "зарегистрировать" воркер.
Их UI Это отдельный кайф!) Сделали Open API встроенный для всех зареганных сервисов/workflow, сразу с генерацией всего, что нужно. Запросы к серверу действительно выполняются до конца, даже с клиентском стороны можно "подключиться" к уже запущенному запросу, чтобы дождаться его завершения.
Меня очень радуют такие штуки, которые упрощают разработку, ускоряют ее. Это лично для меня оказалось глотком свежего воздуха в разработке (после code completion). Посмотрим, как получится на практике.