1、l 负载均衡策略l 负载均衡算法负载均衡策略负载均衡策略l 基于DNS的负载均衡。l 基于反向代理的负载均衡。l 基于特定服务器软件的负载均衡。l 基于NAT的负载均衡。l 基于CDN的负载均衡。基于基于DNSDNS的负载均衡的负载均衡 实现原理:一个域名绑定多个IP,通过DNS服务中的随机域名解析来实现。基于基于DNSDNS的负载均衡的负载均衡 优点:实现简单、实施容易、成本低、适用于大多数TCP/IP应用。基于基于DNSDNS的负载均衡的负载均衡 问题:一旦某个服务器出现故障,即使修改了DNS设置,还是要等待足够的时间(刷新时间)才能发挥作用,在此期间保存了故障服务器地址的客户计算机将不能
2、正常访问服务器。缺陷:DNS负载均衡无法得知服务器之间的差异,它不能做到为性能较好的服务器多分配请求,也不能了解到服务器的当前状态,甚至会出现客户请求集中在某一台服务器上的偶然情况。基于反向代理的负载均衡基于反向代理的负载均衡 实现原理:通过正则映射将请求重定向到内容服务器。基于反向代理的负载均衡基于反向代理的负载均衡 优点:自带高速缓冲,可减轻内容服务器压力,提速网络访问效率。基于反向代理的负载均衡基于反向代理的负载均衡 问题:针对每一次代理,代理服务器就必须打开两个连接,一个对外,一个对内,因此在并发连接请求数量非常大的时候,代理服务器的负载也就非常大了,在最后代理服务器本身可能会成为服务
3、的瓶颈。缺陷:反向代理是处于OSI参考模型第七层应用的,所以就必须为每一种应用服务专门开发一个反向代理服务器,这样就限制了反向代理负载均衡技术的应用范围,现在一般都用于对web服务器的负载均衡。基于特定服务器软件的负载均衡基于特定服务器软件的负载均衡 实现原理:利用网络协议的重定向功能来实现。基于特定服务器软件的负载均衡基于特定服务器软件的负载均衡 优点:服务可定制,可依据底层服务器的性能及实况进行负载调控。基于特定服务器软件的负载均衡基于特定服务器软件的负载均衡 问题:需要改动软件,成本较高。基于基于NATNAT的负载均衡的负载均衡 实现原理:将一个外部IP地址映射为多个内部IP地址。基于基
4、于NATNAT的负载均衡的负载均衡 优点:比较完善的负载均衡技术,均衡算法也较灵活,如随机选择、最少连接数及响应时间等来分配负载。基于基于NATNAT的负载均衡的负载均衡 问题:伸缩能力有限,当服务器结点数目过多时,调度器本身有可能成为系统的新瓶颈。基于基于CDNCDN的负载均衡的负载均衡 实现原理:通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络“边缘”,使用户可以就近取得所需的内容。基于基于CDNCDN的负载均衡的负载均衡 优点:用户访问就近服务器,提高访问速度。负载均衡算法负载均衡算法l 轮询算法。l Hash散列算法。l 最少链接算法。l 最快链接
5、算法。l 加权算法。l 动态反馈算法。轮询算法轮询算法 实现原理:每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。轮询算法轮询算法 优点:简洁,无状态调度。缺点:轮询调度算法假设所有服务器的处理性能都相同,不关心每台服务器的当前连接数和响应速度。当请求服务间隔时间变化比较大时,轮询调度算法容易导致服务器间的负载不平衡。轮询算法轮询算法 适用:服务器组中的所有服务器都有相同的软硬件配置并且平均服务请求相对均衡的情况。HashHash散列算法散列算法l MD5。l 一致性Hash算法。l 各种经典Hash算法。l 自定义Hash算法。HashH
6、ash散列算法散列算法int hash(char*key_str,unsigned long MAX_SS_NUM)register unsigned int h;register unsigned char*p;for(h=0,p=(unsigned char*)key_str;*p;p+)h=31*h+*p;return(h%MAX_SS_NUM);一个较经典的Hash算法。HashHash散列算法散列算法unsigned htable_hash(const char*s,unsigned size)unsigned long h=0;unsigned long g;char*md5s=M
7、DString(s);while(*md5s)h=(h 24);h=g;return(h%size);一个使用了MD5的自定义Hash算法。最少链接算法最少链接算法 实现原理:将请求分配至当前链接数最少的服务器。最少链接算法最少链接算法 优点:实现起来比较简洁,在大多数情况下非常有效。缺点:当各个服务器的处理能力不同时,该算法并不理想。最少链接算法最少链接算法 适用:需要长时处理的请求服务,如FTP等应用。最快链接算法最快链接算法 实现原理:均衡器记录自身到每一个集群节点的网络响应时间,并将下一个到达的连接请求分配给响应时间最短的节点。适用:基于拓扑结构重定向的高级均衡策略。思考思考 思考1:目前我们用到的负载均衡技术有哪些,都用在什么地方?思考2:目前我们的memcached集群用到的负载均衡技术?