CDN工作机制和负载均衡
定义:
cdn 即内容分布网络,(content delivery netwrok) ,是构筑在现有internet上的一种先进的流量分配网络,其目的是通过在现有的internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容,提高用户访问网站的相应速度。有别于镜像,但是比镜像更智能,可以做个比喻:
cdn = 镜像(mirror) + 缓存(cache) + 整体负载均衡(gslb) , 所以,cdn 可以明显提高网络中的信息流动的效率。
目前cdn 都以缓存网站中的静态数据为主,如css,js ,图片和静态页面等数据,运营商的宽带电视网络除外,以移动为例,移动的宽带电视cdn,则是以节目资源为主。 用户在从主站服务器请求到动态内容后,再从cdn 下载这些缓存数据,从而加速网页数据内容的下载速度,比如淘宝。90%以上的数据都是由cdn 来提供的。
cnd 达到的要求:
可扩展性:
性能可扩展: 为应对新增的大量数据,用户和事务的扩展能力。
成本可扩展:用低廉的运营成本提供动态的服务能力和高质量的内容分发。
安全性:
强调提供物理设备,网络,软件,数据和服务过程的安全性(趋势) 减少因为ddos 攻击或者其他恶意行为造成的商业网站业务中断
可靠,相应和执行性:
服务可用性指能够处理可能的故障和用户体验下降的问题,通过负载均衡及时提供网络的容错机制。
cdn 架构:
web 请求过程
如果是访问某个静态文件 如css,这个静态文件的地址比如是www.baidu.com。则会首先向local dns 服务器发起请求,经过迭代解析后,会回到这个域名的注册服务器去解析,一般公司都会有一个dns解析服务器,这时这个dns 服务器通常会把它重新cname 解析到另外一个域名,而这个域名最终会被指向cdn 全局中的dns 负载均衡器,再由这个gtm 来最终分配是哪个地方的访问用户,返回给离这个访问用户最近的cdn节点。拿到dns 解析结果,用户就会直接去这个cdn节点访问这个静态文件了 。如果这个节点中所请求的文件不存在,就会再回到源站去获取这个文件,然后再返回给用户。
负载均衡:
负载均衡就(load balance) 就是对工作任务进行平衡,分摊到多个操作单元,服务器上进行执行吗,比如专门的图片服务器,应用服务器,web服务器等,共同完成工作任务,它可以提高服务器响应速度以及利用效率,避免软件或者硬件的模块出现单点失效,解决网络拥塞问题,实现地理位置的无关联性,提供较为一致的访问质量,是分布式系统的精髓所在。
三种负载均衡的架构:
链路负载均衡,集群负载均衡,操作系统负载均衡。
链路负载均衡:
即通过dns 解析成不同的ip,然后用户通过ip 来访问不同的目标服务器。这种负载均衡是由dns的解析来完成的,用户最终访问哪个web服务器是由dns server来控制的,在这里就是下面的global dns server来动态解析域名服务,这种dns 解析的有点是用户会直接访问目标服务器,不需要经过其他代理的服务器,速度快,但是因为dns 在用户本地和local dns server 都有缓存,如果某台web服务器挂了,那么就很难及时更新用户的域名解析结构。如果用户域名没有更新,那么就会无法访问该域名。
集群负载均衡:
集群负载是另外一种常见的负载均衡方式,它一般分为硬件负载和软件负载,硬件负载使用一台专门的硬件设备来进行请求的转发,如图,恰恰硬件负载均衡的关键就是这台转发请求的设备,这是一台非常昂贵的设备,通常为了安全需要,一主一备,优点是性能非常好,缺点就是非常昂贵,一般公司是用不起的,而且当访问量突然增大超出服务器极限的时候,不能进行动态的扩容。
硬件负载均衡
软件负载均衡: 这是使用最普遍的一种方式,使用成本非常低,直接使用简单的pc 就可以搭建,当然缺点就是一般一次访问请求需要经过多次代理服务器,会增加网络的延时,如图。上面两台lvs,使用四层负载均衡, 即在网络层利用ip地址进行地址转发,下面三台使用haproxy 进行七层负载,可以根据访问用户的http请求头进行负载均衡,比如可以根据不同的url 来将请求转发到特定的机器或者根据用户的cookie信息来指定访问的机器。
操作系统负载均衡:
就是利用操作系统级别的软中断或者硬件中断来达到负载均衡,比如设置多队列的网卡等,来实现。
cdn 动态加速:
cdn 动态加速技术也是当前比较流行的一种优化技术,它的技术原理就是在cdn 的dns 解析中通过动态的链路探测来寻找回源最好的一条路径,然后通过dns的调度,将所有请求调度到选定的这条路径上回源,从而加速访问效率,如图.由于cdn 是遍布全国的,所以用户接入一个cdn 节点后,可以选择一条从离用户最近的cdn 节点到源站链路最好的路径让用户走,一个简单的原则就是在每个cdn 节点上从源站下载一个一定大小的文件,看哪个链路的总耗时最短,这样可以构成一个链路列表,然后绑定到dns 解析上,更新到local dns ,当然,是否走这个链路并不一定根据耗时这个唯一条件,有时也要考虑网络成本,比如走该节点可以节约5ms,但是网络带宽成本却增加了很多,还有其他网络链路的安全等等的因素也要考虑。
推荐阅读
-
nginx配置反向代理和负载均衡(nginx功能介绍和使用)
-
nginx配置反向代理和负载均衡(nginx功能介绍和使用)
-
SpringBoot2.x+Redis+nginx实现session共享和负载均衡
-
apache负载均衡的安装和实现方法
-
详解Docker Swarm服务发现和负载均衡原理
-
Debian下搭建Nginx和Tomcat服务器实现负载均衡的方案
-
linux服务器之LVS、Nginx和HAProxy负载均衡器对比总结
-
详解利用nginx和docker实现一个简易的负载均衡
-
Session的工作机制详解和安全性问题(PHP实例讲解)
-
用apache和tomcat搭建集群(负载均衡)