本文共 1234 字,大约阅读时间需要 4 分钟。
就是将工作任务平均分摊到多个操作单元上执行,可避免由于模块出现单点失效,而造成的任务停止。
1. 链路负载均衡;
2. 集群负载均衡;
3. 操作系统负载均衡。
比如,通过DNS解析,将域名解析成IP,然后用户根据这个IP来访问不同的目标服务器,如图:
用户最终访问哪个Web Server是由DNS Server来控制的,如上图中是由Global DNS Server来动态解析域名服务。
优点:用户直接访问目标服务器,访问速度快;
缺点:由于DNS解析数据在用户本地和Local DNS Server都有缓存,一旦某台WebServer(目标服务器)挂掉,Global DNS Server很难及时更新用户的域名解析结构,导致用户无法访问这个域名。(也就是说,用户已经在本地或Local DNS Server已经缓存了这个挂掉的目标服务器,导致用户直接按照缓存数据去访问这个目标服务器失败。)
分为硬件负载均衡和软件负载均衡
使用一台专门的硬件设备来转发请求,如图所示:
为了安全一般需要两台设备:一主一备
优点:性能非常好;
缺点:1、非常规,一般公司用户起;2、访问量陡然增大超出服务器极限时,不能动态扩容。
优点:成本低,一般的PC机就可以。
缺点:一般一次请求要经过多次代理服务器,会增加网络延时。
架构图:
上面的两台是LVS ,使用四层负载均衡,在网络层利用IP地址进行地址转发。下面的三台使用HAProxy进行七层负载,即,可以根据访问用户的HTTP请求头来进行负载均衡,如可以根据不同的URL来将请求转发到特定机器或者根据用户的Cookie信息来制定访问的机器。
利用操作系统级别的软中断或者硬件中断来达到负载均衡,如可以实现多队列网卡来实现。
总结:以上三种负载均衡不仅在CDN(详见《》)的集群中使用,而且在Web服务或者分布式数据集群中同样可以使用。
1. CDN的动态加速技术也是现在比较流行的一种优化技术。
2. 原理:在CDN的解析中 ,通过动态的链路探测来寻找回源最好的一条路径,然后通过DNS的调度将所有的请求调度到选定的这条路径上回源,从而加速用户的访问效率,如图:
3. 由于CDN节点是遍布全国的,所以用户接入一个CDN节点后,可以选择一条从CDN节点到源站链路最好的路径让用户走。一个简单的原则就是在每个CDN节点上从源站下载一个大小一定的文件,看哪个链路的总耗时最短,这样就可以构成一个链路链表,然后绑定到DNS解析上,更新到CDN的Local DNS。当然,这个选择原则只是一个例子,实际开发中,可以综合如网络成本、安全等因素。
参考 许令波的《深入分析java web技术内幕》