四、Netflix Ribbon
Ribbon是Netflix发布的云中间层服务开源项目,主要功能是提供客户端负载均衡算法。Ribbon客户端组件提供一系列完善的配置项,如,连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
Ribbon属于进程内负载均衡,它只是一个类库,集成于服务消费方进程,消费方通过它来获取到服务提供方的地址。
1、负载均衡的分类
负载均衡一共分为两种,其一是服务器端负载均衡;其二是客户端负载均衡。
(1)、服务器端负载均衡
提供服务器端负载均衡的工具有很多,比如说Apache、Nginx、HAProxy等都实现了基于HTTP协议或TCP协议的负载均衡模块。基于服务器端的负载均衡机制实现比较简单,只需要在客户端与各个微服务实例之间架设集中式的负载均衡器即可。负载均衡器与各个微服务实例之间需要实现服务诊断以及状态监控,通过动态获取各个微服务的运行时信息决定负载均衡的目标服务。如果负载均衡器检测到某个服务不可用时就会自动移除该服务。负载均衡器运行在一台独立的服务器上并充当代理(Proxy)的作用。所有的请求都需要通过负载均衡器的转发才能实现服务调用,这可能会是一个问题,因为当服务请求量越来越大时,负载均衡器将会成为系统的瓶颈。
(2)、客户端负载均衡
客户端负载均衡的主要优势在于其不会出现集中式负载均衡所产生的性能瓶颈问题,因为每个客户端都有自己的负载均衡器,该负载均衡器的失败不会造成严重的后果。由于所有运行时信息都需要在多个负载均衡器之间进行传递,因而客户端负载均衡器会在一定程度上加重网络流量负载。客户端负载均衡是在客户端内部设定一个调度算法,通过收集各个微服务的实例信息,在向服务器发起请求时,先执行调度算法计算出目标服务器地址,然后通过负载均衡计算出目标服务器地址实现负载均衡效果。
2、Ribbon负载均衡策略
策略类 | 命名 | 说明 |
RandomRule | 随机策略 | 随机选择Server |
RoundRobinRule | 轮询策略 | 按顺序循环选择Server(默认策略) |
RetryRule | 重试策略 | 在一个配置时问段内当选择Server不成功,则一直尝试选择一个可用的Server |
BestAvailableRule | 最低并发策略 | 逐个考察Server,如果Server断路器打开,则忽略,再选择其中并发连接最低的Server |
AvailabilityFilteringRule | 可用过滤策略 | 过滤掉一直连接失败并被标记为circuit tripped的Server,过滤掉那些高并发连接的Server(active connections 超过配置的网值) |
ResponseTimeWeightedRule | 响应时间加权策略 | 根据Server的响应时间分配权重。响应时间越长,权重越低,被选择到的概率就越低;响应时间越短,权重越高,被选择到的概率就越高。这个策略很贴切,综合了各种因素,如:网络、磁盘、IO等,这些因素直接影响着响应时间 |
ZoneAvoidanceRule | 区域权衡策略 | 综合判断Server所在区域的性能和Server的可用性轮询选择Server,并且判定一个AWS Zone的运行性能是否可用,剔除不可用的Zone中的所有Server |