知其然,知其所以然
微服务 2026-10-18

过载保护:队列满时丢哪一部分请求,以及怎么让上游慢下来

实测过载保护:无界 FIFO 在到达 300/s 以上时 500 ms 内成功为 0,有界队列加截止时间检查稳定在约 155/s;队满时丢哪个(tail / head / LIFO / 随机 / 按优先级)的延迟分布不同,按优先级丢让高优先级 100% 成功;有界队列的背压让上游从 500/s 降到 161/s,排队时间从 5.6 s 降到 0.7 s。

微服务 弹性 负载脱落 背压 队列 真实验证 动画演示
微服务 2026-10-18

降级:返回缓存或默认值的时机

实测降级:依赖不可用时无降级 100% 报错、502 ms,降级为缓存 0% 报错但仍等 203 ms 的超时,熔断 + 缓存的延迟中位数 0 ms;D 有长尾时超时 50 ms 的 p99 是 53 ms、800 ms 是 608 ms;过载时切到简化模式成功速率 153/s → 300/s(66% 是简化结果)。

微服务 弹性 降级 缓存 熔断 真实验证 动画演示
微服务 2026-10-18

慢节点与对冲请求:p99 被一个慢实例拉高,用冗余换尾延迟

实测慢节点与 hedging:一个慢节点把 p99 从 74 ms 拉到 178 ms、p50 几乎不变;delay 60 ms 的对冲把 p99 压到 135 ms,额外请求 27.8%;偶发长尾下对冲把 p99 从 434 ms 压到 158 ms,但负载接近容量(400/s)时对冲让 p99 从 1876 ms 变成 5754 ms。

微服务 弹性 对冲请求 hedging 尾延迟 慢节点 真实验证 动画演示
微服务 2026-10-18

故障注入与混沌实验:延迟、错误、断连怎么模拟,随机杀实例时的错误率

实测故障注入与混沌实验:TCP 代理注入延迟、重置、黑洞、限速、切碎(切碎时每个请求 14 s 而 2 s 的 socket 超时从不触发);应用层 20% 错误加 20% 慢响应下重试把成功率从 75.5% 拉到 94.2%;随机 kill -9 实例时不重试失败 9.8% 到 12.2%,重试换副本 0.0%。

微服务 弹性 故障注入 混沌实验 kill -9 真实验证 动画演示
微服务 2026-10-18

反向代理的请求流程与配置分层:读头、选 upstream、转发、回写,listener、路由、上游三层

实测 nginx 1.31.6 反向代理改写了什么:Host 默认变成 upstream 组名 u、带下划线的请求头被丢弃、不加 X-Forwarded-For;响应里 Server 被换成 nginx、Keep-Alive 被去掉、内部头原样泄露;listener、server 块、location、upstream 四步如何选出后端。

微服务 网关 nginx 反向代理 proxy_pass 真实验证 动画演示
微服务 2026-10-18

负载均衡算法:nginx upstream 的实际分布,与手写轮询、加权轮询

实测 nginx upstream 的分布:weight=5:1:1 得到 500 / 100 / 100;ip_hash 在所有请求地址相同时 700 个全到同一个后端;least_conn 在一个慢后端时让它只收 115 个、吞吐 325/s → 503/s;手写平滑加权轮询与 nginx 前 14 个选择完全一致。

微服务 网关 nginx 负载均衡 加权轮询 least_conn 真实验证 动画演示
微服务 2026-10-18

一致性哈希:节点增减时有多少 key 被重新映射,与手写实现

实测一致性哈希:取模在加或去掉一个节点时 90% 的 key 搬家,一致性哈希环只搬约 9% 到 10%(vnodes 越多越均匀,不均 2.26 → 1.05);nginx 普通 hash 加一个后端时 79.7% 的 key 归属变化,consistent 只变 23.8% 且全部搬向新节点。

微服务 网关 一致性哈希 nginx ketama 真实验证 动画演示
微服务 2026-10-18

被动健康检查与网关熔断:max_fails、fail_timeout 与摘除失败比例高的节点

实测 nginx 被动健康检查:默认 proxy_next_upstream 不把 503 算失败(client 看到 75 个 503),加 http_503 后 0 个;失败率 2% 的节点被摘除约 10.5 s、份额从 50% 降到 21%(只数次数不看比例);fail_timeout 10 s 时故障结束后 A 约 7.4 到 7.9 s 才恢复。

微服务 网关 nginx 被动健康检查 max_fails fail_timeout 真实验证 动画演示
微服务 2026-10-18

超时三件套:连接、发送、读取超时分别在什么时候触发

实测 nginx 的 proxy_connect/send/read_timeout 各自在什么时候触发(都是约 1 s 504,error.log 位置不同);读取超时是两次读之间的间隔,每 0.4 s 滴一个字节的响应 3.25 s 也不超时;GET 两个上游各等满 1 s 共 2.01 s,next_upstream_timeout 限制的是重试窗口而不是总时长。

微服务 网关 nginx 超时 proxy_read_timeout 真实验证 动画演示
微服务 2026-10-18

proxy_next_upstream:哪些错误会重试到下一个节点,非幂等请求的风险

实测 nginx proxy_next_upstream:默认只重试连接错误与超时,5xx 原样转给 client;加 non_idempotent 后 100 个 POST 里 50 个订单在 A 和 B 重复创建;三个上游全失败时默认放大 3.0 倍,tries 2 / 1 封顶为 2.0 / 1.0。

微服务 网关 nginx proxy_next_upstream 重试 幂等 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号