04 Ribbon介绍
负载均衡是分布式框架的重点,负载均衡机制决定着整个服务器集群的性能和稳定。我们知道,Eureka的服务实例可以进行集群集群部署,每个实例都均衡处理服务请求,那么这些请求是如何被分摊到各个服务实例中的呢?Netflix的负载均衡项目Ribbon帮我们解决了这个问题。
1.Ribbon简介
Ribbon是Netflix下的负载均衡项目,它在集群中为各个客户端的通信提供了支持,它主要实现中间层应用程序的负载均衡。Ribbon提供一下特性:
> 负载均衡器,可支持插拔式的负载均衡原则。
> 对多种协议提供支持,例如HTTP、TCP、UDP。
> 集成了负载均衡功能的客户端。
同为Netflix项目的Ribbon可以与Eureka整合使用,Ribbon同样也被集成到Spring Cloud中,作为spring-cloud-netflix项目中的子模块。Spring Cloud将Ribbon的API进行了封装,使用者可以使用封装后的API来实现负载均衡,也可以使用Ribbon原生的API。
2.Ribbon子模块
Ribbon主要有以下的三大子模块:
> ribbon-core: 该模块为Ribbon项目的核心。主要包括负载均衡器的接口定义、客户端接口定义、内置的负载均衡思想等API。
> ribbon-eureka: 为Eureka客户端提供的负载均衡实现类。
> ribbon-httpclient: 对Apache的HttpClient进行封装,该模块提供了含有负载均衡功能的REST客户端。
3.负载均衡器组件
Ribbon的负载均衡主要与集群中的各个服务器进行通信,负载均衡器需要提供以下基础功能:
> 维护服务器的IP、DNS名称等信息。
> 根据特定的逻辑在服务器列表中循环。
为了实现负载均衡的基础功能,Ribbon的负载均衡器有以下三大子模块。
> Rule: 一个逻辑组件,这些逻辑将会决定从服务器列表中返回那个服务器实例。
> Ping: 该组件主要使用定时器来确保服务器网络可以连接。
> ServerList:服务器列表,可以通过静态的配置确定负载的服务器,也可以动态指定服务器列表。如果指定服务器列表,则会有后台的线程来刷新该列表。