天天看點

SpringCloud(十九)ribbon 詳細說明

ribbon說明

          對于ribbon詳細說明大家可以參考官網, 是一個軟負載均衡的元件,它能夠對服務叢集實作負載均衡,主要有一下幾個功能:

         1.為通訊的用戶端提供服務的DNS或者ip

         2. 根據某些算法,循環通路某些服務

         某些負載均衡器能提供下面的進階功能:

           1.通過将用戶端與伺服器端劃分幾個區(zone),來建立他們之間的關系,使他們在相同的區,來減小延遲

           2. 儲存服務的統計資訊,避免高延遲或者頻繁請求失敗的服務

           3. 儲存區(zone)的統計資訊,避免可能停止的區

負載均衡元件

           Rule: 一個算法元件,決定在服務清單中使用哪一個

           Ping: 一個背景運作的元件,确定服務是否可用

           ServerList: 服務清單,可以是動态的也可以是靜态的,如果是動态的(

DynamicServerListLoadBalancer

),一個背景線程會定時重新整理和過濾這個服務清單

             這些元件可以用程式設定,也可以在配置檔案中設定

  • <clientName>.ribbon.NFLoadBalancerClassName

    : Should implement

    ILoadBalancer

  • <clientName>.ribbon.NFLoadBalancerRuleClassName

    : Should implement

    IRule

  • <clientName>.ribbon.NFLoadBalancerPingClassName

    : Should implement

    IPing

  • <clientName>.ribbon.NIWSServerListClassName

    : Should implement

    ServerList

  • <clientName>.ribbon.NIWSServerListFilterClassName

    : Should implement

    ServerListFilter

IRule

      根據某個算法,從服務清單中選擇一個服務進行通路

SpringCloud(十九)ribbon 詳細說明

   a. RoundRobinRule

         預設的,輪詢規則,也是很多進階規則中退避的一種政策

   b. AvailabilityFilteringRule

         會過濾掉打開熔斷的服務或者是高并發連接配接數量的服務

   c. WeightedResponseTimeRule

          通過服務的平均響應時間,給每一個服務一個權重,響應時間越長,權重越小,開始統計資訊不足,應用輪詢政策

   d. RetryRule

           先按照輪詢政策,如果請求服務失敗,會在指定時間内進行重試

   e. BestAvailableRule

          先過濾掉斷路器的服務,然後選擇一個并發量最小的

    f. RandomRule

          随機擷取一個服務

IPing

SpringCloud(十九)ribbon 詳細說明

   a. DummyPing

         預設傳回true,即認為服務永遠活着

   b. NIWSDiscoveryPing

         如果Discovery Client認為服務線上,即認為服務活着

   c. NoOpPing

          永遠傳回true,認為服務或者,DummyPing源碼裡面多了一個配置

   d. PingUrl

            會使用HttpClient調用服務的一個url,如果成功,則認為服務活着

ServerList

       static server list

                在程式中設定一系列靜态服務    

BaseLoadBalancer.setServersList()

ConfigurationBasedServerList

             在配置檔案中設定,如果屬性時動态改變的,服務清單也會改變            

sample-client.ribbon.listOfServers=www.microsoft.com:80,www.yahoo.com:80,www.google.com:80
           

          DiscoveryEnabledNIWSServerList

                 從eureka服務擷取服務清單,服務叢集必須由VipAddress辨別

ServerListFilter

             被用在

DynamicServerListLoadBalancer

中,用來過去過濾服務清單中的服務。

    ZoneAffinityServerListFilter

             過濾出與用戶端不在同一個zone的服務,除非用戶端的zone沒有可用的服務。通過下面方式開啟

myclient.ribbon.EnableZoneAffinity=true
           

 ServerListSubsetFilter

          此過濾器確定用戶端僅看到ServerList實作傳回的整個伺服器的固定子集。它還可以定期用新伺服器替換可用性較差的子集中的伺服器。要啟用此過濾器,請指定以下屬性

myClient.ribbon.NIWSServerListClassName=com.netflix.niws.loadbalancer.DiscoveryEnabledNIWSServerList 
# the server must register itself with Eureka server with VipAddress "myservice"
myClient.ribbon.DeploymentContextBasedVipAddresses=myservice
myClient.ribbon.NIWSServerListFilterClassName=com.netflix.loadbalancer.ServerListSubsetFilter
# only show client 5 servers. default is 20.
myClient.ribbon.ServerListSubsetFilter.size=5
           

ServerListUpdater

                 DynamicServerListLoadBalancer狀态下,更新伺服器清單   

          PollingServerListUpdater

                    預設,定時更新

           EurekaNotificationServerListUpdater

                     收到通知時,更新伺服器清單

IClientConfig

         定義各種配置資訊,用來初始化ribbon用戶端與負載均衡器

ILoadBalancer

       定義軟負載均衡的操作接口,動态更新服務清單并且根據指定政策算法,從服務清單中選擇一個服務

配置檔案格式

<clientName>.<nameSpace>.<propertyName>=<value>
           

<clientName>:這是ribbon的用戶端名稱,如果此值為沒有配置,則此條屬性會作用到所有的用戶端。

<nameSpace>:預設值為   ribbon

<propertyName>:所有的可用的屬性都在com.netflix.client.conf.CommonClientConfigKey。

如果你沒有配置任何屬性,則ribbon會使用com.netflix.client.config.DefaultClientConfigImpl裡的值。

實時内容請關注微信公衆号,公衆号與部落格同時更新:程式員星星

SpringCloud(十九)ribbon 詳細說明

繼續閱讀