我的博客

一个小型网络的 Anycast 实践笔记

Anycast 在什么场景下物有所值,在什么地方会让你头疼,以及两条适用于小型网络的运维笔记。

Anycast 是一种从多个地点宣告同一 IP 前缀,网络将每个客户端导向最近节点的技术。它广泛用于 DNS 根服务器、CDN 边缘节点,并且越来越多地用于任何受益于地理就近性的场景。但对于一个小型网络——几台机架、少数几个上游——值得思考的是,增加的复杂性是否真正带来了足够的收益。

Anycast 在负载无状态且响应数据量小的场景下表现最佳。DNS 查询是典型例子:响应可以放入单个数据包,没有会话状态,丢包只需客户端重试。对于有状态协议,Anycast 会产生一些可解决但并非免费的难题:会话亲和性变成了路由问题,连接中途的路由变化可能导致连接重置。

运维负担主要体现在三个方面:监控、容量规划和事故响应。使用 Unicast 时,你知道哪台服务器在处理哪个客户端。使用 Anycast 时,你只知道哪个前缀优先,但实际分布取决于每一台中间路由器的动态状态。

我们学到的两件事

第一,健康检查必须快速且彻底地收回路由。一个宣告但已损坏的前缀比根本不宣告更糟糕,因为网络没有理由绕过它。第二,至少从两个上游提供商宣告。单个上游将 Anycast 变成了一种运行单地点的高成本方式。

从你无法控制的观测点进行测量。你自己的 traceroute 只会告诉你你希望成真的东西。

对于小型网络,诚实的答案往往是:用少量带有短 TTL 的区域 DNS 记录,就能以极小的运维负担获取大部分收益。

← 返回首页