Temporal Minimal SetupTemporal — инструмент для управления бизнес-процессами.
Temporal состоит из нескольких компонентов:
- Server
- Worker
- Client
ServerСервер Temporal реализует протокол взаимодействия между Client и Worker. Также Temporal выполняет оркестрацию процессов: следит за таймаутами, ретраями, предоставляет Web UI и другие возможности.
WorkerWorker подписывается на очередь событий, в которую пишет Server. Server размещает в очереди задачи, которые могут быть разных типов. Задачи Workflow обрабатываются одним воркером в один момент времени. Задачи Activity обрабатываются пулом процессов.
ClientПрограммный код, который ставит задачу Server и может ожидать результат выполнения.
WorkflowБизнес-логика вашего процесса. Никаких сетевых запросов, обращений к файлам, системному времени, генераторам случайных чисел — только детерминированный код.
Workflow может вызывать другой Workflow или Activity. При выполнении Workflow сохраняет чекпоинты в истории на Server. При перезапуске процесса пройденные шаги не выполняются заново, а восстанавливаются из истории. Перезапуск может произойти из-за ошибки, таймаута или внешнего сигнала. История доступна в Web UI.
ActivityЗдесь может быть любой код: сетевые запросы, работа с файлами, внешние API.
Activity вызывается только из Workflow. Когда Workflow вызывает Activity, результат сохраняется в истории и при Replay не выполняется повторно.
---
Быстрый стартЯ подготовил минимальный шаблон для работы с Temporal на PHP.
Шаги:1. Клонировать репозиторий
2. Убедиться, что установлены PHP 8.1+ и расширение grpc
3. composer install — установит PHP-зависимости
4. ./vendor/bin/dload — скачает RoadRunner (`rr`) и Temporal CLI (`temporal`)
5. ./temporal server start-dev — запустит Temporal Server
6. ./rr serve — запустит RoadRunner с воркерами
Теперь Temporal Server готов к работе, а RoadRunner запустил воркеры для обработки Workflow и Activity.
Выполнение задачи:Не выключая предыдущие команды, запустите:
php client.php
Путь данных:1. Client отправляет задачу в Temporal Server
2. Server размещает задачу в очереди
3. RoadRunner получает задачу и передаёт в Workflow
4. Workflow выполняет логику и запрашивает Activity
5. Server размещает задачу для Activity
6. Activity выполняется, результат сохраняется
7. Workflow получает результат, завершается
8. Client получает итоговый результат
—
GitHub:
https://github.com/xepozz/temporal-minimal-example—
Пост был доступен в 🐘 PHP People.
Для получения доступа можно подписаться в
@phpeople_bot—
@handle_topic