Temporal¶
В этой статье
Информация
Temporal - открытая платформа для создания надежных распределенных приложений. Решает одну из ключевых проблем современной разработки: как гарантировать выполнение критически важных процессов в нестабильной среде. Позволяет разработчикам сосредоточиться на бизнес-логике, а не на обработке сбоев инфраструктуры.
Temporal. Основные возможности¶
- Оркестрация рабочих процессов: обеспечивает надежное выполнение длительных бизнес-процессов. Автоматически обрабатывает сбои и повторы, гарантируя выполнение задач;
- Распределенные транзакции: обеспечивает согласованное выполнение операций между различными сервисами без использования распределенных блокировок;
- Таймауты и планирование: позволяет устанавливать таймеры и планировать выполнение задач с высокой точностью даже для длительных процессов;
- Масштабируемость: поддерживает горизонтальное масштабирование для обработки высоких нагрузок. Компоненты можно масштабировать независимо;
- Историческая отладка: сохраняет историю выполнения процессов, что позволяет анализировать и отлаживать рабочие процессы;
- Версионирование: поддерживает безопасное обновление рабочих процессов без прерывания выполняющихся задач;
- Наблюдаемость: интеграция с системами мониторинга и трассировки для контроля работы приложений;
- Multi-tenancy: обеспечивает изоляцию и управление ресурсами для нескольких команд или приложений.
Особенности сборки¶
ID | Совместимые ОС | VPS | BM | VGPU | GPU | Мин. ЦПУ (Ядер) | Мин. ОЗУ (Гб) | Мин. HDD/SDD (Гб) | Доступно |
---|---|---|---|---|---|---|---|---|---|
266 | Ubuntu 22.04 | + | + | + | + | 2 | 2 | 30 | Да |
- Предустановленные зависимости:
- Docker;
- docker-compose;
- Git (для клонирования репозитория).
- Дополнительные компоненты:
- Nginx (для обратного прокси);
- Postgresql (база данных);
- Elasticsearch (для хранения истории рабочих процессов);
- Grafana (для мониторинга);
- Prometheus (для сбора метрик);
- Jaeger (для распределенной трассировки);
- OpenTelemetry Collector (для сбора телеметрии);
- Рабочий каталог проекта:
/root/docker-compose
; - Файл для кастомизации:
/root/docker-compose/docker-compose-multirole_edited.yaml
Основные компоненты, имеющие веб-интерфейс:
Название | Локальный адрес и порт | Внешний адрес |
---|---|---|
Temporal UI | localhost:8080 | https://temporal{server_id_from_invapi}.hostkey.in |
Grafana | localhost:8085 | https://temporal{server_id_from_invapi}.hostkey.in/grafana/ |
Prometheus | localhost:9090 | https://temporal{server_id_from_invapi}.hostkey.in/prometheus/ |
Prometheus Metrics | - | https://temporal{server_id_from_invapi}.hostkey.in/prometheus/metrics |
Начало работы после развертывания Temporal¶
После оплаты заказа на указанную при регистрации электронную почту придет уведомление о готовности сервера к работе. В нем будет указан IP-адрес VPS, а также логин и пароль для подключения. Управление оборудованием клиенты нашей компании осуществляют в панели управления серверами и API — Invapi.
После перехода по ссылке из тега webpanel будет открыто окно авторизации.
Данные для авторизации, которые можно найти или во вкладке Информация >> Тэги панели управления сервером или в присланном e-mail:
- Ссылка для доступа к панели управления Temporal с веб-интерфейсом: в теге webpanel;
- Логин и Пароль для управления сервером: приходят в письме на вашу электронную почту при сдаче сервера.
Начальный экран и навигация¶
После перехода из тега webpanel будет открыт веб-интерфейс Temporal:
Главный экран отображает список рабочих процессов (Workflows) в выбранном пространстве имен. Сообщение "No Workflows running in this Namespace" означает отсутствие активных процессов в текущий момент.
Основные элементы интерфейса:
- Боковая панель слева предоставляет доступ к различным секциям системы;
- Верхняя панель показывает текущее пространство имен (по умолчанию "default");
- Кнопка
Start Workflowв правом верхнем углу для запуска новых процессов; - Таблица процессов с колонками Status, Workflow ID, Run ID, Type, Start, End.
Функциональные возможности
-
Запуск нового рабочего процесса:
- Нажатие на кнопку
Start Workflowв правом верхнем углу; - Заполнение необходимых параметров в появившейся форме;
- Подтверждение создания процесса.
- Нажатие на кнопку
-
Просмотр и фильтрация процессов:
- Использование кнопки
Filterдля отбора процессов по различным критериям; - Выбор любого процесса в таблице для просмотра подробной информации.
- Использование кнопки
-
Примеры кода:
- Доступны примеры интеграции через ссылки на репозитории GitHub:
- samples-go - примеры на Go;
- samples-java - примеры на Java;
- samples-typescript - примеры на TypeScript;
- samples-python - примеры на Python;
- samples-dotnet - примеры на .NET;
- samples-php - примеры на PHP.
- Доступны примеры интеграции через ссылки на репозитории GitHub:
-
Изменение настроек:
- Селектор UTC в верхнем правом углу для изменения часового пояса;
- Кнопка
предназначена для доступа к дополнительным настройкам интерфейса.
Типичные сценарии использования:
- Мониторинг процессов: регулярная проверка статуса выполняемых задач;
- Отладка: детальный анализ ошибок в случае сбоев;
- Управление рабочими нагрузками: запуск, приостановка и отмена процессов;
- Разработка новых процессов: использование примеров кода для создания собственных рабочих процессов.
Примечание
Подробная информация по использованию Temporal содержится в официальной документации разработчиков.
Тестирование Temporal с использованием Go (опционально)¶
Информация
Ниже описан процесс установки необходимых компонентов и тестирования Temporal с использованием примера Saga-паттерна на Go. Это тестирование демонстрирует ключевую возможность платформы — надежное выполнение долгоживущих бизнес-процессов с автоматической обработкой сбоев. Saga-паттерн решает проблему атомарности транзакций в распределенных системах через механизм компенсирующих действий.
1. Установка Go¶
Перед началом тестирования необходимо установить Go на сервер:
Обновите списки пакетов
Установите зависимости Скачайте последнюю версию Go (на момент написания это 1.22.1) Распакуйте архив в/usr/local
Настройте переменные окружения Активируйте изменения в текущем сеансе Проверьте установку 2. Клонирование репозитория с примерами Temporal¶
Перейдите в домашнюю директорию
Клонируйте репозиторий с примерами Go Перейдите в директорию с примерами3. Тестирование с использованием примера Saga¶
Saga-паттерн используется для управления распределенными транзакциями, обеспечивая возможность отката (компенсации) при ошибках.
Структура примера Saga
saga/
├── worker/main.go # Рабочий процесс, обрабатывающий задачи
├── start/main.go # Инициализирует рабочий процесс
├── activity.go # Определение действий (снятие/внесение средств)
├── workflow.go # Определение последовательности действий
└── shared.go # Общие определения
Запуск теста:
-
Запустите воркер (выполняйте в первом терминале):
Воркер зарегистрируется в Temporal и будет ожидать задачи. При этом в логах будут появляться сообщения о попытках получить задачи. -
Запустите стартер (выполняйте во втором терминале):
Стартер инициирует рабочий процесс перевода денег с одного счета на другой.
Ожидаемый результат:
В логах воркера вы увидите:
- Снятие денег со счета 001-001;
- Внесение денег на счет 002-002;
- Специально созданную ошибку в активности
StepWithError
; - Три попытки выполнить активность с ошибкой;
- Запуск компенсирующих действий:
- Возврат средств на первоначальный счет;
- Отмена снятия средств.
4. Проверка результатов через веб-интерфейс Temporal¶
- Откройте в браузере веб-интерфейс Temporal (по ссылке из тега webpanel);
- В интерфейсе найдите рабочий процесс с ID
transfer-money-workflow
; - Вы увидите полную историю выполнения рабочего процесса, включая все активности и компенсирующие действия:
Информация
В веб-интерфейсе Temporal вы увидите, что рабочий процесс transfer-money-workflow
имеет статус "Failed". Это не является ошибкой в настройке или выполнении теста, а является ожидаемым поведением для примера Saga. Данный пример специально разработан для демонстрации механизма компенсации при ошибке. Активность StepWithError
намеренно генерирует ошибку после выполнения операций снятия и внесения средств, чтобы продемонстрировать, как запускаются компенсирующие действия. Статус "Failed" в этом примере указывает на то, что механизм компенсации сработал корректно, и система вернулась в согласованное состояние после обнаружения ошибки.
Заказ сервера с Temporal с помощью API¶
Для установки данного ПО с использованием API следуйте этой инструкции.