Temporal — инструмент для управления бизнес-процессами.
Temporal состоит из нескольких компонентов:
- Server
- Worker
- Client
Server
Сервер Temporal реализует протокол взаимодействия между Client и Worker. Также Temporal выполняет оркестрацию процессов: следит за таймаутами, ретраями, предоставляет Web UI и другие возможности.
Worker
Worker подписывается на очередь событий, в которую пишет 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