Anycast:同一个 IP 地址,为什么可以同时存在于全球多座城市?

TL;DR

Anycast 让多个网络位置同时宣告同一个服务地址,由路由选择相对合适的节点,适合就近访问、故障吸收和攻击分散。

Anycast 让多个网络位置同时宣告同一个服务地址,由路由选择相对合适的节点,适合就近访问、故障吸收和攻击分散。

Anycast:同一个 IP 地址,为什么可以同时存在于全球多座城市?

Anycast 的奇妙之处是:很多地理位置不同的服务器,可以同时宣告同一个服务地址。客户端只看到一个 IP,但路由系统会根据网络路径把请求送到某个“相对合适”的节点。这让地址本身成为一张分布式服务入口。

可以把它想成同一个连锁急救号码在多座城市都有值班中心。拨号时不需要知道具体哪一座中心接听,网络会把呼叫导向路径更近、可达性更好的地点。DNS 根服务器、公共递归解析器、内容分发和抗攻击服务经常利用类似思路,把同一服务部署到多个网络位置。

Anycast 通常依赖 BGP 等路由协议,由不同站点发布相同前缀。路由选择并不一定等于物理距离最近,而是由策略、路径长度、运营商关系和故障情况共同决定。一个节点撤回路由后,流量可以逐步转向其他节点,因而具备一定的故障吸收能力。

它对无状态或短请求尤其友好。长连接、会话状态和事务如果在中途被路由到另一节点,就需要共享状态、连接迁移或会话粘性,否则用户可能遇到中断。网络变化还可能让同一客户端在一段时间内到达不同节点,监控与排障必须把路由视角纳入考虑。

因此 Anycast 不是“一个 IP 自动复制服务器”,而是一种用路由层表达服务可用位置的架构。它把就近访问、故障转移和攻击分散结合起来,同时把状态同步、路径不稳定和流量可观测性带来的复杂度交给运营系统处理。

部署 Anycast 时,监控不能只做一次 TCP 连通性探测,而要从多个网络位置持续观察路由、节点命中分布、连接失败和会话迁移。一个站点即使本地健康,也可能因为错误宣告前缀吸走过多流量;撤路由、限流和健康检查必须与发布流程联动。

Anycast 也会改变“服务器在哪里”的排障习惯。同一个客户端在不同时间可能命中不同站点,因此日志必须带上站点、路由入口和请求标识;否则单看一个中心化服务端的错误率,很难解释为什么只有某些地区或某些运营商受影响。

资料来源:RFC 4786:Operational Recommendations for Anycast Services

KEEP READING