springcloud学习手册-Ribbon(常见问题和补充说明)

导读 | Ribbon常见问题和补充说明

一、 Ribbon-使用配置文件自定义Ribbon Client

从1.2.0开始,Spring Cloud Netflix支持使用properties(配置文件)来定制化Ribbon clients。所以这就可以在不同的服务环境中在启动的时候就可以改变,实现负载客户端。1、说明

属性文件配置中,支持的属性如下(name.ribbon.属性):

  • NFLoadBalancerClassName: 实现ILoadBalancer
  • NFLoadBalancerRuleClassName: 实现IRule
  • NFLoadBalancerPingClassName: 实现IPing
  • NIWSServerListClassName: 实现ServerList
  • NIWSServerListFilterClassName: 实现ServerListFilter

2、举个例子

例如一个叫microservice-provider-user(服务提供者)的服务设置IRule,如下图所示:

3、注意事例

请注意加载时的优先级。在这些属性中定义的Classes优先于@RibbonClient(configuration=MyRibbonConfig.class)定义的beans和由Spring Cloud Netflix提供的缺省值。

二、Using Ribbon with Eureka 如果实现Ribbon与Eureka 联合使用

下面是我从官方文档文明中截取的一张图,里面说的比较详细。

下面翻译的内容也有点不通顺,大家先理解一下。我觉得知道概念就可以了,没必要去光太多时间深入研究。在实际应用的时候用到了再来理解和学习这样比较好。

当Eureka被和Ribbon一起联合使用时, ribbonServerList被一个叫做DiscoveryEnabledNIWSServerList的扩展重载。这个扩展汇聚了来自于Eureka的服务列表。 IPing的接口也被NIWSDiscoveryPing代替,用于委托Eureka来测定服务是否UP。 缺省的ServerListThe是一个DomainExtractingServerList,目的是使得物理上的元数据可以用于负载均衡器,而不必要使用AWA AMI的元数据。 缺省情况下,服务List将根据“zone”信息被创建。(远程客户端设置eureka.instance.metadataMap.zone)。如果这个没有设置,它可以使用d来自于服务hostname的domain name作为zone的代理(取决于approximateZoneFromHostname是否被设置)。一旦那个zone的信息可获得,他可以在ServerListFilter被使用。缺省情况下,由于使用ZonePreferenceServerListFilter,它被用于定位一个和Client相同zone的server。 默认情况下,client的zone是和远程实例一样的,通过eureka.instance.metadataMap.zone来设置。

三、How to use Ribbon Without Eureka 脱离Eureka怎么使用用Ribbon

下面是我从官方文档文明中截取的一张图,里面说的比较详细。

上面这段英文翻译过来的主要意思是:

Eureka是一个实用的方式,它抽象了远程服务的发现机制,可以使你不用在Clinet中硬编码URLS。但如果你不打算使用它,Ribbon和Feign仍然是相当可用的。假设你已经声明了一个@RibbonClient为一个“Stores”的服务。Eureka没有被使用。Ribbon Client会缺省到一个已配置的Server列表。你可以提供配置像: stores.ribbon.listOfServers: example.com,google.com

Example: 没有Eureka,如何使用Ribbon

ribbon.eureka.enabled=false

四、Using the Ribbon API Directly 使用Ribbon API

下面这段代码中直接使用LoadBalancerClient

五、 重试机制

由于Eureka 实现服务治理机制中,强调AP(可用性与可靠性),从而牺牲了一定的一致性。在极端情况下它宁愿接受故障的实例也不要丢掉“健康”实例。比如,当服务注册中心的网络发生故障断开时,由于所有的服务实现无法维持续约心跳,在强调AP的服务治理中心将会把所有服务实例剔除掉,而EUREKA会因为超过85%的实例丢失心跳而会触发保护机制,注册中心会保留此时的所有节点,以实现服务间依然可以进行互相调用的场景,即使其中有部分故障节点,但这样可以继续保障大多数的服务正常消费。

通过RestTemplate 实现的服务访问就会自动根据配置来实现重试策略。

如下是配置详细:

六、总结

Ribbon是一个客户端负载均衡器,能够给HTTP和TCP客户端带来灵活的控制。Ribbon的核心概念是命名的客户端。每一个负载均衡器都是一系列工作在一起的组件的一部分,并用于按需联系远程服务。

咱们在下节课程中介绍到:Feign 声明式服务调用

Feign其实已经使用了Ribbon,在下节中我们会谈到@FeignClient 注解。

声明:文章属于个人原创,转载请注明文章出处

原文发布于微信公众号 - 全华班(quanhuaban)

原文发表时间:2017-12-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

用python爬虫抓站的一些技巧总结

这些脚本有一个共性,都是和web相关的,总要用到获取链接的一些方法,再加上simplecd这 个半爬虫半网站的项目,累积不少爬虫抓站的经验,在此总结一下,那么以...

2695
来自专栏坚毅的PHP

HBase Cassandra Riak HyperTable

Cassandra                                                              ...

3167
来自专栏全栈架构

Spring Boot与Kotlin使用Spring Data Rest创建HAL风格Restful接口

REST web服务已成为在web上应用程序集成的首选方式。在其核心中,REST定义了系统由客户端交互的资源组成。这些资源以超媒体驱动的方式实现。Spring ...

652
来自专栏唐维黎的专栏

Web 性能压测工具 ApacheBench(ab)使用总结

对于 web 服务,不管是上新,还是平时产品运营,节假日活动等,在这之前都需要评估现网压力承受能力,提前进行扩容,并做到防患于未然。所以对网站性能压力测试是必不...

1.4K0
来自专栏挖掘大数据

详解Hadoop HA 如何运作

最近对于Hadoop技术有比较大的兴趣,但由于接触时间不长,很多技术细节认识不够,作为一个技术人员,本着追根溯源的精神,还是有必要吃透,也为自己的工作沉淀一些经...

2665
来自专栏Golang语言社区

剖析Go编写的Socket服务器模块解耦及基础模块的设计

Server的解耦—通过Router+Controller实现逻辑分发 在实际的系统项目工程中中,我们在写代码的时候要尽量避免不必要的耦合,否则你以后在更新和维...

3627
来自专栏Golang语言社区

剖析Go编写的Socket服务器模块解耦及基础模块的设计

Server的解耦—通过Router+Controller实现逻辑分发 在实际的系统项目工程中中,我们在写代码的时候要尽量避免不必要的耦合,否则你以后在更新和维...

3438
来自专栏喔家ArchiSelf

老码农眼中的存储

存储,是我们码农每天都要打交道的事情,而当我们面对RAID,SAN,对象存储,分布式数据库等技术的时候,又往往似是而非,存储成了我们熟悉的陌生人。

933
来自专栏流媒体人生

流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)

         Real-time Transport Protocol)是用于Internet上针对多媒体数据流的一种传输层协议。RTP协议详细说明了在互联...

1653
来自专栏Golang语言社区

fasthttp中的协程池实现

fasthttp中的协程池实现 协程池可以控制并行度,复用协程。fasthttp 比 net/http 效率高很多倍的重要原因,就是利用了协程池。实现并不复杂,...

4939

扫码关注云+社区