Kiến trúc
Gateway là một edge proxy, không phải dịch vụ. Không có máy trạng thái (không thực thể domain) — các kịch bản runtime dưới đây mô tả đường request-routing thay vào đó.
1. Bối cảnh hệ thống (C4 L1)
2. Góc nhìn Container (C4 L2)
Hai topology proxy riêng biệt dùng chung cùng ý định routing: Traefik cho Docker/prod, Nginx cục bộ cho dev native.
| Topology | Proxy | Khám phá | TLS | Dùng khi |
|---|---|---|---|---|
| Production / Docker | Traefik v3.6 | Docker labels (tự động) | Edge Nginx | Triển khai container hóa |
| Development native | Nginx cục bộ | Bảng route tĩnh nginx.conf | Không | Dịch vụ chạy trên host 127.0.0.1:31xx |
3. Góc nhìn Component (C4 L3) — Quyết định Routing
| Lớp | Nguồn Traefik | Nguồn Nginx cục bộ |
|---|---|---|
| Entrypoint | traefik.yml entryPoints.web/.traefik | listen 80 default_server |
| Routers | Docker labels (tự khám phá) | block location /v1/api/<svc>/ |
| Middlewares | middlewares.yml (file provider) | block proxy_set_header dùng chung |
| Upstreams | IP mạng Docker | upstream <svc>_upstream { 127.0.0.1:31xx } |
| Catch-all | router portal priority 1 | location / → JSON 404 |
4. Chỉ mục Máy trạng thái
N/A — gateway không quản lý thực thể có trạng thái. Cấu trúc runtime có trạng thái duy nhất là circuit breaker của Traefik, máy trạng thái của nó được tài liệu hóa trong Resilience.
5. Kịch bản Runtime
5.1 Request REST chuẩn (production, Traefik)
5.2 Request dev native (Nginx cục bộ)
5.3 Nâng cấp WebSocket Signal
5.4 Khám phá sức khỏe Portal
6. Mối quan tâm xuyên suốt
| Mối quan tâm | Gateway xử lý như thế nào |
|---|---|
| AuthN/AuthZ | Không tại gateway — JWT được mỗi dịch vụ xác thực (identity là issuer). Gateway chỉ basic-auth Traefik dashboard + portal. |
| TLS | Kết thúc tại edge Nginx, không phải Traefik (không có HTTPS entrypoint trong traefik.yml). |
| Rate limiting | Traefik rate-limit (200/s) / rate-limit-auth (30/min), theo IP qua ipStrategy.depth=1. |
| Resilience | Traefik circuit-breaker + health check chủ động. Xem Resilience. |
| Logging | Traefik JSON access logs; Authorization/Cookie bị bỏ. |
| Metrics | Prometheus trên :8080. Xem Observability. |
| IDs / Soft-delete / i18n | N/A — không có datastore. |