{"id":51024130,"url":"https://github.com/nativebpm/temporal","last_synced_at":"2026-06-21T18:02:09.455Z","repository":{"id":361590267,"uuid":"1255042185","full_name":"nativebpm/temporal","owner":"nativebpm","description":null,"archived":false,"fork":false,"pushed_at":"2026-05-31T10:30:35.000Z","size":28,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-31T12:14:04.632Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://temporal.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nativebpm.png","metadata":{"files":{"readme":"README.RU.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-31T10:27:14.000Z","updated_at":"2026-05-31T10:36:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nativebpm/temporal","commit_stats":null,"previous_names":["nativebpm/temporal"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/nativebpm/temporal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativebpm%2Ftemporal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativebpm%2Ftemporal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativebpm%2Ftemporal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativebpm%2Ftemporal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nativebpm","download_url":"https://codeload.github.com/nativebpm/temporal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nativebpm%2Ftemporal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34620358,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-21T02:00:05.568Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-21T18:02:04.915Z","updated_at":"2026-06-21T18:02:09.445Z","avatar_url":"https://github.com/nativebpm.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Коннектор Temporal.io на Go\n\nВысокопроизводительная обертка для Temporal.io Go SDK, предоставляющая упрощенный интерфейс для клиента и воркера, структурированную конфигурацию на основе переменных окружения и готовую Docker-инфраструктуру.\n\n---\n\n## 1. Структура директории\n\n```\ntemporal/\n├── config.go         # Конфигурация подключения и TLS\n├── client.go         # Обертка над клиентом (запуск workflow, сигналы, запросы)\n├── worker.go         # Обертка над воркером (регистрация workflow и activity)\n├── docker/           # Конфигурация Docker Compose с PostgreSQL\n└── examples/\n    ├── helloworld/   # Простейший Workflow и Activity\n    ├── signal/       # Использование Signals и Queries для интерактива\n    ├── saga/         # Реализация паттерна Saga с компенсациями LIFO\n    └── loadtest/     # Инструмент для конкурентного нагрузочного тестирования\n```\n\n---\n\n## 2. Локальный запуск инфраструктуры (Docker)\n\nВ модуль включен преднастроенный файл Docker Compose, запускающий **Temporal Server v1.24.2** с СУБД **PostgreSQL 14**.\n\nДля запуска инфраструктуры:\n```bash\n# С помощью Makefile из папки temporal/:\nmake infra-up\n\n# Или вручную:\ncd temporal/docker\ndocker compose up -d\n```\nПосле запуска:\n- **Панель управления Temporal (Web UI)** доступна по адресу: [http://localhost:8233](http://localhost:8233)\n- **gRPC эндпоинт Temporal**: `localhost:7233`\n\n---\n\n## 3. Нагрузочное тестирование и CDC-делегирование\n\nМодуль поддерживает два типа архитектуры выполнения задач:\n1. **Классический gRPC polling (без CDC)**: Стандартный механизм Temporal, где воркеры опрашивают очередь задач напрямую через gRPC-соединения.\n2. **Делегирование через WAL CDC (Sequin)**: Высокопроизводительная схема разгрузки Temporal. Активность записывает задачу в таблицу `custom_task_queue` СУБД, Sequin считывает WAL логи PostgreSQL репликации и отправляет их в CDC Pull очередь, откуда легкие воркеры вытягивают задачи по HTTP и отправляют сигналы завершения обратно в Temporal. Все схемы и публикации СУБД для CDC автоматически накатываются через инструмент миграций **Atlas**.\n\n### Запуск нагрузочных тестов\n\n1. Убедитесь, что инфраструктура запущена (`make infra-up`).\n2. Для запуска классического теста (без CDC):\n   ```bash\n   make run-loadtest\n   ```\n3. Для запуска теста по схеме CDC-делегирования:\n   ```bash\n   make run-loadtest-cdc\n   ```\n\n---\n\n## 4. Показатели производительности\n\nВ ходе эталонного тестирования мы сравнили оба варианта под конкурентной нагрузкой:\n\n* **Классическая схема gRPC polling (без CDC)**:\n  - **1000 процессов** (2 000 задач): Завершено за **11.58 сек** при **86.32 RPS / 172.64 TPS** (Метрики задержки: p50=375мс, p90=1002мс, p99=1522мс, средняя=487мс. Успешно выполнено 100% задач).\n* **Схема CDC-делегирования через Sequin (Оптимизированная)**:\n  - **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% задач без сбоев СУБД).\n  - *Примечание*: Оптимизация пула TCP сокетов (`SetMaxOpenConns(150)`), отключение `fsync` в Postgres для тестов и масштабирование логических шардов Temporal до `512` позволили увеличить пропускную способность в 2 раза и сократить p99 latency в 4 раза (с 22.7с до 6.2с).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnativebpm%2Ftemporal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnativebpm%2Ftemporal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnativebpm%2Ftemporal/lists"}