doc: Шаг 2 — разбиение data-plane/control-plane
This commit is contained in:
@@ -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`.
|
||||
|
||||
@@ -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 как источник истины).
|
||||
|
||||
Reference in New Issue
Block a user