Найти тему

Сравнение синхронных запросов и асинхронных мутаций с помощью Temporal

Если ваша система требует высокой надёжности и масштабируемости, а сбои и задержки синхронных запросов могут критично повлиять на бизнес-процессы — Temporal.io подходящий вариант. Рассмотрим применение temporal на примере проекта "Кредитная платформа"

1. Синхронные запросы между модулями SCS

Как это работает:
Каждый модуль посылает запрос другому модулю (например, проверка залога делает запрос на проверку клиента для получения имени заемщика). Запросы проходят через API и ждут ответа в реальном времени.

Преимущества:
- Простота: Понятная реализация, особенно если все модули уже имеют API.
- Быстрая отдача данных: Если всё работает идеально и запросы возвращают ответы быстро, то система может выдавать результат сразу.
- Консистентность в реальном времени: Получаешь "актуальные" данные прямо в момент запроса.

Недостатки:
- Низкая надежность: Если хотя бы один модуль "завис" или упал, вся цепочка запроса может тоже зависнуть или, что ещё хуже, привести к общей деградации системы.
- Зависимость от сети: Проблемы с сетью (даже кратковременные) приведут к задержкам или ошибкам.
- Проблемы с масштабированием: Чем больше синхронных запросов между сервисами, тем выше риск каскадных сбоев. Один медленный или недоступный сервис влияет на всё.
- Время ожидания: Модули вынуждены ждать ответа, что может замедлить общую производительность системы (особенно если модуль, к которому идет запрос, занят другими задачами).

Пример:
В модуле "проверка клиента" идёт синхронный запрос на модуль "подбор продукта" для получения данных по первому взносу. Если сервис "подбор продукта" испытывает проблемы, то проверка клиента не может продолжиться.

2. Асинхронные мутации через Temporal

Как это работает:
Асинхронные процессы через Temporal.io организуют выполнение задач независимо от их моментального статуса. Temporal позволяет запускать workflow'ы, которые могут отслеживать состояние данных и гарантировать выполнение всех этапов. Модули посылают запросы без необходимости ожидания немедленного ответа. Temporal отслеживает их выполнение и завершение, обеспечивая консистентность через оркестрацию.

Преимущества:
- Надежность: Temporal гарантирует выполнение задач, даже если сервисы временно недоступны. При восстановлении модуля процесс продолжится с того места, где остановился.
- Отслеживаемость: Можно видеть, на каком этапе находится каждый процесс, и перезапускать его, если что-то пошло не так.
- Отсутствие жёсткой синхронизации: Нет необходимости держать цепочку запросов заблокированной. Каждый модуль может заниматься своими задачами и обрабатывать данные по мере готовности.
- Масштабируемость: Разные части системы работают независимо, и сбои в одном модуле не парализуют всю систему. Temporal выдерживает работу с большими нагрузками и сложными процессами.
- Устранение задержек: Модули не ждут завершения операций в реальном времени, что позволяет избежать простоя и ускорить общую работу.

Недостатки:
- Сложность реализации: Нужно правильно организовать workflow'ы, учесть возможные зависимости между данными, исключения и состояние каждого процесса.
- Отложенная консистентность: В данных может быть временное рассинхронизирование между модулями, так как ответы приходят асинхронно.

Пример:
Вместо синхронного запроса "формирование досье" к "подбору продукта" на получение первого взноса, "подбор продукта" запускает workflow в момент изменения корзины, и это изменение доставляется всем scs системам, каждый модуль отрабатывает свою часть задачи по мере доступности. Если сервис временно недоступен, он не блокирует процесс — данные подтянутся позже, когда сервис восстановится, а Temporal автоматически продолжит обработку.
Сравнение синхронных запросов и асинхронных мутаций с помощью Temporal Если ваша система требует высокой надёжности и масштабируемости, а сбои и задержки синхронных запросов могут критично повлиять на
3 минуты