还有个姊妹篇也可以参考这个文章:LVS(Linus Virtual Server):三种IP负载均衡方式比较+另三种Web负载均衡方式
我还写了一篇:【系统架构】亿级Web系统搭建(1):Web负载均衡(阿里)
LVS 实现了IP负载均衡,包含三个方法:NAT,DR,TUN
zookeeper使用ZAB(zookeeper Atomic Broadcast)协议保证数据一致性,
有兴趣的参考:zookeeper 负载均衡 核心机制 包含ZAB协议(滴滴,阿里面试)
很多博客都说不明白,这里做一下总结:常用的6种负载均衡 3中IP负载均衡和 3中web负载均衡
开头先理解一下所谓的“均衡”
不能狭义地理解为分配给所有实际服务器一样多的工作量,因为多台服务器的承载能力各不相同,这可能体现在硬件配置、网络带宽的差异,也可能因为某台服务器身兼多职,我们所说的“均衡”,也就是希望所有服务器都不要过载,并且能够最大程序地发挥作用。
然后看一下网络图:
不管是4层还是7层, 网络层 和运输层是相同的;这张图也是阿里经常问的,具体我做了总结参考:七层协议和四层协议(阿里)
一、http重定向[协议层] http重定向协议实现负载均衡
原理:根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给浏览器,由浏览器重新进行访问。
优点:比较简单
缺点:
(1) 浏览器需要每次请求服务器才能完成一次访问,性能较差。
http重定向服务器自身的处理能力可能成为瓶颈。
使用http302响应重定向,有可能使搜索引擎判断为SEO作弊,降低搜索排名。
当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。
(2)、吞吐率限制
主站点服务器的吞吐率平均分配到了被转移的服务器。现假设使用RR(Round Robin)调度策略,子服务器的最大吞吐率为1000reqs/s,那么主服务器的吞吐率要达到3000reqs/s才能完全发挥三台子服务器的作用,那么如果有100台子服务器,那么主服务器的吞吐率可想而知得有大?相反,如果主服务的最大吞吐率为6000reqs/s,那么平均分配到子服务器的吞吐率为2000reqs/s,而现子服务器的最大吞吐率为1000reqs/s,因此就得增加子服务器的数量,增加到6个才能满足。
(3)、重定向访问深度不同
有的重定向一个静态页面,有的重定向相比复杂的动态页面,那么实际服务器的负载差异是不可预料的,而主站服务器却一无所知。因此整站使用重定向方法做负载均衡不太好。
我们需要权衡转移请求的开销和处理实际请求的开销,前者相对于后者越小,那么重定向的意义就越大,例如下载。你可以去很多镜像下载网站试下,会发现基本下载都使用了Location做了重定向。
二、DNS负载均衡(采用的是简单的轮询算法)[协议层】dns域名解析负载均衡
原理:在DNS服务器上配置多个域名对应IP的记录。例如一个域名对应一组web服务器IP地址,域名解析时经过DNS服务器的算法将一个域名请求分配到合适的真实服务器上。
优点:将负载均衡的工作交给了DNS,省却了网站管理维护负载均衡服务器的麻烦,同事许多DNS还支持基于地理位置的域名解析,将域名解析成距离用户地理最近的一个服务器地址,加快访问速度吗,改善性能。
缺点:目前的DNS解析是多级解析,每一级DNS都可能化缓存记录A,当某一服务器下线后,该服务器对应的DNS记录A可能仍然存在,导致分配到该服务器的用户访问失败。
DNS负载均衡的控制权在域名服务商手里,网站可能无法做出过多的改善和管理。