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

自己写一个最小的 trace 收集器

自己写了一个 57 行的最小 trace 收集器(OTLP/HTTP 解析 + SQLite):与 SDK 里的 12194 个真实 span 逐个对得上;逐个提交只有 2,833 span/秒,按请求批量写是 17 万 span/秒;按 trace_id 加索引后查一个 trace 从 22.2 ms 降到 0.009 ms;丢 5% 的 span 会让 21.1% 的 trace 残缺。

微服务 可观测性 链路追踪 OTLP 收集器 SQLite 真实验证 动画演示
微服务 2026-10-19

指标的存储与压缩:时序数据怎么编码(与编码系列呼应)

实测时序数据编码:我按 Gorilla 论文写的编码器能无损还原,恒定值 0.26 字节/样本、计数器约 1.9~2.0、随机游走的浮点 gauge 7.83;Prometheus 3.15.0 真实存下的 chunk 平均 4.43 字节/样本(我的编码器 3.74),index 每条序列约 109 字节;真实抓取的时间戳有毫秒级抖动,时间戳要 6.51 位/样本。

微服务 可观测性 Prometheus 时序数据库 Gorilla 压缩 编码 真实验证 动画演示
微服务 2026-10-19

Sidecar 的流量劫持:iptables 规则做了什么

在 Linux 容器里实测 sidecar 的 iptables 流量劫持:出站 REDIRECT 到 15001 后,应用对不存在的 10.99.0.5:8080 的请求(原本 2018 ms 超时)3 ms 返回,sidecar 靠 SO_ORIGINAL_DST 看到原始目的地址;去掉对 sidecar 自己的放行规则会循环(31 个连接);排除 3306 端口后不经过 sidecar;入站 REDIRECT 到 15006 后 8080 的请求先到 sidecar。

微服务 服务网格 sidecar iptables 流量劫持 Docker 真实验证 动画演示
微服务 2026-10-19

Envoy 的 xDS:LDS、RDS、CDS、EDS

用自己写的最小 ADS 控制平面实测 Envoy 的 xDS:启动时 CDS → EDS → LDS → RDS 依次请求;坏监听器被 NACK(version_info 仍是上一个被接受的版本),流量不受影响;EDS 更新到流量切换中位数 1.4 ms;路由指向没有端点的新集群时 1 s 内 67 个请求都是 503;控制平面断开 6 s,102 个请求全部成功。

微服务 服务网格 Envoy xDS 控制平面 ADS 真实验证 动画演示
微服务 2026-10-19

Envoy 的过滤器链

实测 Envoy 的 HTTP 过滤器链:故障注入在限流之前时 200 是 98 个、429 是 99 个,颠倒顺序后 200 只剩 49 个、429 变成 301 个;router 不是最后一个时 Envoy 拒绝启动;路由级的 typed_per_filter_config 让 /health 不被限流(300 个全部成功);20 个简单 Lua 过滤器让 p50 延迟多 51 µs。

微服务 服务网格 Envoy 过滤器链 限流 故障注入 真实验证 动画演示
微服务 2026-10-19

Envoy 的异常检测、熔断、重试与超时策略

实测 Envoy 的重试、熔断与异常点检测:retry_on 5xx 且避开已试过的主机,成功率从 75.5% 到 100.0%,后端多收 28% 的请求;per_try_timeout 把 p99 从 1013 ms 降到 229 ms;max_connections 2 加等待队列 2 时 20 个并发请求只有 4 个成功,16 个立即 503;两个坏主机都被摘除后触发 panic 模式,失败比例仍有 57%~67%。

微服务 服务网格 Envoy 重试 熔断 异常点检测 panic 真实验证 动画演示
微服务 2026-10-19

mTLS:证书签发与轮换

实测 Envoy 的 mTLS:不带证书、未知 CA、过期证书的客户端都会在握手阶段被拒绝;原子替换 SDS 文件后 30 ms 内新握手用上新证书,199 次握手没有失败;证书过期后 Envoy 仍然提供这张证书,客户端拒绝,窗口一直到轮换完成;CA 轮换必须先分发信任包。

微服务 服务网格 mTLS 证书轮换 SDS Envoy 真实验证 动画演示
微服务 2026-10-19

流量镜像:影子流量的用法

实测 Envoy 的流量镜像:客户端永远只拿到 prod 的响应;shadow 慢 1 s、返回 500、整个停了,客户端成功率都是 100.0%;镜像比例用 runtime_fraction 控制;shadow 的熔断器限住后 1200 个镜像请求只有 15 个到达;镜像的 POST 会在 shadow 里再执行一遍。

微服务 服务网格 Envoy 流量镜像 shadow 灰度 真实验证 动画演示
微服务 2026-10-19

滚动发布时客户端看到的错误窗口:readiness 摘流的时间差与 preStop

实测滚动发布的错误窗口:没有任何保护时 1173 个请求失败 157 个(13.38%);加 readinessProbe 后启动阶段的 refused 从 126 降到 4;再加 preStop sleep 5 或让应用优雅退出,这次测量是 0 失败;长连接客户端在只有 preStop 时仍有 53 次 reset,应用优雅退出后为 0。

微服务 滚动发布 readinessProbe preStop 优雅退出 Kubernetes 真实验证 动画演示
微服务 2026-10-19

Helm 的模板渲染与值覆盖,以及与 Kustomize 的取舍

实测 Helm 模板和 Kustomize 叠加层:三个环境渲染结果逐字段相同(配置 84 行对 83 行,渲染 28 ms 对 32 ms);Helm 的 --set 对模板没引用的键静默无效,Kustomize 补丁能改任意字段;values 里不加引号的 1.10 渲染成 1.1;改 ConfigMap 不触发滚动,要靠 checksum 注解或 configMapGenerator。

微服务 Helm Kustomize 配置管理 发布 真实验证 动画演示
微服务 2026-10-19

Helm 升级与回滚的状态

实测 Helm 4.3.1 的发布与回滚:每个 revision 存成一个 Secret,默认只保留 10 个;upgrade 到坏镜像默认返回 0,--wait 30 s 后失败但不回滚,--rollback-on-failure 自动回滚;helm rollback 是新建一个 revision;Helm 4 默认服务端应用,kubectl 手工改过的字段会让 upgrade 和 rollback 报冲突。

微服务 Helm 发布回滚 helm upgrade helm rollback Kubernetes 真实验证 动画演示
微服务 2026-10-19

Sidecar 的资源开销:延迟与内存

实测 sidecar 的开销:本机回环上,一个 Envoy 让平均延迟从 43 µs 到 124 µs,两个 Envoy 到 218 µs,mTLS 再加几微秒;并发 32 时吞吐从 92324 降到 26419(一个)和 19297(两个)请求/秒,两个 Envoy 的 CPU 是 85 µs/请求;Envoy 空闲约 40 MB,每个静态集群约 44 KB。

微服务 服务网格 sidecar Envoy 性能开销 mTLS 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号