负载均衡的分类

负载均衡便是一种打算机网络技能,用来在多个打算机(打算机集群)、网络连接、CPU、磁碟驱动器或其他资源等分配负载,以达到最佳化资源利用、最大化吞吐率、最小化相应韶光、同时避免过载的目的。
那么,这种打算机技能的实现办法有多种。
大致可以分为以下几种,个中最常用的是四层和七层负载均衡:

四层负载均衡四层负载均衡事情在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。
四层负载均衡做事器在接管到客户端要求后,往后通过修正数据包的地址信息(IP+端口号)将流量转发到运用做事器。
七层负载均衡七层负载均衡事情在OSI模型的运用层,运用层协议较多,常用http、radius、dns等。
七层负载就可以基于这些协议来负载。
这些运用层协议中会包含很多故意义的内容。
比如同一个Web做事器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器种别、措辞来决定是否要进行负载均衡。
常见负载均衡算法轮询(Round Robin)

要求到达后,将客户端发送到负载均衡器的要求依次轮流地转发给做事集群的某个节点。

优点:实现大略,每个集群节点均匀分担所有的要求。

负载均衡php实现搞懂负载平衡一篇就够了 Python

缺陷:当集群中做事器硬件配置不同、性能差别大时,无法差异对待。
引出下面的算法。

随机(Random)

随机选取集群中的某个节点来处理该要求,由概率论的知识可知,随着要求量的变大,随机算法会逐渐演化为轮询算法,即集群各个节点会处理差不多数量的要求。

优点:大略利用,不须要额外的配置和算法。

缺陷:随机数的特点是在数据量大到一定量时才能担保均衡,以是如果要求量有限的话,可能会达不到均衡负载的哀求。

加权

加权算法紧张是根据集群的节点对应机器的性能的差异,给每个节点设置一个权重值,个中性能好的机器节点设置一个较大的权重值,而性能差的机器节点则设置一个较小的权重值。
权重大的节点能够被更多的选中。
它是和随机、轮训一起利用的。

优点:可以根据机器的详细情形,分配不同的负载,达到能者多劳。

缺陷:须要额外管理加权系数。

最小连接数

紧张是根据集群的每个节点确当前连接数来决定将要求转发给哪个节点,即每次都将要求转发给当前存在最少并发连接的节点。

优点:可以根据集群节点的负载情形来进行要求的动态分发,即机器性能好,处理要求快,积压要求少的节点分配更多的要求。
避免某个节点由于处理超过自身所能承受的要求量而导致宕机或者相应过慢。

hash

将对要求的IP地址或者URL打算一个哈希值,然后与集群节点的数量进行取模来决定将要求分发给哪个集群节点。
它不是真正意义上的负载均衡,在某些意义上也是一个单点做事。

优点:实现大略

缺陷:如果某个节点挂了,会使得一部分流量不可用。

负载均衡分类1. 硬件负载均衡

常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点大略,有专业的人卖力;缺陷便是 贵 如果你是土豪,可以考虑,但是对付规模较小的网络做事来说暂时还没有须要利用。

2. 软件负载均衡

目前利用最广泛的三种负载均衡软件Nginx/LVS/HAProxy,他们都是开源免费的负载均衡软件,这些都是通过软件级别来实现,以是用度较低。
足以见得,搞软件的是多么不值钱!

3. 成熟的架构

负载均衡业界早已有成熟的架构,比较常用的有LVS+Keepalived、Nginx+Keepalived、HAProxy+Keepalived。

常见负载均衡软件Nginx

Nginx的负载均衡支持:

rr:轮叫,轮流分配到后端做事器;wrr:权重轮叫,根据后端做事器负载情形来分配;lc:最小连接,分配已建立连接最少的做事器上;wlc:权重最小连接,根据后端做事器处理能力来分配。

Nginx优点:

1.大略:安装和配置比较大略、测试也大略2.稳定:单机一样平常能支撑几万次的并发量3.轻量:能ping通就就能进行负载功能4.易用:明确的缺点码、超时提醒5.强大:负载均衡、反向代理、WEB容器等功能

Nginx缺陷:

1.仅能支持http、https和Email协议2.对后端做事器的康健检讨, 只支持通过端口来检测,不支持通过url来检测roundrobin:轮询,轮流分配到后端做事器; static-rr:根据后端做事器性能分配; leastconn:最小连接者优先处理; source:根据要求源IP,与Nginx的IP_Hash类似。
LVS

LVS的负载均衡支持:

roundrobin:轮询,轮流分配到后端做事器;static-rr:根据后端做事器性能分配;leastconn:最小连接者优先处理;source:根据要求源IP,与Nginx的IP_Hash类似。

LVS优点:

1.高效:事情在网络4层之上 仅作分发之用,没有流量的产生,这个特点也决定了它在负载均衡软件里的性能最强的 ,对内存和cpu资源花费比较低2.易用:配置性比较低,简化操作本钱3.稳定:本身抗负载能力很强,自身有完全的双机热备方案4.运用广:由于LVS事情在4层,以是它险些可以对所有运用做负载均衡,包括http、tcp、数据库、在线谈天室等

LVS缺陷:

1.不能做动静分离2.大型网站LVS+Keepalived履行起来就比较繁芜,配置本钱高HAProxy

HAProxy负载均衡策略非常多,包括:

roundrobin,表示大略的轮询,这个不多说,这个是负载均衡基本都具备的;static-rr,表示根据权重,建议关注;leastconn,表示最少连接者先处理,建议关注;source,表示根据要求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为办理session问题的一种方法,建议关注;ri,表示根据要求的URI;rl_param,表示根据要求的URl参数’balance url_param’ requires an URL parameter name;hdr(name),表示根据HTTP要求头来锁定每一次HTTP要求;rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP要求。

HAProxy的优点能够补充Nginx的一些缺陷, 比如支持Session的保持,Cookie的勾引;同时支持通过获取指定的url来检测后端做事器的状态。

HAProxy跟LVS类似,本身就只是一款负载均衡软件;纯挚从效率上来讲HAProxy会比Nginx有更出色的负载均衡速率,在并发处理上也是优于Nginx的。

支持TCP协议的负载均衡转发,可以对MySQL读进行负载均衡,对后真个MySQL节点进行检测和负载均衡。

常见微做事框架的负载均衡Dubbo

支持4种算法(随机、轮询、生动度、Hash同等性),而且算法里面引入权重的观点。

SpringCloud Feign

支持很多种算法,包括:轮询、随机、最小连接、区域加权、重试以及ResponseTime加权。
也可以自己实现负载均衡算法