Ribbon은 HTTP 및 TCP 클라이언트의 동작을 효과적으로 제어할 수 있는 클라이언트 로드 밸런서입니다. Feign은 기본적으로 리본을 사용했습니다(참조 기사)
1. 먼저 리본의 여러 핵심 클래스
1을 살펴보겠습니다. 구현 클래스 DefaultClientConfigImpl
, 주로 리본 클라이언트 관련 속성 구성을 구성하는 데 사용됨 IClientConfig
默认实现类DefaultClientConfigImpl
,主要用来配置ribbon客户端的相关属性配置
2、ServerListUpdater
默认实现类PollingServerListUpdater
,主要负责动态更新服务器列表
start方法调用后会启动一个定时任务,延时1s开始执行,以每30s的时间间隔周期执行
周期时间间隔可以通过ribbon.ServerListRefreshInterval=1000
或者ribbonClientName.ribbon.ServerListRefreshInterval=1000
来设置
start方法的启动由DynamicServerListLoadBalancer
初始化的时候执行调用
3、ServerList
获取服务器列表
默认实现类ConfigurationBasedServerList
,默认是从配置文件取服务器列表,这样配置[ribbonClinetName].ribbon.listOfServers=xxx,xxx
ConsulServerList
引入consul作服务发现的实现类,主要负责获取注册中心的服务器列表
备注:可以通过配置来扩展自己的ServerList
实现,像这样:[ribbonClient].ribbon.NIWSServerListClassName=类名
4、ServerListFilter
服务器列表过滤器
默认实现类ZonePreferenceServerListFilter
主要根据分区来过滤服务器列表
HealthServiceServerListFilter
引入consul服务发现的实现类,主要负责过滤consul健康检查通过的服务器列表(在ConsulServerList中会获取所有的服务器列表,包括健康检查没有通过的服务器)
备注:可以通过配置来扩展自己的ServerList
实现,像这样[ribbonClient].ribbon.NIWSServerListFilterClassName=类名
5、IPing
检查服务器是否或者
默认实现DummyPing
,这是一个假的检测着,永远返回是true
ConsulPing
,引入consul服务发现的实现类,主要根据consul返回的checks参数来判断服务器是否活着,跟HealthServiceServerListFilter
的过滤判断一样
备注:可以通过配置来扩展自己的ServerList
实现,像这样:[ribbonClient].ribbon.NFLoadBalancerPingClassName=类名
6、IRule
负载均衡选择器
默认实现ZoneAvoidanceRule
,复合判断server所在区域的性能和server的可用性选择server
RandomRule
:随机选择一个server
RoundRobinRule
:roundRobin方式轮询选择server
RetryRule
:对选定的负载均衡策略机上重试机制。
WeightedResponseTimeRule
:根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低。
AvailabilityFilteringRule
:过滤掉那些因为一直连接失败的被标记为circuit tripped的后端server,并过滤掉那些高并发的的后端server(active connections 超过配置的阈值)
BestAvailableRule
:选择一个最小的并发请求的server
7、ILoadBalancer
负载均衡总控制器,默认实现类ZoneAwareLoadBalancer
,其启动了整个负载均衡客户端
可以通过配置来扩展自己的ServerList
实现,像这样:[ribbonClient].ribbon.NFLoadBalancerClassName=类名
ServerListUpdater
기본 구현 클래스 PollingServerListUpdater
, 서버 목록의 동적인 업데이트를 주로 담당합니다
주기적인 시간 간격을 ribbon.ServerListRefreshInterval=1000
또는 ribbonClientName.ribbon.ServerListRefreshInterval=1000
으로 전달하여
start 메소드는 초기화 중에 DynamicServerListLoadBalancer
에 의해 시작됩니다.
ServerList
를 가져옵니다. server list#🎜🎜#ConfigurationBasedServerList
입니다. 기본값은 구성에서 서버 목록을 가져오는 것입니다. 파일을 구성하므로 [ribbonClinetName].ribbon.listOfServers=xxx ,xxx
#🎜🎜##🎜🎜#ConsulServerList
서비스 검색을 위한 consul을 소개합니다. 등록 센터의 서버 목록을 얻는 일을 주로 담당하는 구현 클래스#🎜🎜# #🎜🎜# #🎜🎜##🎜🎜##🎜🎜#참고: 다음과 같은 구성을 통해 자체 ServerList
구현을 확장할 수 있습니다. 이: [ribbonClient].ribbon.NIWSServerListClassName=클래스 이름
#🎜🎜##🎜🎜##🎜🎜##🎜🎜#4, ServerListFilter
서버 목록 필터 #🎜 🎜#ZonePreferenceServerListFilter
는 주로 파티션을 기반으로 서버 목록을 필터링합니다 #🎜🎜##🎜🎜##🎜🎜#HealthServiceServerListFilter
는 주로 영사 상태 검사를 통과한 서버 목록을 필터링하는 역할을 하는 영사 서비스 검색 구현 클래스를 소개합니다(모든 서버 목록은 영사 상태 검사에 실패한 서버를 포함하여 ConsulServerList에서 가져옵니다). 상태 확인) #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Remarks: 다음과 같은 구성을 통해 자신만의 ServerList
구현을 확장할 수 있습니다. [ribbonClient].ribbon.NIWSServerListFilterClassName =클래스 이름
#🎜🎜##🎜🎜##🎜🎜##🎜 🎜#5, IPing
은 서버 또는 #🎜🎜#DummyPing
을 구현합니다. 이는 잘못된 감지이며 항상 true를 반환합니다. #🎜🎜##🎜🎜# ConsulPing
은 주로 consul에서 반환된 검사를 기반으로 서버가 살아 있는지 확인하는 매개 변수를 기반으로 영사 서비스 검색의 구현 클래스를 소개하며 HealthServiceServerListFilter
#🎜의 필터링 결정과 동일합니다. 🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#참고: 다음과 같이 /code>구현 구성을 통해 자신만의 ServerList[ribbonClient].ribbon.NFLoadBalancerPingClassName=클래스 이름#🎜🎜##🎜🎜##🎜🎜##🎜🎜#6, <code>IRule
로드 밸런싱 선택기 #🎜🎜#ZoneAvoidanceRule
이며, 이는 서버가 위치한 영역의 성능과 서버 선택 서버의 가용성을 종합적으로 결정합니다.#🎜🎜##🎜🎜#RandomRule
: 무작위로 서버 선택#🎜🎜##🎜🎜#RoundRobinRule: RoundRobin 모드 폴링이 서버 선택#🎜🎜# #🎜🎜#<li>#🎜🎜#<code>RetryRule
: 선택한 부하 분산 정책에 대한 시스템 내 재시도 메커니즘입니다. #🎜🎜##🎜🎜#WeightedResponseTimeRule
: 응답 시간이 길수록 가중치가 작아지고 오류 발생 가능성이 낮아집니다. 선정되고 있습니다. #🎜🎜##🎜🎜#AvailabilityFilteringRule
: 지속적인 연결 실패로 인해 회로 트립으로 표시된 백엔드 서버를 필터링하고 동시성이 높은 백엔드 서버를 필터링합니다. (활성 연결이 구성된 임계값을 초과함)#🎜🎜##🎜🎜#BestAvailableRule
: 동시 요청이 가장 작은 서버를 선택하세요#🎜🎜##🎜🎜 ##🎜 🎜##🎜🎜##🎜🎜##🎜🎜#7. ILoadBalancer
로드 밸런싱 마스터 컨트롤러, 전체 로드 밸런싱 클라이언트를 시작하는 기본 구현 클래스인 ZoneAwareLoadBalancer
# 🎜🎜#ServerList
구현을 확장할 수 있습니다. [ribbonClient].ribbon .NFLoadBalancerClassName=Class 이름
#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#로드 밸런서 시작 순서 다이어그램: #🎜🎜##🎜🎜##🎜 🎜##🎜🎜 ##🎜🎜##🎜🎜#초기화 시 예약된 작업이 먼저 초기화되며 30초마다 실행됩니다. 캐시에는 등록 센터에서 얻은 모든 인스턴스 목록 allServerList와 해당 인스턴스 목록 upServerList가 저장됩니다. 성공적으로 핑되었지만 밸런싱 중에 얻은 로드 목록은 upServerList가 아닌 allServerList입니다. 이 핑의 의미를 이해할 수 없습니다.
예약된 작업 시작 정기적으로 등록 센터에서 서비스 목록을 가져옵니다. 30초마다 한 번씩 실행됩니다.
초기화하여 서비스 목록을 가져오고, 가져온 서비스 목록은 ServiceFilter에 의해 필터링되어 저장됩니다. the 캐시
위 내용은 스프링-구름-리본 원리 분석: 리본의 여러 핵심 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!