> Java > java지도 시간 > 스프링-구름-리본 원리 분석: 리본의 여러 핵심 클래스

스프링-구름-리본 원리 분석: 리본의 여러 핵심 클래스

php是最好的语言
풀어 주다: 2018-08-02 14:35:25
원래의
2302명이 탐색했습니다.

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=类名

    2, ServerListUpdater기본 구현 클래스 PollingServerListUpdater, 서버 목록의 동적인 업데이트를 주로 담당합니다

    • 스프링-구름-리본 원리 분석: 리본의 여러 핵심 클래스start 메소드가 호출된 후 예약된 작업이 시작되고 실행이 시작됩니다. 1초 지연으로 30초 간격으로 주기적 실행
      • 주기적인 시간 간격을 ribbon.ServerListRefreshInterval=1000 또는 ribbonClientName.ribbon.ServerListRefreshInterval=1000으로 전달하여

    • start 메소드는 초기화 중에 DynamicServerListLoadBalancer에 의해 시작됩니다. 스프링-구름-리본 원리 분석: 리본의 여러 핵심 클래스

      #🎜🎜##🎜🎜#3은 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: 동시 요청이 가장 작은 서버를 선택하세요#🎜🎜##🎜🎜 ##🎜 🎜##🎜🎜#1 .png#🎜🎜##🎜🎜#7. ILoadBalancer 로드 밸런싱 마스터 컨트롤러, 전체 로드 밸런싱 클라이언트를 시작하는 기본 구현 클래스인 ZoneAwareLoadBalancer# 🎜🎜#
            • #🎜🎜#다음과 같이 구성을 통해 자신만의 ServerList 구현을 확장할 수 있습니다. [ribbonClient].ribbon .NFLoadBalancerClassName=Class 이름#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#로드 밸런서 시작 순서 다이어그램: #🎜🎜##🎜🎜##🎜 🎜##🎜🎜 ##🎜🎜##🎜🎜#
              • 초기화 시 예약된 작업이 먼저 초기화되며 30초마다 실행됩니다. 캐시에는 등록 센터에서 얻은 모든 인스턴스 목록 allServerList와 해당 인스턴스 목록 upServerList가 저장됩니다. 성공적으로 핑되었지만 밸런싱 중에 얻은 로드 목록은 upServerList가 아닌 allServerList입니다. 이 핑의 의미를 이해할 수 없습니다.

              • 예약된 작업 시작 정기적으로 등록 센터에서 서비스 목록을 가져옵니다. 30초마다 한 번씩 실행됩니다.

              • 초기화하여 서비스 목록을 가져오고, 가져온 서비스 목록은 ServiceFilter에 의해 필터링되어 저장됩니다. the 캐시

              • # 🎜🎜#
              클라이언트가 호출을 시작하면 ILoadBalancer의 chooseServer 메서드가 호출되고 로드 밸런싱에 따라 인스턴스가 선택되어 호출자에게 반환됩니다. IRule.

              관련 기사:

              WPF 4 리본 개발 빠른 액세스 도구 모음

              SharePoint 2013 페이지의 리본, 메뉴 및 기타 콘텐츠가 아닌 요소 숨기기# 🎜🎜#

위 내용은 스프링-구름-리본 원리 분석: 리본의 여러 핵심 클래스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿