负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,作用是将网络流量按策略分发到多个服务器上,以提高系统整体的响应速度和可用性。
硬件负载均衡
硬件负载均衡,是在定制处理器上运行的独立负载均衡服务器,主流产品有F5和A10。
-
功能强大:支持全局负载均衡并提供较全面的、复杂的负载均衡算法。
-
性能强悍:硬件负载均衡由于是在专用处理器上运行,因此吞吐量大,可支持单机百万以上的并发。
-
安全性高:往往具备防火墙,防 DDos 攻击等安全功能。
-
成本昂贵:购买和维护硬件负载均衡的成本都很高。
-
扩展性差:当访问量突增时,超过限度不能动态扩容。
软件负载均衡
从软件层面实现负载均衡,一般可以在任何标准物理设备上运行。主流产品有Nginx、HAProxy、LVS。
-
扩展性好:适应动态变化,可以通过添加软件负载均衡实例,动态扩展到超出初始容量的能力。
-
成本低廉:软件负载均衡可以在任何标准物理设备上运行,降低了购买和运维的成本。
- 性能略差:相比于硬件负载均衡,软件负载均衡的性能要低一些。
负载均衡分层
七层负载均衡
工作在OSI模型的应用层,应用层协议较多,常用http、dns等,七层负载就可以基于这些协议来负载。可以根据访问用户的 HTTP 请求头、URL 信息将请求转发到特定的主机。
-
DNS 重定向
-
HTTP 重定向
-
反向代理
四层负载均衡
工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。
四层负载均衡服务器在接受到客户端请求后,以后通过修改数据包的地址信息(IP或者MAC)将流量转发到应用服务器。
负载均衡算法
轮询
将用户的请求轮流分配给服务器。这种算法比较简单,具有绝对均衡的优点,但是也正是因为绝对均衡,因此它无法保证分配任务的合理性,无法根据服务器承受能力来分配任务。
轮询适用于机器性能都在同一水平的场景,一旦某台机器性能不好,极有可能出现瓶颈,性能差的机器扛不住更多的流量。
随机
随机选取集群中的某个节点来处理该请求。由概率论的知识可知,随着请求量的变大,随机算法会逐渐演变为轮询算法,集群各个节点会处理差不多数量的请求。它没有状态,不需要维持上次的选择和均衡因子。
随机数的特点是在数据量大到一定量时才能保证均衡,所以如果请求量有限的话,可能会达不到均衡负载的要求。
加权
加权算法是根据机器性能的差异,给每个节点设置一个权重值,其中性能好的机器节点设置一个较大的权重值,而性能差的机器节点则设置一个较小的权重值。权重大的节点能够被更多的选中。它是和随机、轮训一起使用的。
最小连接数
根据集群的每个节点的当前连接数来决定将请求转发给哪个节点,即每次都将请求转发给当前存在最少并发连接的节点。可以根据集群节点的负载情况来进行请求的动态分发,即机器性能好,处理请求快,积压请求少的节点分配更多的请求。避免某个节点因为处理超过自身所能承受的请求量而导致宕机或者响应过慢。
hash
对请求的IP地址或者URL计算一个哈希值,然后与集群节点的数量进行取模来决定将请求分发给哪个集群节点。它不是真正意义上的负载均衡,在某些意义上也是一个单点服务,如果某个节点挂了,会使得一部分流量不可用。
标签:10,负载,架构,请求,性能,算法,均衡,节点 From: https://www.cnblogs.com/burningblade/p/16995823.html