目录
一、负载均衡服务器的种类
负载均衡的含义是: 将负载(访问的请求)“均衡”地分配到多个处理节点上。这样可以减少单个处理节点的请求量,提升整体系统的性能。
负载均衡服务器作为流量入口,可以对请求方屏蔽服务节点的部署细节,实现对于业务方无感知的扩容。它就像交通警察,不断地疏散交通,将汽车引入合适的道路上。
1.代理类的负载均衡服务
代理类的负载均衡服务以单独的服务方式部署,所有的请求都要先经过负载均衡服务,在负载均衡服务中选出一个合适的服务节点后,再由负载均衡服务调用这个服务节点来实现流量的分发
由于这类服务需要承担全量的请求,所以对于性能的要求极高。代理类的负载均衡服务有很多开源实现,比较著名的有LVS、Nginx等等
2.客户端的负载均衡服务
客户端负载均衡服务,也就是把负载均衡的服务内嵌在RPC客户端中
它一般和客户端应用部署在一个进程中,提供多种选择节点的策略,最终为客户端应用提供一个最佳的、可用的服务端节点。这类服务一般会结合注册中心来使用,注册中心提供服务节点的完整列表,客户端拿到列表之后使用负载均衡服务的策略选取一个合适的节点,然后将请求发到这个节点上。
二、常见的负载均衡策略有哪些
负载均衡策略从大体上来看可以分为两类
- 一类是静态策略,也就是说负载均衡服务器在选择服务节点时,不会参考后端服务的实际运行的状态;
- 一类是动态策略,也就是说负载均衡服务器会依据后端服务的一些负载特性,来决定要选择哪一个服务节点
1.静态策略
- 轮询的策略(RoundRobin,RR)
- 带有权重的轮询策略
- Nginx提供了ip_hash和url_hash算法;
- LVS提供了按照请求的源地址和目的地址做Hash的策略;
- Dubbo也提供了随机选取策略以及一致性Hash的策略
2.动态策略
- Dubbo提供的LeastAcive策略,就是优先选择活跃连接数最少的服务;
- Spring Cloud全家桶中的Ribbon提供了WeightedResponseTimeRule是使用响应时间给每个服务节点计算一个权重,然后依据这个权重,来给调用方分配服务节点。
这些策略的思考点 是从调用方的角度出发,选择负载最小、资源最空闲的服务来调用,以期望能得到更高的服务调用性能,也就能最大化地使用服务器的空闲资源,请求也会响应得更迅速。所以在实际开发中,优先考虑使用动态的策略