原文地址:https://blog.cloudflare.com/a-brief-anycast-primer/
翻译水平有限,有不通顺的语句,请见谅。
原作者:Matthew Prince
写于 21 Oct 2011

译者:驱蚊器喵#ΦωΦ


我之前写了一片 博文 关于 CloudFlare 的 全球分布式 DNS 架构 ,以及 如何实现在你注册时我们给你的每个ninja 域名地址,不仅代表一台服务器, 而是代表在全球范围内我们运营的每个数据中心的整个服务器集群. 评论中有几个人想知道这是怎么实现的,因为每个域名服务器的URL映射的是一个IP地址. 问题的答案是任播(Anycast), 但是我想花点更多的时间来准确的解释这个词的意思.

单播(Unicast): 一个IP对应一台机器

绝大多数的因特网都是通过一种叫单播(Unicast)的路由策略运行的。在单播的运行下, 每个网络上的节点会获得一个唯一的 IP 地址. 你也许有这样的经历,当你连接到一个无线网络,收到了提醒,你的 IP 地址已经被使用了, 这是因为在一个单播网络内有两台计算机在尝试使用同一个IP地址。在多数情况下,这是不允许的。

路由器保存着一个世界上IP地址的映射表,并维护着节点之间的最短路由。 路由器将数据分组交给另一个离目标更近的路由器,如此执行下去,直到数据分组最终到达目的地。如果你运行traceroute命令(MacWindows的说明),你将会看到这些数据到网站之间的传递信息. 举个例子, 有名的艺术、文化、科技博客laughingsquid.com . 如果我对他们的原始服务器执行traceroute 命令,将会得到以下的输出.

A Brief Primer on Anycast
A Brief Primer on Anycast

上面的每一行, 也就是”跃点(hop),” 代表着我的请求的数据包正在通过的路由器. 通常,路由的名称中有着他们所在的位置信息. 这样, 看起来源站服务器是运行在Rackspace在达拉斯的某个服务器 (第 13 行,看出 DFW 是 Dallas-Ft. Worth 机场代码). 无论你在世界上的哪个地方进行traceroute, 你的数据包最终都会到达在达拉斯运行的同一台服务器,因为它使用的是单播的路由策略.

每一行内都有很多数字. 这些是时间的三种样本, 以毫秒为单位, 代表着数据包到路由器的往返时间. 最后一行是特别重要的,因为这是你到网站服务器之间的实际网络延迟的估计时间. 在我的这个例子里, 大约是 50 毫秒 (是非常不错的).

任播(Anycast): 一个IP 对应多台机器

单播是运行网络中最简单的策略方式, 但这并不是唯一的. 在CloudFlare, 我们广泛的使用另一种叫任播的路由策略. 使用任播, 多台服务器可以共享同一个IP地址. 当请求发送到一个任播的IP地址, 路由器会将其定向到路由最近的服务器.

回到我们的老朋友 laughingsquid.com. 他们是CloudFlare 的用户,所以,如果你请求了他们的网站,你会得到一个或多个CloudFlare 的 IP 地址. 在正常情况下, 无论你在世界上的哪个地方,你都会得到相同的 IP 地址. 然而, 分布在12个数据中心的计算机都在监听着这些IP. 因此, 网络本身会将流量引导到离你发出请求最近的 CloudFlare 数据中心. 查看以下的 traceroute.

A Brief Primer on Anycast
A Brief Primer on Anycast

我在Northern California运行这个 traceroute . 最近的 CloudFlare 数据中心是在 San Jose. 并且, 如果你仔细观察, 跃点 #11 - #13 都显示着在”SJC”的路由器,SJC 正是 San
Jose的机场代码. 如果你在其他地方运行 traceroute 到 laughingsquid.com, 你将看到请求会命中离你最近的数据中心.

速度, 弹性 & 攻击缓解

任播不是轻易可以实现的,但是一旦你这样做,它会带来很多关键的好处 . 首先是速度. 注意,最后一跳的延迟大概是 9.5 毫秒. 因为 CloudFlare 通常会返回 75% 的请求到它的边界服务器,而不用请求到源站, 因此我们能节省大量的网络延迟. 还有就是我们选择了你的数据包最后可能经过的大型核心的 IBX 数据中心,这就意味着,即使数据包返回源站, 也不会有过多的额外延迟.

除了提高了速度之外,使用任播技术意味着网络可以非常灵活. 因为流量将会自动寻找最佳路由, 我们能够将整个数据中心下线,流量将会自动流向下一个路由最近的数据中心.

最后一个任播的好处是,能够帮助减轻攻击。在多数 DDoS 攻击中, 很多 “僵尸” 计算机被用来组成所谓的僵尸网络(botnet). 这些主机分散在网络上,可以产生巨大的流量,能够压倒传统的单播连接的主机. CloudFlare 的 任播网络的本质就是,我们固有地增加了吸收攻击的表面积. 我们的每个数据中心都会吸收由分布式僵尸网络产生的巨大流量的一部分. 因此,随着我们不断发展我们的网络,并扩展更多的数据中心,对任何用户发起有效的DDoS将变得越来越困难。

设置真正的Anycasted网络绝非易事。它需要你拥有自己的硬件,与上游运营商建立直接关系,并调整您的网络路由,以确保流量不会在多个位置之间“翻转”。我们花了很多时间在CloudFlare上做这件事,因为它有助于确保我们所有用户都能访问更快,更安全,更好的互联网。