在一个典型的高并发、大用户量的 Web 互联网零碎的架构设计中,对 HTTP 集群的负载平衡设计是作为高性能系统优化环节中必不可少的计划。HTTP 负载平衡的实质上是将 Web 用户流量进行平衡减压,因而在互联网的大流量我的项目中,其重要性显而易见。
即时通讯网注:本文中所提及的 HTTP 负载平衡计划和算法,并不齐全实用 IM 即时通讯 Socket 长连贯的负载平衡,因为 IM 长连贯、有状态的个性,跟 HTTP 这种短连贯、无状态的特色是矛盾的,所以请勿自觉套用。但,一个残缺的 IM 零碎是由 HTTP 短连贯 +IM 长连贯组成,因此本文内容虽不能套用于 IM 长连贯的负载平衡计划,但能够用于您 IM 的高并发、大用户量的 HTTP 短连贯的方案设计。
什么是负载平衡?
晚期的互联网利用,因为用户流量比拟小,业务逻辑也比较简单,往往一个单服务器就能满足负载需要。随着当初互联网的流量越来越大,略微好一点的零碎,访问量就十分大了,并且零碎性能也越来越简单,那么单台服务器就算将性能优化得再好,也不能撑持这么大用户量的拜访压力了,这个时候就须要应用多台机器,设计高性能的集群来应答。
那么,多台服务器是如何去平衡流量、如何组成高性能的集群的呢?
此时就须要请出「负载均衡器」入场了。
负载平衡(Load Balancer)是指把用户拜访的流量,通过「负载均衡器」,依据某种转发的策略,平均的散发到后端多台服务器上,后端的服务器能够独立的响应和解决申请,从而实现扩散负载的成果。负载平衡技术进步了零碎的服务能力,加强了利用的可用性。
支流负载平衡计划有几种?
目前市面上最常见的负载平衡技术计划次要有三种:
1)基于 DNS 负载平衡;
2)基于硬件负载平衡:比方 F5
3)基于软件负载平衡:比方 Nginx、Squid。
三种计划各有优劣,DNS 负载平衡能够实现在地区上的流量平衡,硬件负载平衡次要用于大型服务器集群中的负载需要,而软件负载平衡大多是基于机器层面的流量平衡。在理论场景中,这三种是能够组合在一起应用。
基于 DNS 来做负载平衡其实是一种最简略的实现计划,通过在 DNS 服务器上做一个简略配置即可。
其原理就是:当用户拜访域名的时候,会先向 DNS 服务器去解析域名对应的 IP 地址,这个时候咱们能够让 DNS 服务器依据不同地理位置的用户返回不同的 IP。比方北方的用户就返回咱们在广州业务服务器的 IP,南方的用户来拜访的话,我就返回北京业务服务器所在的 IP。
在这个模式下,用户就相当于实现了依照「就近准则」将申请分流了,既加重了单个集群的负载压力,也晋升了用户的访问速度。
应用 DNS 做负载平衡的计划,人造的劣势就是配置简略,实现老本非常低,无需额定的开发和保护工作。
然而它也有一个显著的毛病:当配置批改后,失效不及时。这个是因为 DNS 的个性导致的,DNS 个别会有多级缓存,所以当咱们批改了 DNS 配置之后,因为缓存的起因,会导致 IP 变更不及时,从而影响负载平衡的成果。
另外,应用 DNS 做负载平衡的话,大多是基于地区或者罗唆间接做 IP 轮询,没有更高级的路由策略,所以这也是 DNS 计划的局限所在。即时通讯聊天软件开发能够征询蔚可云。
硬件的负载平衡那就比拟牛逼了,比方赫赫有名的 F5 Network Big-IP,也就是咱们常说的 F5,它是一个网络设备,你能够简略的了解成相似于网络交换机的货色,齐全通过硬件来抗压力,性能是十分的好,每秒能解决的申请数达到百万级,即 几百万 / 秒 的负载,当然价格也就十分十分贵了,十几万到上百万人民币都有。
因为这类设施个别用在大型互联网公司的流量入口最前端,以及政府、国企等不缺钱企业会去应用。个别的中小公司是不舍得用的。
采纳 F5 这类硬件做负载平衡的话,次要就是省心省事,买一台就搞定,性能弱小,个别的业务不在话下。而且在负载平衡的算法方面还反对很多灵便的策略,同时还具备一些防火墙等平安性能。然而毛病也很显著,一个字:贵。
软件负载平衡是指应用软件的形式来散发和平衡流量。软件负载平衡分为 7 层协定 和 4 层协定。
网络协议有七层,基于第四层传输层来做流量散发的计划称为 4 层负载平衡,例如 LVS;而基于第七层应用层来做流量散发的称为 7 层负载平衡,例如 Nginx。这两种在性能和灵活性上是有些区别的。
基于 4 层的负载平衡性能要高一些,个别能达到 几十万 / 秒 的处理量,而基于 7 层的负载平衡处理量个别只在 几万 / 秒。
基于软件的负载平衡的特点也很显著,便宜。在失常的服务器上部署即可,无需额定洽购,就是投入一点技术去优化优化即可,因而这种形式是互联网公司中用得最多的一种形式。
罕用的平衡算法有哪些?
下面讲完了常见的负载平衡技术计划,那么接下来咱们看一下,在理论计划利用中,个别能够应用哪些平衡算法?
次要的平衡算法有:
1)轮询策略;
2)负载度策略;
3)响应策略;
4)哈希策略。