基于名字寻址而不是基于地址寻址早就不是什么新鲜事,我们日常生活中的寻址基本都是找名字,比如找厕所,找连锁店,我们倾向于去具有同样称呼的最近那家。IP 网络中的这种机制叫 Anycast。
是不是一下子就不需要过多解释了。所有具有相同 IP 地址的节点作为一个组,在 Anycast 方式下,数据包被传递到一个组中距离 sender 最近的成员。在此整个过程中,路由协议的作用方式与 Unicast 没有任何不同:
纵然 U1 对 N1,N2,N3 三个 8.8.8.8 均可达,但路由协议会选择 N1,因为它最短。SPF 算法(无论链路状态协议还是距离向量协议)保证到任意 IP 地址取最短路径,而不必要求 IP 地址不同。换句话说,SPF 算法基于目标节点本身而不是它的 IP。
路由协议像往常产生 Unicast 路径一样产生 Anycast 路径,因此不需要为 Anycast 设计新的路由方案。
这种底层分发机制的一个高级用法是 CDN,顶层区别在于 CDN 通过 GSLB(Global Server Load Balance) 来保证最优路径,而不是通过 IP 路由。结果是 CDN 系统不仅仅以路径长度来度量成本,还可加入更多高级度量,比如用户地理位置,服务器负载,网络状况,政策等非常多的自定义指标,典型的匹配过程执行稳定婚姻算法:
和 Anycast 一样,CDN 本质上也是个分发系统,且它的名字更能体现这一点。作为简单的同 IP SPF 延伸,GSLB 能够实现更精细的内容分发控制,将不同的内容类型,不同用户群体等相适配,在 CDN 的流量调度方面发挥更精准的作用,确保用户被引导到最优的服务器获取内容,提升用户体验。
比较上面两个图,将 Google DNS 8.8.8.8 的 Anycast 分发作为一个朴素的 DNS CDN 服务来理解是高尚的。
但 Anycast 地址除了作为 Host 地址当 CDN 服务理解之外,IPv6 Anycast 还可以作为 Router(三层网关) 地址做 GW 负载均衡:
这种方式的 Anycast 并非采用 SPF 路由协议生成路径,而是采用 IPv6 NDP,详细的解说参见 6 年前的一篇文章:闲谈IPv6-Anycast以及在Linux/Win7系统上的Anycast配置。
浙江温州皮鞋湿,下雨进水不会胖。