初学SpringCloud:Ribbon的简单探究 (1)

1、背景介绍

目前,我本人正在学习微服务的有关的知识,已经学习了Eureka,ZooKeeper,Consul服务注册中心,并且进行了简单的实践。我在写微服务模块之间的互相调用代码的时候,用的还都是RestTemplate类的方式。使用这种方式的时候,需要有一个配置类,当搭建集群的时候呢,还要赋予RestTemplate负载均衡。这样就可以实现负载均衡的功能啦,默认采用的是轮询的方式。提到了负载均衡,就不得不提Ribbon了。

2、本篇博客的目的

本篇博客我想尽我所学,简单记录一下Ribbon的由来和一些简单的认识。

3、正式开始介绍Ribbon

SpringCloud Ribbon是基于Netflix Ribbon实现的一套 客户端(使用软件的人,消费者侧)负载均衡的工具。(实际就是负载均衡+服务调用的小组件)

简单的来说吧,Ribbon是Netflix发布的开源项目,主要是提供 客户端的负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB,负载均衡)后面所有的机器,Ribbon会自动的帮助你基于命中规则(如简单轮询,随机连接,最大权限等)去连接这些机器 。我们很容易的使用Ribbon实现自定义的负载均衡算法(也就是手写代码的方法,自己定义一套负载均衡的规则)。

陈述一下我理解的Ribbon的功能:

Ribbon主要的功能就是负载均衡,可以把它们两个紧密的联系在一起。首先正式而通俗浅显的解释一下什么是负载均衡吧:就是将用户的请求按照某种规则平摊的分配到多个服务上面,让各处的压力都尽量的均衡,从而也会达到系统的高可用。其实从字面意思上就不难理解。实现负载均衡的产品有很多,也有很多类型,并不是只有Ribbon这一种。常见的负载均衡软件还有Nginx,LVS等,实现负载均衡的硬件有 F5等。它们之间的区别我不是很清楚,有的还甚至只是知道这么一个概念名词。

我这里简单的陈述一下  Ribbon和Nginx两种软件负载均衡的区别吧(我本人也是看了一些博客和自己学习过以后的理解):首先说一下Nginx,Nginx 是客户端所有请求统一交给 Nginx,由 Nginx 进行实现负载均衡请求转发,属于服务器端负载均衡。既  请求  由 Nginx 服务器端进行转发。      而Ribbon属于客户端的负载均衡,Ribbon 是从 Eureka 注册中心(举个例子)服务器端上获取服务注册信息列表,缓存到JVM本地(也就是客户端,消费者端),然后在本地实现轮询负载均衡策略。
既在客户端实现负载均衡。(多说一下,这个缓存在本地的服务注册信息列表,也是需要定期跟注册中心交互更新的)。    再说一下Nginx和Ribbon应用场景的不同:Nginx适合于服务器端实现负载均衡比如 Tomcat (也就是很多人刚开始使用eclipse学习的时候,用servlet和jsp),Ribbon适合于在微服务中RPC远程调用实现本地服务负载均衡,比如 Dubbo、SpringCloud 中都是采用本地负载均衡(可以简单的理解为  微服务架构下使用的都是Ribbon的方式)。spring cloud的Netflix中提供了两个组件实现软负载均衡调用:Ribbon和Feign(其实现在使用的都是OpenFeign)。多说一句吧,Ribbon也是一个基于 HTTP 和 TCP 客户端的负载均衡器(这里是可以联想到RestTemplate类),它可以在客户端配置ribbonServerList(服务端列表),然后轮询请求以实现均衡负载(我们是可以手写轮询算法的,然后用自己手写的代码代替Ribbon内部封装的代码)。     再说一下Nginx和Ribbon之间性能的区别吧: Nginx性能更好,但Ribbon可以剔除不健康节点,Nginx剔除节点比较复杂。Ribbon还可以配合熔断器一起工作。Ribbon客户端负载均衡,所有客户端节点都维护自己要访问的服务端清单。Nginx服务端负载均衡的软件模块会维护一个可用的服务清单。   再说两个概念吧:   集中式LB(LoadBalancer) :即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件F5,也可以是软件 Nginx),由该设施负责将访问请求通过某种策略转发至服务的提供方。Nginx就属于集中式的LB。      进程内LB:将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可以使用,然后自己再从这些地址中选择出一个合适的服务器。Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。

Ribbon就是负载均衡+RestTemplate调用,这两个功能的结合,最后实现了我们的RPC远程服务调用。Ribbon在工作的时候分两步,第一步先选择EurekaServer,它优先选择在同一个区域内负载较少的Server。第二步:再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址其中Ribbon提供了多种策略:比如轮询,随机,根据响应时间加权等。

这里我想说一下使用Ribbon的时候,会使用的依赖。根据上面的Ribbon和Nginx的应用场景的分析,Ribbon适用于微服务分布式架构,微服务架构的开发都是会使用到服务注册中心的,像Eureka,ZooKeeper,Consul等服务注册中心都被SpringCloud集成了,只需要引入依赖就可以啦。使用不一样的服务注册中心需要引入不同的依赖,虽然引入的依赖不同,但是所有服务注册中心的依赖中都包含了Ribbon的依赖(这一点可以在IDEA中的项目右边的Maven的具体依赖的包含关系中查看到,我就不截图啦)。也就是说,只要你使用微服务分布式的架构,就要使用到SpringCloud集成的服务注册中心,就会默认可以使用Ribbon。

关于Ribbon的探究我就暂时陈述到这里啦。后续我了解的更深入了,再详细的说明吧,欢迎各位朋友指正赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的日月星河

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值