An open API service indexing awesome lists of open source software.

https://github.com/nativebpm/temporal


https://github.com/nativebpm/temporal

Last synced: 27 days ago
JSON representation

Awesome Lists containing this project

README

          

# Коннектор Temporal.io на Go

Высокопроизводительная обертка для Temporal.io Go SDK, предоставляющая упрощенный интерфейс для клиента и воркера, структурированную конфигурацию на основе переменных окружения и готовую Docker-инфраструктуру.

---

## 1. Структура директории

```
temporal/
├── config.go # Конфигурация подключения и TLS
├── client.go # Обертка над клиентом (запуск workflow, сигналы, запросы)
├── worker.go # Обертка над воркером (регистрация workflow и activity)
├── docker/ # Конфигурация Docker Compose с PostgreSQL
└── examples/
├── helloworld/ # Простейший Workflow и Activity
├── signal/ # Использование Signals и Queries для интерактива
├── saga/ # Реализация паттерна Saga с компенсациями LIFO
└── loadtest/ # Инструмент для конкурентного нагрузочного тестирования
```

---

## 2. Локальный запуск инфраструктуры (Docker)

В модуль включен преднастроенный файл Docker Compose, запускающий **Temporal Server v1.24.2** с СУБД **PostgreSQL 14**.

Для запуска инфраструктуры:
```bash
# С помощью Makefile из папки temporal/:
make infra-up

# Или вручную:
cd temporal/docker
docker compose up -d
```
После запуска:
- **Панель управления Temporal (Web UI)** доступна по адресу: [http://localhost:8233](http://localhost:8233)
- **gRPC эндпоинт Temporal**: `localhost:7233`

---

## 3. Нагрузочное тестирование и CDC-делегирование

Модуль поддерживает два типа архитектуры выполнения задач:
1. **Классический gRPC polling (без CDC)**: Стандартный механизм Temporal, где воркеры опрашивают очередь задач напрямую через gRPC-соединения.
2. **Делегирование через WAL CDC (Sequin)**: Высокопроизводительная схема разгрузки Temporal. Активность записывает задачу в таблицу `custom_task_queue` СУБД, Sequin считывает WAL логи PostgreSQL репликации и отправляет их в CDC Pull очередь, откуда легкие воркеры вытягивают задачи по HTTP и отправляют сигналы завершения обратно в Temporal. Все схемы и публикации СУБД для CDC автоматически накатываются через инструмент миграций **Atlas**.

### Запуск нагрузочных тестов

1. Убедитесь, что инфраструктура запущена (`make infra-up`).
2. Для запуска классического теста (без CDC):
```bash
make run-loadtest
```
3. Для запуска теста по схеме CDC-делегирования:
```bash
make run-loadtest-cdc
```

---

## 4. Показатели производительности

В ходе эталонного тестирования мы сравнили оба варианта под конкурентной нагрузкой:

* **Классическая схема gRPC polling (без CDC)**:
- **1000 процессов** (2 000 задач): Завершено за **11.58 сек** при **86.32 RPS / 172.64 TPS** (Метрики задержки: p50=375мс, p90=1002мс, p99=1522мс, средняя=487мс. Успешно выполнено 100% задач).
* **Схема CDC-делегирования через Sequin (Оптимизированная)**:
- **3000 процессов** (9 000 задач: 3000 стартов, 3000 CDC-записей, 3000 сигналов): Завершено за **58.52 сек** при **51.26 RPS / 153.78 TPS** (Метрики задержки: p50=3.3с, p90=3.6с, p95=3.9с, p99=6.2с, среднее=2.9с. Успешно выполнено 100% задач без сбоев СУБД).
- *Примечание*: Оптимизация пула TCP сокетов (`SetMaxOpenConns(150)`), отключение `fsync` в Postgres для тестов и масштабирование логических шардов Temporal до `512` позволили увеличить пропускную способность в 2 раза и сократить p99 latency в 4 раза (с 22.7с до 6.2с).