Gateway Resilience
1. Tổng quan
Traefik cung cấp các mẫu resilience tích hợp sẵn — circuit breaker, rate limiting, retry, và health check chủ động — không cần plugin hay code tùy biến.
Nguồn: packages/gateway/config/dynamic/middlewares.yml (circuit breaker, rate limiting), infrastructure/deployments/develop/*/docker-compose.yml (health check)
2. Luồng Resilience
3. Circuit Breaker
Cấu hình
Nguồn: packages/gateway/config/dynamic/middlewares.yml (dòng 44–49)
circuit-breaker:
circuitBreaker:
# vế tỷ lệ 5xx hiện bị comment out trong source:
# expression: "ResponseCodeRatio(500, 600, 0, 600) > 0.30 || NetworkErrorRatio() > 0.10 || LatencyAtQuantileMS(95.0) > 3000"
expression: "NetworkErrorRatio() > 0.10 || LatencyAtQuantileMS(95.0) > 3000"
checkPeriod: 5s
fallbackDuration: 15s
recoveryDuration: 30sPhân tích Expression
| Điều kiện | Kích hoạt | Hoạt động? |
|---|---|---|
NetworkErrorRatio() > 0.10 | Hơn 10% request dẫn đến network error | Có |
LatencyAtQuantileMS(95.0) > 3000 | P95 latency vượt 3 giây | Có |
ResponseCodeRatio(500, 600, 0, 600) > 0.30 | Hơn 30% response là lỗi 5xx | Bị comment out trong source |
Expression dùng logic OR — bất kỳ điều kiện hoạt động đơn lẻ nào kích hoạt circuit breaker. Vế tỷ lệ 5xx có nhưng bị comment out trong middlewares.yml.
Tham số Thời gian
| Tham số | Giá trị | Mô tả |
|---|---|---|
checkPeriod | 5s | Tần suất expression được đánh giá |
fallbackDuration | 15s | Circuit ở trạng thái mở bao lâu trước khi thử hồi phục |
recoveryDuration | 30s | Pha hồi phục kéo dài bao lâu trước khi đóng hoàn toàn |
Máy Trạng thái
| Trạng thái | Hành vi |
|---|---|
| Closed | Vận hành bình thường — request đi qua |
| Open | Mọi request fail nhanh với 503 trong 15 giây |
| Recovering | Request giới hạn được phép để test hồi phục trong 30 giây |
Hàm Expression Có sẵn
| Hàm | Mô tả |
|---|---|
NetworkErrorRatio() | Tỷ lệ network error trên tổng request |
ResponseCodeRatio(from, to, dividedByFrom, dividedByTo) | Tỷ lệ response code trong các khoảng |
LatencyAtQuantileMS(quantile) | Latency tại quantile cho trước (0-100) |
4. Rate Limiting
Rate Limit Chung
Nguồn: packages/gateway/config/dynamic/middlewares.yml (dòng 53–59)
Áp dụng cho hầu hết dịch vụ — 200 request/giây theo IP client:
rate-limit:
rateLimit:
average: 200
burst: 400
sourceCriterion:
ipStrategy:
depth: 1Rate Limit riêng cho Auth
Nguồn: packages/gateway/config/dynamic/middlewares.yml (dòng 62–69)
Giới hạn nghiêm hơn cho endpoint xác thực — 30 request/phút theo IP client:
rate-limit-auth:
rateLimit:
average: 30
burst: 60
period: 1m
sourceCriterion:
ipStrategy:
depth: 1Rate Limiting theo IP
Cả hai rate limiter dùng sourceCriterion.ipStrategy.depth: 1 để trích IP client thực từ header X-Forwarded-For. Điều này cần thiết vì Traefik nằm sau Nginx — không có cài đặt này, mọi request sẽ trông như đến từ IP của Nginx và dùng chung một bucket rate limit.
Response Rate Limit
Khi rate limit bị vượt, Traefik trả về 429 Too Many Requests.
5. Health Check Chủ động
Nguồn: Docker labels trong infrastructure/deployments/develop/*/docker-compose.yml
Traefik định kỳ kiểm tra endpoint health của dịch vụ:
# Docker label theo từng dịch vụ
- "traefik.http.services.identity.loadbalancer.healthcheck.path=/v1/api/identity/health"
- "traefik.http.services.identity.loadbalancer.healthcheck.interval=30s"| Tham số | Giá trị | Mô tả |
|---|---|---|
path | /v1/api/<service>/health | Endpoint health check (IGNIS tích hợp sẵn) |
interval | 30s | Kiểm tra mỗi 30 giây |
Tất cả 7 dịch vụ backend (identity, commerce, sale, finance, inventory, payment, signal) có health check cấu hình ở khoảng 30 giây. Nếu một dịch vụ fail health check, Traefik ngừng route traffic tới nó cho đến khi hồi phục.
6. Retry (Theo từng dịch vụ)
Retry có thể cấu hình theo từng dịch vụ qua Docker labels. Không dịch vụ nào hiện cấu hình retry — cái này có sẵn cho dùng tương lai:
# Ví dụ: retry tối đa 3 lần cho dịch vụ commerce
- "traefik.http.middlewares.retry-commerce.retry.attempts=3"
- "traefik.http.middlewares.retry-commerce.retry.initialinterval=100ms"
- "traefik.http.routers.commerce.middlewares=retry-commerce@docker,rate-limit@file,circuit-breaker@file,security-headers@file"7. Trang liên quan
| Tài liệu | Mô tả |
|---|---|
| Tổng quan Gateway | Thẻ định danh + service catalog |
| Middlewares | Định nghĩa middleware đầy đủ từ source |
| Observability | Prometheus metrics, access logs, Grafana |
| Vận hành | Deploy, runbook, phân loại cảnh báo |
| Quyết định | ADRs |