From 1862f058be5a03345cd36ae9040a5ae0113781e8 Mon Sep 17 00:00:00 2001 From: Repinoid Date: Sat, 10 Oct 2026 16:02:02 +0300 Subject: [PATCH] =?UTF-8?q?doc:=20=D0=A8=D0=B0=D0=B3=202=20=E2=80=94=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7=D0=B1=D0=B8=D0=B5=D0=BD=D0=B8=D0=B5=20data-p?= =?UTF-8?q?lane/control-plane?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HISTORY/2026-10-10-session-log.md | 8 ++++++++ doc/thinking/vm-public-entrypoint-2026-10-10.md | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/HISTORY/2026-10-10-session-log.md b/HISTORY/2026-10-10-session-log.md index 9221ca7..c787777 100644 --- a/HISTORY/2026-10-10-session-log.md +++ b/HISTORY/2026-10-10-session-log.md @@ -106,6 +106,14 @@ logrotate для `sqs.log`. - Billing/JWT не настроены. Проверено: сервис работает на существующем тенанте из Redis. +### 2.13. Шаг 2 — разбиение data-plane / control-plane +- `router.NewDataPlane` (публичный SQS API) + `router.NewControlPlane` (админка/метрики/UI). +- `main`: два листенера — `0.0.0.0:4100` (публично) и `127.0.0.1:4101` (control-plane, только локально). +- Проверено: публично `/admin`/`/metrics` → 403 (наружу не доступны), SQS API работает; локально + `4101/admin` → 200. Коммит `c1520c0`. +- Примечание: пока один процесс с двумя листенерами (общее in-memory состояние); два процесса — + после Шага 3. + ## 3. Грабли (для повторного использования) 1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`. diff --git a/doc/thinking/vm-public-entrypoint-2026-10-10.md b/doc/thinking/vm-public-entrypoint-2026-10-10.md index bdcedd8..e04bb26 100644 --- a/doc/thinking/vm-public-entrypoint-2026-10-10.md +++ b/doc/thinking/vm-public-entrypoint-2026-10-10.md @@ -141,3 +141,17 @@ curl -sS https://sqs.sinefo.ru/health - **logrotate** `/etc/logrotate.d/shared-sqs`: daily, rotate 7, compress, delaycompress, copytruncate, `su naeel naeel` (copytruncate — процесс держит файл открытым). - Billing (PostgreSQL) и JWT-валидация — **не настроены** (сервис работает без них). + +## 10. Разбиение data-plane / control-plane (Шаг 2, 2026-10-10, коммит `c1520c0`) + +- `router.NewDataPlane(store)` — публичный SQS API: `/health`, `/static`, `/examples`, SQS actions. +- `router.NewControlPlane(store, adminToken)` — админка: `/admin` (UI+API), `/metrics`, `/ui`, `/static`. +- `main`: два HTTP-сервера — data-plane на `0.0.0.0:<--port>` (4100, публично), control-plane + на `127.0.0.1:<--control-port>` (4101, только localhost). +- Проверено: публично `/health` → 200; SQS API работает; `/admin` и `/metrics` публично → **403** + (падают в SQS-auth — админка наружу **НЕ доступна**). Локально: `127.0.0.1:4101/admin` → 200, + `4101/metrics` без токена → 401. + +**Почему пока два листенера в одном процессе, а не два процесса:** состояние (очереди/тенанты) — +in-memory; два процесса разъедутся (админка создаст тенанта в своей памяти — data-plane его не увидит). +Полноценный процесс-split — после Шага 3 (Redis как источник истины).