天天看点

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 详细说明

继续阅读