Skip to content

Operations

1. Deployment

Thuộc tínhGiá trị
Imageregistry/outreach:<tag>
Replicas (mặc định)1 (lưu lượng thấp; API không trạng thái)
Resources (req/lim)nhỏ - CPU/bộ nhớ theo baseline của cluster
HPA targetCPU (tuỳ chọn; lưu lượng tăng đột biến khi chạy chiến dịch)
ProbesGET /healthz (live), GET /readyz (ready)
Snowflake ID10 (APP_ENV_NODE_ID)
Chế độ migrationbun run migrate:dev / job khi khởi động; seed idempotent (alwaysRun)

Traefik labels

yaml
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.outreach.rule=PathPrefix(`/v1/api/outreach`)"
  - "traefik.http.services.outreach.loadbalancer.server.port=3000"

Chạy nhiều replica là an toàn: WebSocket emitter dựa trên Redis, nên bất kỳ replica nào cũng có thể phát tới mọi subscriber. Snowflake worker 10 phải là duy nhất cho từng process đang chạy nếu mở rộng quá một - cần điều phối APP_ENV_NODE_ID.

2. Observability

Tín hiệuNguồnNơi xem
Logsstdout (key-value có cấu trúc)kubectl logs <pod> / Loki
MetricsPrometheus /metrics (nếu bật)Grafana
Traceskhông hoạt động (chưa nối tracer)-
HealthGET /healthz, GET /readyzGateway portal
API specGET /v1/api/outreach/doc/openapi.json, /doc (Scalar)Browser

Trường log quan trọng

TrườngNguồnGhi chú
requestIdheader X-Request-IdTruyền xuyên các service
inquiryIdthông báo WSInquiry SENT | inquiryId: %s | rooms: %j
roomsthông báo WSCác phòng quan sát đích

3. Security

Mối quan tâmBiện pháp
Xác thực (AuthN)JWT (ES256, JWKS từ identity) trên CRUD + thống kê
Endpoint công khai/inquiries/submit, /subscribers/subscribe, /subscribers/unsubscribe không xác thực theo thiết kế
Lạm dụng / spamKhông có rate limit tích hợp - dựa vào middleware Traefik + WAF đặt trước các endpoint submit/subscribe công khai
Token huỷ đăng kýSnowflake unsubscribeToken, ẩn khỏi response của API; chỉ token hợp lệ mới vô hiệu hoá được - xem ADR-0001
Phân quyền (AuthZ)Permission của Casbin được seed cho OWNER/EMPLOYEE/CASHIER
Bí mậtK8s Secret được mount thành biến môi trường (DB, mật khẩu Redis)
TLSKết thúc tại gateway
Network policyCilium - cho phép gateway + identity JWKS + Redis + Postgres
Soft-deletedeletedAt; không hard-delete theo mặc định

4. Runbook

4.1 Các loại cảnh báo

Cảnh báoKích hoạt khiKiểm traKhắc phụcBáo lên
outreachHighErrorRate5xx >5% trong 5 phútlog level=errorkiểm tra kết nối DB / Redistrực backend
outreachSubmitFloodRPS submit tăng đột biếnmetric Traefikbật/tăng rate limit tại gatewaytrực SRE
outreachWSNotReadycảnh báo lặp lại Socket event service not readytình trạng Rediskhởi động lại pod / kiểm tra Redistrực backend

4.2 Thao tác thường gặp

Thao tácLệnh
Theo dõi logkubectl logs -n <ns> -f deploy/outreach
Chạy lại seedchạy migration (seed alwaysRun, idempotent) - chỉ người vận hành chạy
Kiểm tra spec trực tiếpmở /v1/api/outreach/doc
Xử lý spamđánh dấu các yêu cầu vi phạm thành CANCELLED qua CRUD của admin

Service này không có Kafka replay và không có BullMQ queue - không có gì để rút cạn hay phát lại.

5. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.