最近作者在阅读Google云平台的技术文档时,在与负载均衡相关的内容中,经常会遇到一个概念,Anycast。那什么是Anycast?它之于负载均衡又有何作用?本文通过对一篇英文文章的翻译和提炼来进行解释。
当我们在浏览器的地址栏里输入www.someplace.com并按下回车,该网站的网页通常在几秒中会被展示出来。而在这个场景的背后,为了把我们的网页请求路由到该网站地址以便让我们最终能够看到页面的内容,其实还发生了一系列的事情,其中的一个重要协议便是BGP协议。BGP协议保证了浏览器发出的请求报文经由最佳的路由转发到该网站的服务器。
在网络中,有多种方法可以对目标服务器进行寻址,而在本文中,我们重点讨论其中的一种,它就是Anycast。
什么是Anycast?
在Anycast技术中,一组服务器在网络中共享一个相同的IP地址。当一个客户端A想要访问后台服务时,它的请求会被路由到离A「逻辑上最近」的服务器上,这样可以降低时延并节约带宽,减少网页加载的时间,并能够提高可用性。值得注意的是,「逻辑上最近」并不等同于「地理上最近」,只不过在大多数情况下两者确实是等同的。
Anycast之所以与BGP协议联系紧密,是因为在BGP协议中,一个路由器的所有「邻居」都知道通过该路由器所能够到达的网络,以及到达这些网络所需要走的距离。(译者注:所谓的「距离」在路由器的世界中通常指「跳数」,报文每被路由器转发一次就代表一跳)。这其中的主要原理是:路由器之间的BGP报文会将其自身携带的IP地址范围信息在网络中传播开来,最终网络中的所有路由器都学习到通往某一个IP地址的最短距离。
其他的地址分配方式
这里列举一些其他常用的寻址方式,它们用于支持流量在网络中的转发
单播(Unicast Addressing)意味着一个IP地址只标识一台服务器的端点,在传统的DNS部署中会使用这种方式。
组播(MulticastAddressing)表示一个报文可以通过组播组地址被路由到一组特定的服务器端点,是一种「一对『特定多』 的映射关系,多用于流媒体的场景。
广播(Broadcast Addressing)广播报文使用广播地址,从发送者被路由到所有可达的服务器端点。在连接了服务器端点的网段中,网络会自动将报文进行复制和转发。
DNS Anycast
在使用单播的方式时,DNS解析客户端可以配置一个包含多个DNS域名服务器的列表。假设列表中第一台域名服务器因某些原因挂掉,DNS解析客户端将不会收到它对解析请求的响应,通常在等待一段时间后(与操作系统相关,通常1到5秒),DNS解析客户端会转向列表中第二台域名服务器进行解析,以此类推。但是当DNS解析客户端再次需要解析域名时,它并没记住「第一台域名服务器已经不再正常工作」这件事情,而还是会从列表中第一台域名服务器开始轮询,而这显然会使最终域名解析的时间变慢。
而配置Anycast地址的DNS解析客户端,则可以减小这样的解析延迟,这背后其实是路由协议的功劳。下图中,三台DNS域名服务器共享一个IP地址 123.10.10.10,在DNS客户端中也配置这一个地址。
在这样的配置中,当三台 Server 对解析客户端都可达时,根据路径最近原则,三层路由会将DNS客户端的报文通过路由器 R1 转发给 ServerA,。如果 ServerA 不再可达,则报文会通过路由器R2和R3被转发给 ServerB,而且转发给A的路由将会从路由表中被清除,以便后续的报文都不再往ServerA转发,直到ServerA恢复正常后,它的路由才会重新加入网络。
举一个生活中的例子来帮助理解,如果Kane想喝星巴克,那他可以在百度地图上进行搜索。百度地图会给他导航到离他最近的星巴克。如果刚好离他最近的星巴克倒闭了(假设百度地图知道这件事),百度地图会给他导航到当前离他最近的其他星巴克门店。
何时使用Anycast技术?
很多网站访问量,并发量不大,只有一台服务器,这种情况下是不需要用到anycast技术的。Anycast更适合于那些访问量和并发量很大的网站,有多台服务器,分布在不同的地址位置,最典型的例子之一,我想就是谷歌,在全球不同的地方都有节点,不同地域的用户即使访问相同的域名,请求也会被路由到与之最近的服务器。
最后我们来总结一下Anycast技术的优势:
性能更优:因为流量总是被路由到就近的节点,因此时延更低
更高的可用性:通过多台服务器做到冗余备份,即使某台服务器挂掉,服务依然可用。
负载均衡:很显然,处于不同位置用户的流量根据就近原则转发到相应的服务器节点,这也是一种负载均衡
降低Dos攻击的影响:Dos攻击可以被限制在局部的服务器上,而非同时影响所有的服务。
本次的技术分享就是这样,感谢阅读。
英文原文链接:https://www.imperva.com/blog/how-anycast-works/
参考:https://www.cnblogs.com/zafu/p/9168617.html