<返回更多

CDN系统调度原理与技术选型

2020-12-14    
加入收藏

一个通用型的CDN,如果要服务广域范围内的用户,那必然要在一个广大的区域内部署服务节点。那么,一个很重要的问题就来了,就是如何将用户的访问导向到最优节点上。

最优的含义有两层,一是访问速度最快,二是地理上最接近。从广域网络的特性上来说,一般情况下是同城同运营商的两端之间通信效果最好。

而普通用户上网,大致的过程就是终端通过http协议访问一个URL地址,然后由本地DNS解析得到服务器的IP地址。终端再向获得的IP地址发起TCP连接,收取数据。

CDN系统调度原理与技术选型

无CDN时的上网过程

上图所示是一般的访问互联网的过程。而在CDN系统里,终端要想与同城同运营商的节点服务器连接上,这就是全局调度要解决的核心问题。

在图中就是“返回服务器IP地址”这一步,最理想情况下,本地DNS返回的就是最优节点地址。接下来就说明从技术上如何实现这一步。

全局调度

基于智能DNS的调度

用户有可能在全国任何一个地点上网,不过总是要通过DNS系统解析域名而获得服务器的IP地址。如果能够从DNS处就取得最优节点,这势必能大大减少调度阶段所耗费的时间。

于是需要解决的第一个问题,就是如何判定终端所在的地域与运营商环境。可是在早期的DNS协议中,并不支持这一功能,DNS仅是在执行递归查询之后,将配置好的IP返回。

智能DNS技术为解决这个问题提供了实现方法。智能DNS的智能之处,就是它可以获得用户的IP,并对其进行分析,得到用户所在的地域和使用的运营商线路。

具备了智能DNS功能的处理过程如下图所示。

CDN系统调度原理与技术选型

智能DNS全局调度

智能DNS技术选型

对于智能DNS的搭建,可以使用开源工具BIND(Berkeley Internet Name Domain),结合EDNS协议,再加上一个存储了IP地址地理信息的数据库,就可以实现智能DNS技术。

EDNS是google提交的扩展DNS协议,它相较于普通DNS,可以获取终端真实IP地址。这样就可以在存储了IP地址地理信息的数据库中通过查询,得到终端所在的地域与所属运营商信息,从而将其导向最优节点。

IP地址地理信息库则可以使用GeoIP,从dev.maxmind.com站点可以下载源库。不过,IP地理信息是时常会变化的,地址库需要定期更新。如果在技术上要求精确,则应该考虑购买商业产品。

数据库可使用关系型的MySQL,或者缓存型的redis。无论需要支持哪种数据库,都必须在BIND的源码中打上相应的补丁,经过编译后才能使用。

技术栈:BIND(支持EDNS协议) + mysql或redis(GeoIP地理信息库)。

基于http的重定向调度

智能DNS技术的优点突出,不过也存在一些缺陷。例如URL被本地DNS解析之后,则会将IP地址缓存起来,这样其他终端就无法得到最优节点。

因此,在应用层根据访问协议,以重定向的方式将终端导向最优节点,就是一个很好的解决办法。目前应用最广泛的,则是基于http协议的302返回码进行跳转。

http是一套基于文本,且简单、清晰、易理解的应用层通信协议。它采用TCP协议进行传输,也是目前互联网上最通用的应用协议。

相较于DNS的调度方式,http的调度可以扩展多个维度。因为DNS调度中只有终端IP这一个可参考依据,只能按地域和运营商来配置最优节点。

而http调度可以将内容、终端型号、用户身份等作为参考依据,实现更加合理的调度。例如,已经缓存了内容的最优节点会被优先导向;如果是付费VIP用户,则可以给其拥有最好线路的机房节点。

对于http全局调度服务,业界一般将其称为GSLB(Global Server Load Balancing),即全局负载均衡。从技术实现上来说,GSLB一般是以WEB接口作为前端,然后各个厂家会实现自己的全局调度业务逻辑。

CDN系统调度原理与技术选型

http重定向的全局调度

目前业界使用较多的是Nginx+lua的方式实现服务调度。

本地调度

全局调度完成的工作,是将终端导向到最优的节点。而一个逻辑上的节点,在物理上可能是一个机房,内有数台至数十台的服务器。

在这些服务器上则部署着本地负载均衡服务、反向代理服务,以及内容缓存服务。而本地调度要做的工作就是在节点内部,基于负载均衡策略,为终端与缓存服务之间构建起一条数据传输通道。

本地调度技术选型

从实施上来说,可以选择硬件负载均衡设备F5。也可以采用OSPF+LVS+Keepalived的技术方案。

LVS是由章文嵩博士在1998年创立的开源软件项目。LVS是linux Virtual Server的缩写,它的目的是将若干台Linux服务器通过网络组建成高性能、高可用、可伸缩的集群。

LVS工作在网络栈的第四层,即传输层。它支持多种本地负载均衡策略,有VS/NAT,VS/TUN,VS/DR三种工作模式。目前业界较多采用VS/DR模式。

VS/DR是直接路由方式,实现方式是LVS收到用户请求后,按负载均衡策略从集群中挑选了一台服务器,然后修改请求数据包中的目标mac地址,将其转发给目标服务器进行处理。DR模式要求集群内的服务器都在同一个网段内。

基于LVS实现负载均衡的典型架构,一般是两台安装LVS的服务器作为双主双活,配置一个虚拟地址VIP。然后安装支持OSPF协议的开源路由工具:Quagga。

Quagga的作用是将LVS主机虚拟成一台路由器,这样通过OSPF协议将物理路由器与两台LVS服务器,构建出等价多路径。以此实现LVS的双主轮询工作方式。

在对节点内服务器探测方面,采用Keepalived开源工具。它最初就是为了LVS而设计的,可对集群内的服务器进行检测,并实现自动化的维护工作。

CDN系统调度原理与技术选型

LVS负载均衡实现本地调度

技术栈:LVS + Quagga + Keepalived。

结语

CDN系统的调度工作分为两个部分,一是全局调度,二是本地调度。

全局调度的目标是以最快的速度,将终端导向最优节点。最优的依据则是地理上接近、相同的运营商,节点本身缓存有请求的内容,以及节点状况良好。

基于智能DNS技术的优点是可以解决地域与运营商的匹配,而且减少了终端与节点间建立连接的时间。但缺点是无法根据内容与用户特点进行导向,难以扩展判断维度。

基于http重定向的方式,则可以拥有多维度的判断依据,而且也便于扩展。其缺点则是响应速度受限于中心服务的处理能力。

在实践中可以采用两者相结合的方式。例如DNS调度之后的节点如果不能满足要求,则可以通过http的调度再匹配最优节点。

本地调度的目标,是在机房内实现数据传输的负载均衡。使用的技术可以是硬件F5,工作在四层的LVS,或者是Nginx。

采购硬件的方式是成本高,实施快捷。使用LVS技术能够获得较快的传输效率,但配置和管理会复杂一些。而使用Nginx则配置简单,但传输效率会差一些,在吞吐量大的时候,其所在服务器可能会成为传输瓶颈。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>