API網關和路由
1) API網關在體系結構中的作用
API網關-微服務中的單個入口點。他是:- 路由查詢(路徑/頭/地理/重量/版本)。
- 保護外圍(TLS/mTLS, WAF, DDoS, rate limits, authN/Z)。
- 控制流量(canary/AB,shadow/mirror,電視頻道breaker,retrai,taymout)。
- 標準化協議(REST/gRPC/WebSocket),標題,代碼。
- 觀察(標記,度量,跟蹤,傾斜)。
- 轉換和驗證(JSON/XML,歸一化,計劃驗證)。
對於iGaming來說,這也是地理合規性(按國家/年齡劃分)、支付智能路由和負責任的邊緣遊戲政策。
2)路由選項
Path-based: `/api/v1/payments/ → payments-svc`.
Host-based: `eu.api.example.com → eu-edge`, `psp.example.com → psp-proxy`.
基於Header: 'X-Client: Partner-A' →合作夥伴支持;'接受:application/grpc'。
Geo-routing:通過IP/ASN/國家/地區 (GDPR/本地禁令, latency)。
加重/金絲雀:舊版本為「90%」,新版本為「10%」;快速回滾。
Claim-routing: по `JWT.claims.tier/role/region'(例如高滾動→高級限制)。
Failover:數據中心/雲和PSP之間的資產/資產放電。
3)外圍安全
TLS everywhere: TLS 1.外觀2+,內部mTLS(shlyuz↔servisy)。
OAuth2/JWT:簽名核實,「exp/nbf/aud/scope」審計,JWKS輪換;TTL驗證的kesh。
HMAC: webhooks/付款主體的簽名。
API密鑰:用於系統客戶端;我們與配額/角色相關聯。
WAF:基本規則(injection,protocol anomalies),體型,deny-list國家。
DDoS保護:連接限制,SYN Cookie,IP/密鑰/尾端限制。
零信任:授權政策(SPIFFE/SPIRE,服務身份),最低權利原則。
隱私:在日誌中編輯PII,掩蓋PAN/IBAN,保留策略。
4)限制,配額和防盜保護
Модели: token bucket, leaky bucket, fixed/sliding window.
邊界:per-IP,per-key,per-user,per-route。
另外:- Burst+sustained(例如「50 rps burst」,「10 rps sustain」)。
- Retry-Budget和Slow-Loris保護(閱讀時間)。
- 按合作夥伴/月分列的Quota。
5)轉換和驗證
Normalize標題(trace-id, locale, client-id)。
請求/響應映射(字段/代碼,隱藏內部屬性)。
施加前的Schema驗證(OpenAPI/JSON Schema)是4xx的早期故障。
Compression/'Accept-Encoding",caching(請參見下文)。
6)腰帶和性能
Edge-kesh用於參考書,公共元數據,configs(TTL,「ETag」/「If-None-Match」)。
Micro-kesh 1-5每熱GET(降低峰值負載)。
Negative-cache簡短(404/empty)-小心。
Hedging-requests和在p95>閾值下對復制副本的競爭性查詢。
7)Taymauts,retrai,可持續性
Taymauts: connect/read/write分開;合理的p95地標。
Retrai: idempotent方法(GET/PUT)c backoff+jitter;retry-budget.
POST相似性:「Idempotency-Key」+服務/網關側重復數據消除。
Circuit-Breaker:通過錯誤/後退;半開放樣本。
Bulkhead/池隔離在 apstrims上。
8)轉化與兼容性
方法:- URI:「/v1/……」(簡單但是「噪音」路線)。
- Header/Content-Negotiation: `Accept: application/vnd.app.v2+json`.
- 功能標誌/服務器能力-用於次要更改的兼容性。
策略:SemVer,支持窗口(例如「v1」=12-18個月),剝奪圖,擴展時兼容的響應(添加字段-不會打破)。
9)可觀察性和質量控制
相關性:「traceparent」/「x-request-id」是必需的;向下滾動。
OpenTelemetry:事件RPS/p50/p95/p99/5xx/4xx度量,aturation, retry/circuit。
Logs:結構JSON;偽裝PII;各級代碼。
預告片采樣:基本5-10%+針對錯誤/慢速。
SLO/Alerts:路線/客戶(aptime、latency、錯誤)。
10)發布流量管理
藍綠色:DNS/LB切換。
金絲雀:權重/細分(區域,合作夥伴,角色)。
Shadow/Mirror:將流量復制到新版本,但未回復到客戶端。
Kill-switch:用於快速關閉有問題的apstrim/fichi的標誌。
11)智能支付路由(iGaming)
PSP選擇規則: 地質,貨幣,金額,風險,可用性,傭金.
Failover PSP:在「5xx/timeout」下自動過渡。
Same-method規則:通過原始方法返回/推論-邊緣驗證。
支付偶然性:「userId+amount+currency+purpose」上的密鑰。
ETA透明度:網關添加狀態和故障原因(非PSP代碼)。
12)跨地區政策與合規性
Geo過濾器:白色/黑色國家列表,年齡限制,IP排名。
居民數據:路由到區域集群(GDPR/本地法律)。
Logs和TTL:按地區存儲,自動匿名。
13)配置示例
13.1 NGINX(路由+限制+頭)
nginx http {
map $http_x_request_id $req_id { default $request_id; }
limit_req_zone $binary_remote_addr zone=per_ip:10m rate=20r/s;
server {
listen 443 ssl http2;
server_name api. example. com;
Security add_header Strict-Transport-Security "max-age = 31536000" always;
add_header X-Content-Type-Options nosniff;
Limit on IP location/api/v1/{
limit_req zone=per_ip burst=40 nodelay;
proxy_set_header X-Request-Id $req_id;
proxy_set_header X-Client-Ip $remote_addr;
proxy_read_timeout 5s;
proxy_connect_timeout 1s;
proxy_pass http://payments_v1;
}
Canary traffic by header location/api/v2/{
if ($http_x_canary = "1") { proxy_pass http://payments_v2; }
proxy_pass http://payments_v1;
}
}
}
13.2 Envoy (JWT, rate limit, retries, outlier)
yaml static_resources:
listeners:
- name: https address: { socket_address: { address: 0. 0. 0. 0, port_value: 443 } }
filter_chains:
- filters:
- name: envoy. filters. network. http_connection_manager typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. network. http_connection_manager. v3. HttpConnectionManager route_config:
name: local_route virtual_hosts:
- name: payments domains: ["api. example. com"]
routes:
- match: { prefix: "/api/v1/payments" }
route:
cluster: payments_v1 timeout: 5s retry_policy:
retry_on: "connect-failure,refused-stream,5xx,retriable-status-codes"
num_retries: 2 per_try_timeout: 2s http_filters:
- name: envoy. filters. http. jwt_authn typed_config:
"@type": type. googleapis. com/envoy. extensions. filters. http. jwt_authn. v3. JwtAuthentication providers:
main:
issuer: "https://auth. example. com/"
remote_jwks: { http_uri: { uri: "https://auth. example. com/.well-known/jwks. json" } }
forward: true rules:
- match: { prefix: "/api/" }
requires: { provider_name: "main" }
- name: envoy. filters. http. ratelimit
- name: envoy. filters. http. router clusters:
- name: payments_v1 connect_timeout: 0. 5s type: STRICT_DNS lb_policy: ROUND_ROBIN load_assignment: { cluster_name: payments_v1, endpoints: [{ lb_endpoints: [{ endpoint: { address: { socket_address: { address: payments, port_value: 8080 }}}}]}] }
outlier_detection: { consecutive_5xx: 5, interval: 5s, base_ejection_time: 30s }
14)支票單
在路由發布之前
- 驗證方案(JWT/JWKS, keys, TTL)。
- Taymauts/retrai/Idempotity設置。
- 限制:IP, per-key, per-route;夥伴配額。
- 請求/答復模式的驗證。
- 使用PII面膜「trace-id」進行日誌和跟蹤。
- SLO/Alerts和dashbord。
- 地理規則/合規性/年齡驗證。
交易和付款
- PSP智能路由:規則、優先級、操縱器。
- Same-method在邊緣進行檢查。
- 客戶端的透明狀態和錯誤代碼(不含原始PSP代碼)。
發行版
- 金絲雀/AB和殺手開關,回滾計劃。
- 影子流量到新版本,比較指標。
- 負載測試和p95目標。
15)質量指標(最低限度)
路線上的可用性/SLO;error rate 5xx/4xx.
Latency p50/p95/p99(外部和內部)。
Retry/timeout/circuit事件(噪音級別)。
Cache命中率和RPS節省。
Rate-limit命中和丟棄的查詢。
PSP-routing KPI:成功,TtW, failover百分比,傭金。
16)反模式
一個「全部」的一般限制。
沒有jitter的「即時」retrai(風暴加劇)。
對「X-Forwarded-For」的信任,而無需歸一化和受信任的代理列表。
不包括p95(假陽性)的固體時間。
剛性轉換,切斷互操作性。
帶有PII/PAN/秘密的徽標。
在單個域/策略下混合內部和外部API。
17)答案和錯誤模板(微觀)
429 Too Many Requests: "將達到查詢限制。在N秒後重復或增加合作夥伴辦公室的配額"
401/403: "令牌無效/過期。重新登錄"
408/504: "服務的響應時間比預期的要長。請求未被接受"
Idempotency-conflict: 「已經處理了此類Idempotency-Key的請求(狀態:成功/失敗)。」
18)實施過程(按步驟)
1.路線模型:域/路徑/區域地圖。
2.安全策略:TLS/mTLS, WAF, authN/Z, keys/JWKS。
3.可靠性: taymauts, retrais, idempotency, circuit-breaker.
4.可觀察性:logi/度量/tresa,韓元。
5.Kesh/perf: edge/micro-cache,壓縮,連接池。
6.支付路由:規則、測試、監控。
7.發行版本:canary/shadow,kill-switch,回滾計劃。
8.合規性/地質:國家過濾器,數據存儲,年齡。
最終的spargalka
嚴格的周長(TLS/mTLS,WAF,限制)+受控流量(中繼站,電路,金絲雀)。
邊緣的驗證和轉化→「內部」較少缺陷。
trace-id和PII掩碼的可觀察性不是選項,而是標準。
智能路由支付和合規性-對iGaming至關重要。
認證和剝奪政策-合作夥伴的可預測性。