集群中的应用服务器(节点)一般被设计成无状态,用户能够请求任何一个节点。算法
负载均衡器会根据集群中每一个节点的负载状况,将用户请求转发到合适的节点上。数据库
负载均衡器能够用来实现高可用以及伸缩性:缓存
负载均衡器运行过程包含两个部分:服务器
轮询算法把每一个请求轮流发送到每一个服务器上。网络
下图中,一共有 6 个客户端产生了 6 个请求,这 6 个请求按 (1, 2, 3, 4, 5, 6) 的顺序发送。(1, 3, 5) 的请求会被发送到服务器 1,(2, 4, 6) 的请求会被发送到服务器 2。并发
该算法比较适合每一个服务器的性能差很少的场景,若是有性能存在差别的状况下,那么性能较差的服务器可能没法承担过大的负载(下图的 Server 2)。负载均衡
加权轮询是在轮询的基础上,根据服务器的性能差别,为服务器赋予必定的权值,性能高的服务器分配更高的权值。dom
例以下图中,服务器 1 被赋予的权值为 5,服务器 2 被赋予的权值为 1,那么 (1, 2, 3, 4, 5) 请求会被发送到服务器 1,(6) 请求会被发送到服务器 2。分布式
因为每一个请求的链接时间不同,使用轮询或者加权轮询算法的话,可能会让一台服务器当前链接数过大,而另外一台服务器的链接太小,形成负载不均衡。ide
例以下图中,(1, 3, 5) 请求会被发送到服务器 1,可是 (1, 3) 很快就断开链接,此时只有 (5) 请求链接服务器 1;(2, 4, 6) 请求被发送到服务器 2,只有 (2) 的链接断开,此时 (6, 4) 请求链接服务器 2。该系统继续运行时,服务器 2 会承担过大的负载。
最少链接算法就是将请求发送给当前最少链接数的服务器上。
例以下图中,服务器 1 当前链接数最小,那么新到来的请求 6 就会被发送到服务器 1 上。
在最少链接的基础上,根据服务器的性能为每台服务器分配权重,再根据权重计算出每台服务器能处理的链接数。
把请求随机发送到服务器上。
和轮询算法相似,该算法比较适合服务器性能差很少的场景。
源地址哈希经过对客户端 IP 计算哈希值以后,再对服务器数量取模获得目标服务器的序号。
能够保证同一 IP 的客户端的请求会转发到同一台服务器上,用来实现会话粘滞(Sticky Session)
HTTP 重定向负载均衡服务器使用某种负载均衡算法计算获得服务器的 IP 地址以后,将该地址写入 HTTP 重定向报文中,状态码为 302。客户端收到重定向报文以后,须要从新向服务器发起请求。
缺点:
该负载均衡转发的缺点比较明显,实际场景中不多使用它。
在 DNS 解析域名的同时使用负载均衡算法计算服务器 IP 地址。
优势:
缺点:
大型网站基本使用了 DNS 作为第一级负载均衡手段,而后在内部使用其它方式作第二级负载均衡。也就是说,域名解析的结果为内部的负载均衡服务器 IP 地址。
反向代理服务器位于源服务器前面,用户的请求须要先通过反向代理服务器才能到达源服务器。反向代理能够用来进行缓存、日志记录等,同时也能够用来作为负载均衡服务器。
在这种负载均衡转发方式下,客户端不直接请求源服务器,所以源服务器不须要外部 IP 地址,而反向代理须要配置内部和外部两套 IP 地址。
优势:
缺点:
在操做系统内核进程获取网络数据包,根据负载均衡算法计算源服务器的 IP 地址,并修改请求数据包的目的 IP 地址,最后进行转发。
源服务器返回的响应也须要通过负载均衡服务器,一般是让负载均衡服务器同时做为集群的网关服务器来实现。
优势:
缺点:
在链路层根据负载均衡算法计算源服务器的 MAC 地址,并修改请求数据包的目的 MAC 地址,并进行转发。
经过配置源服务器的虚拟 IP 地址和负载均衡服务器的 IP 地址一致,从而不须要修改 IP 地址就能够进行转发。也正由于 IP 地址同样,因此源服务器的响应不须要转发回负载均衡服务器,能够直接转发给客户端,避免了负载均衡服务器的成为瓶颈。
这是一种三角传输模式,被称为直接路由。对于提供下载和视频服务的网站来讲,直接路由避免了大量的网络传输数据通过负载均衡服务器。
这是目前大型网站使用最广负载均衡转发方式,在 Linux 平台可使用的负载均衡服务器为 LVS(Linux Virtual Server)。
参考:
一个用户的 Session 信息若是存储在一个服务器上,那么当负载均衡器把用户的下一个请求转发到另外一个服务器,因为服务器没有用户的 Session 信息,那么该用户就须要从新进行登陆等操做。
须要配置负载均衡器,使得一个用户的全部请求都路由到同一个服务器,这样就能够把用户的 Session 存放在该服务器中。
缺点:
在服务器之间进行 Session 同步操做,每一个服务器都有全部用户的 Session 信息,所以用户能够向任何一个服务器进行请求。
缺点:
使用一个单独的服务器存储 Session 数据,可使用传统的 MySQL,也使用 Redis 或者 Memcached 这种内存型数据库。
优势:
缺点:
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,须要本身领取。
传送门:https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q