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至关重要。
认证和剥夺政策-合作伙伴的可预测性。