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

注册中心不可达时:脑裂、网络分区与客户端缓存还能撑多久

实测注册中心不可用:调用方刷新失败就保留旧列表时请求全部成功,清空列表则第 2 秒起全部失败;不可用期间实例崩溃时没有被动摘除的调用方有 80 / 400 个请求失败,被动摘除只有 1 个;etcd 只剩 1 个节点时线性一致读、写入、续约都超时,serializable 读仍成功,恢复后 3 个实例的 key 都在。

微服务 注册中心 etcd 不可用 客户端缓存 真实验证 动画演示
微服务 2026-10-19

服务发现的一致性取舍与注册中心选型:AP 与 CP,etcd、Consul、Nacos、ZooKeeper 对照

实测服务发现的一致性取舍:Consul 失去多数后默认读和写都是 HTTP 500,加 ?stale 才能读;leader 挂掉后写入恢复 etcd 约 2.08 s、Consul(默认参数)约 11.11 s;AP 的多主复制模型在分区期间 4 / 4 次写入成功,但两边读到不同的值、愈合后一个写入被覆盖。

微服务 注册中心 CP AP Consul etcd 一致性 真实验证 动画演示
微服务 2026-10-19

变更风暴与容量:大量实例同时重启时 watch 的压力,实例数与 watch 连接数

实测大量实例同时注册时 watch 的压力:1000 次注册遇到 500 个 watcher 要推送 50 万个事件,put 延迟 p99 从 16.9 ms 涨到 78.1 ms、etcd 内存 +34 MB;按服务前缀分片监听把事件数从 20 万降到 1 万;200 个 watcher 同时重连补发 20 万个事件用 0.21 s、etcd 内存 +110 MB。

微服务 注册中心 etcd watch 注册风暴 容量 真实验证 动画演示
微服务 2026-10-19

注册信息与分组隔离:元数据、权重、版本,namespace、cluster、group

实测注册信息的隔离与过滤:Nacos 3.2.4 的 (namespace, group, 服务名) 三元组互不可见,clusterName 把 3 个实例筛成 2 个或 1 个,配错 namespace 得到空列表;权重 1:1:4 的加权选择 10000 次得到 16.6% / 66.5% / 17.0%;Consul 的 Tags、Meta 加 filter 表达式、DNS tag 前缀。

微服务 注册中心 Nacos Consul 命名空间 元数据 权重 真实验证 动画演示
微服务 2026-10-19

DNS 服务发现:SRV 记录与 TTL 缓存的坑

实测 DNS 服务发现:TTL 10 s 的缓存在摘掉实例后还会让 83 到 105 个请求(共 700 个)打到已停的后端,启动时只解析一次的客户端一直错到结束,不缓存要 700 次查询;SRV 优先级让备用目标 0 流量、同优先级按权重 24.8% / 75.2%;负缓存让新上线的服务 18.1 s 后才被发现;20 个以上 SRV 目标的 UDP 应答被截断。

微服务 注册中心 DNS SRV TTL 负缓存 真实验证 动画演示
微服务 2026-10-19

Consul:agent、server 与 gossip 的分工,健康检查类型与状态流转

实测 Consul 2.0.4:3 个 server 加 2 个 client agent,Raft 投票成员只有 3 个;SIGKILL 一个 agent 后 5.10 到 5.37 s 才被判为 failed;HTTP 检查 slow 配置(3 次失败 / 2 次成功)从 429 到 500 要 2.33 到 2.96 s;server 失联时 agent 本地照常登记但 catalog 是旧的,恢复后 3.39 s 追上;设 10s 的自动注销实际在 76.3 s 后才发生。

微服务 注册中心 Consul gossip 健康检查 真实验证 动画演示
微服务 2026-10-19

Consul KV 与 session 锁

实测 Consul 2.0.4 的 KV 与 session 锁:无保护的读-改-写计数器 8 线程 400 次只得到 66,加 CAS 后 400;并发写 400 次 watcher 只看到 203 次变化;TTL 10 s 的 session 不续约 20.0 s 才失效;lock-delay 默认 15 s;持有者节点被杀后,默认设置下 20.3 s 另一方才拿到锁。

微服务 注册中心 Consul KV session 分布式锁 真实验证 动画演示
微服务 2026-10-19

Nacos:临时实例与持久实例

实测 Nacos 3.2.4:临时实例被 SIGKILL 后 0.58 s 消失,被 SIGSTOP 冻住要 26.12 s 才消失且期间一直 healthy;持久实例离开 61 s 仍在、停掉监听 0.6 s 变 unhealthy、恢复却要 13.1 s;保护阈值 0.2 起客户端视图把停了的 4 个也报成 healthy;同一服务不能混用两类;重启后临时实例要 14.3 s 才回来。

微服务 注册中心 Nacos 临时实例 持久实例 保护阈值 真实验证 动画演示
微服务 2026-10-19

变更通知:Nacos 的推拉结合与配置中心的长轮询

实测配置变更通知:Nacos 3.2.4 的 SDK 推送中位延迟 71.3 ms(30 个监听者 121.9 ms),但 add_listener 之后约 6 s 才开始推送;对照自写的长轮询服务延迟 0.8 ms(50 s 里 13 个请求),短轮询 1 s 延迟中位 603.2 ms、5 s 延迟中位 2131.0 ms 且 4 次变更被合并;客户端冻住或服务重启之后拿到的是最新内容。

微服务 配置中心 Nacos 长轮询 推送 变更通知 真实验证 动画演示
微服务 2026-10-19

配置热更新:哪些配置可以不重启生效

实测配置热更新:原地改字段的配置在读取方那里读到半新半旧的次数是 4471 次(间隔 0)到 1754003571 次(间隔 50 µs),atomic 换指针是 0;监听地址和启动时起的 worker 数换配置不会变;解析出错存零值让限速变 0、限速写成 1000000 让保护失效,做了范围检查的加载方式不受影响;SIGHUP 延迟 0.164 ms,轮询 1000 ms 只发现 19/30。

微服务 配置中心 热更新 Go atomic 竞态 真实验证 动画演示
微服务 2026-10-19

配置的版本与回滚

实测配置的版本与回滚:Nacos 3.2.4 的每条 U 历史存的是修改之前的内容,回滚就是重新发布旧内容(历史多一条,回滚前的 v6 还在);删除记录里存着最后一版;不带 CAS 的并发编辑丢了一个字段,带 cas_md5 的会被拒绝;etcd 旧 revision 压缩后读不到(HTTP 400),Consul 带旧索引读得到的是当前值。

微服务 配置中心 Nacos etcd Consul 版本 回滚 CAS 真实验证 动画演示
微服务 2026-10-19

敏感配置:加密存储与密钥轮换

实测敏感配置:Nacos 3.2.4 默认明文存,改密码、删配置之后旧密码仍在 Derby 日志(6 次)和历史里,cipher- 前缀没有插件时也是明文;信封加密轮换主密钥只处理 DEK(100 条 1 MiB 数据:104,857,600 字节对 3,200 字节);双密钥轮换顺序做错时 400 或 1000 条记录读不出来;环境变量在 ps eww 里能看到。

微服务 配置中心 敏感配置 加密 密钥轮换 信封加密 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号