IP anycast + BGP 网络技术
据说有好多大公司都应用了anycast技术,包括Microsoft,Cloudflare,LinkedIn以及其他企业都在全球范围内使用了Anycast技术;阿里的dns服务也是使用了anycast技术
科普科普,什么是Anycast技术?
在IP地址的世界里,大家熟知的IP地址类型大致有如下几种:
Unicast IP
单播IP,IP地址和主机是一一对应关系。
如下图,红色为数据包发送端,而绿色节点为数据包接收端。
当数据包发送给某一个特定IP地址时,全局下仅有一个数据包接收主机。此为Unicast。
Multicast IP
组播IP,组播IP拥有特定的IP地址段,当数据包发送给此组播IP地址后,组内成员都能收到此数据包的一份拷贝。
如下图,红色为数据包发送端,而绿色节点为数据包接收端。
当数据包发送给某一个特定组播IP地址时,同时存在多个数据包接收端。
Broadcast IP
广播IP,任意Unicast单播网段中最后一个IP地址。数据包发送给此地址会扩散给全广播域的成员。
如下图,红色为数据包发送端,而绿色节点为数据包接收端。
当数据包发送给广播IP地址时,所有成员均为数据包接收端。
Anycast IP
而Anycast IP,则是集Multicast和Unicast特性于一身的特殊IP地址类型;Anycast中文称为任意播。
Anycast类似于Multicast,同一种类型的数据流同时存在多个接收者。
Anycast又有着Unicast的唯一性。每一个单独的IP会话都能够找到唯一的源主机和目标主机。
- 以DNS请求为例,假设全国人民同一时间发送1百万个DNS请求,他们都是发送给1.1.1.1的Anycast DNS服务器地址。
- 所有数据包都送达给了分布在全国各地的DNS服务器。处于各地的DNS服务器分别接收到了一定数量的DNS请求,并作出回复。这体现了Multicast的特性。
- 某一个特定的DNS请求数据包,一定是发送给了某一台DNS主机,而不是同时有多台DNS主机接收到了此数据包,此为Unicast特性。
如下图,红色为数据包发送端,而绿色节点为数据包接收端。
在Anycast 环境下,总的来说,同时存在多个有效的数据包接收端,但是就某一个特定IP(1.1.1.2)数据包而言,仅有一个接收端主机(即图中箭头所指向的主机)收到了此数据包。
Anycasting最初是在RFC1546中提出并定义的,根据RFC1546的说明,IPv4的任播地址不同于IPv4的单播地址,它建议从IPv4的地址空间分配出一块独立的地址空间作为任播地址空间。RFC1546定义的这种任播没有在IPv4网络中得到广泛使用,但是它的最初语义在IPv4得到广泛使用: 在IP网络上,通过一个Anycast地址标识一组提供特定服务的主机,同时服务访问方并不关心提供服务的具体是哪一台主机(比如DNS或者镜像服务),访问该地址的报文可以被IP网络路由到这一组目标中的任何一台主机上,它提供的是一种无状态的、尽力而为的服务。
在实际应用中,Anycast采用将一个单播地址分配到处于Internet中多个不同物理位置的主机上,发送到这个主机的报文被网络路由到路由协议度量的“最近”的目标主机上。
参考文章:https://blog.csdn.net/mudawei1/article/details/101547570
精品文章《DNS多点部署IP Anycast+BGP实战分析》:https://www.linuxidc.com/Linux/2014-08/105816.htm
利与弊
Anycast技术具有以下优势:
- 不同客户端将访问不同目的主机,此过程对客户端透明,从而实现了目的主机的负载均衡;
- 当任意目的主机接入的网络出现故障,导致该目的主机不可达时,客户端请求可以在无人为干预的情况下自动被路由到目前可达的最近目的主机,在一定程度上为目标主机提供了冗余性;
- 当目的主机受到DoS攻击而无法到达时,由于网络不可到达,客户端请求也将路由到其他目的主机上,而在DDoS攻击时,由于Anycast的负载均衡效应,避免了单台目的主机承受所有攻击流量,因此在一定程度上为目的主机提高了安全性;
- 因为Anycast利用路由度量到“最近”的目的主机,提高了客户端响应速度。
Anycast技术也存在一定的局限性:
使用Anycast中的共享单播地址不能作为客户端发起请求,因为请求的响应不一定能返回到发起的Anycast单播地址。因此,目前Anycast仅适合一些特定的上层协议,从目前的实际应用来看, Anycast最广泛的应用是DNS的部署的cdn加速。
应用举例:基于IP Anycast+BGP的DNS部署
背景:
假设部署三个DNS服务器站点,地点分别在北京、上海、广州,且服务于全国的DNS解析。
常规方案:
- 为了实现三个DNS服务器负载均衡,通常会考虑到使用硬件负载均衡设备,例如常见的F5负载均衡设备等。
- 方案缺陷:网络流量瓶颈:所有的流量都需要先通过负载均衡设备,而硬件设备本身的吞吐量决定了整个网络环境的吞吐量。
- 高昂的硬件成本:为了实现全国的流量负载均衡,需要极大吞吐量的硬件设备,从而大大提高了部署成本。
anyCast方案:
方案优点:
通过AnyCast技术,无需要借助任何第三方负载均衡器,就可以轻松达到负载均衡的效果,同时还提供了冗余和高可靠性。
方案实施:
- 通过配置三个DNS站点的服务器IP为相同IP,例如1.1.1.1/32。然后通过各个站点的BGP对互联网宣告1.1.1.0/24的网段。
- 以上步骤完成以后,互联网路由表针对1.1.1.1/24会有三个不同的出口路由器,分别是北京,上海,广州。
- 假设现有用户都使用1.1.1.1作为DNS服务器,依据就近原则,若用户地域为东北,则会优先采用北京DNS服务器进行解析。
- 同理,贵阳的宽带路由器通过查看BGP路由,发现1.1.1.1出口最优路由是在广州,那么贵阳用户的DNS数据包将被发送给广州的DNS服务器。而江南一带的则是上海DNS服务器负责提供解析服务。
故障容灾:
- 若三台DNS服务器中某一台出现故障,如广东DNS服务宕机,BGP协议会立即停止通告此1.1.1.0/24的网段,Internet路由表将会只有北京和上海的DNS可供选择。
- 此时原广东DNS服务的用户将再次根据“就近原则”选择其他DNS服务器,例如上海DNS,从而达到业务的平滑迁移和服务的高可用性。
总结结论:
- 全国用户最终会根据距离DNS服务器的远近来判断使用哪个DNS服务器做域名解析;
- 从DNS角度来说,正因为不同的地理位置用户会根据就近路由判断,从而选择不同的DNS服务器,最终会使三台DNS服务器达到负载均衡的效果;
- 若其中某一个节点出现故障以后,业务会立即自动迁移到其他可用的节点上,从而避免网路服务故障。