在互联网发展呢的今天,咱们通常会把多台机器组成一个集群对外提供服务。然而,咱们的网站对外提供的访问入口都是一个的,好比 www.baidu.com 那么当用户在浏览器输入 www.baidu.com 的时候如何将用户的请求分发到集群中不一样的机器上呢,这就是负载均衡在作的事情。html
负载均衡的分类
负载均衡就是一种计算机网络技术,用来在多个计算机(计算机集群)、网络链接、CPU、磁碟驱动器或其余资源中分配负载,以达到最佳化资源使用、最大化吞吐率、最小化响应时间、同时避免过载的目的。那么,这种计算机技术的实现方式有多种。大体能够分为如下几种,其中最经常使用的是四层和七层负载均衡:算法
请求到达后,将客户端发送到负载均衡器的请求依次轮流地转发给服务集群的某个节点。数据库
优势:实现简单,每一个集群节点平均分担全部的请求。后端
缺点:当集群中服务器硬件配置不一样、性能差异大时,没法区别对待。引出下面的算法。浏览器
随机(Random)随机选取集群中的某个节点来处理该请求,由几率论的知识可知,随着请求量的变大,随机算法会逐渐演变为轮询算法,即集群各个节点会处理差很少数量的请求。服务器
优势:简单使用,不须要额外的配置和算法。cookie
缺点:随机数的特色是在数据量大到必定量时才能保证均衡,因此若是请求量有限的话,可能会达不到均衡负载的要求。网络
加权加权算法主要是根据集群的节点对应机器的性能的差别,给每一个节点设置一个权重值,其中性能好的机器节点设置一个较大的权重值,而性能差的机器节点则设置一个较小的权重值。权重大的节点可以被更多的选中。它是和随机、轮训一块儿使用的。session
优势:能够根据机器的具体状况,分配不一样的负载,达到能者多劳。架构
缺点:须要额外管理加权系数。
最小链接数主要是根据集群的每一个节点的当前链接数来决定将请求转发给哪一个节点,即每次都将请求转发给当前存在最少并发链接的节点。
优势:能够根据集群节点的负载状况来进行请求的动态分发,即机器性能好,处理请求快,积压请求少的节点分配更多的请求。避免某个节点由于处理超过自身所能承受的请求量而致使宕机或者响应过慢。
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加权。也能够本身实现负载均衡算法