大话SpringCloud---Ribbon是什么(理论知识)?
最近在跟着尚硅谷周阳老师学习SpringCloud的知识。学习到了Ribbon这一部分,今天就来简单记录一下这个小组件是干嘛的。
先看一下官方的结构图(Github官方文档):
在一个微服务架构中,服务中心我们以Eureka举例,客户端从EurekaServer拿到服务注册表时,会先缓存到本地。然后通过Ribbon组件决定去调用哪一个具体服务实例。
Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
举个例,一个客户端要去调用支付模块完成支付,一般大型电商都会有多个支付模块的实例,那我们具体要去调用哪一个实例呢?这里我们客户端从注册中心拿到注册表之后,客户端内的Ribbon会根据一些策略去决定远程调用具体的支付模块实例。
可以看到,上面就是我们平时说的负载均衡了。其实Ribbon就是负载均衡+RestTemplate。如果不规定策略的话,默认会使用轮询
算法去调用微服务实例。轮询
就是交替选取实例调用,就像中学时期值日一样,今天小明值日,明天就小红值日,而后天就到自己了。在程序中表示就是,第一次调用a实例,那下次就调用b实例,交替进行。
除了轮询
之外,还有随机、重试、加权
等等。顾名思义,看名字就可以知道其中逻辑,这里不做介绍了。
到这里,或许会发现,和之前了解过的nginx挺像的。确实,它们两都可以拿来做负载均衡。那区别是什么呢?
其实是它们的作用范围不一样。nginx是放到服务器上的(EurekaServer),而Ribbon是集成于客户端中。前者也称为集中式负载均衡,后者为进程式负载均衡。
-
集中式负载均衡,是所有的请求先经过一个服务器,由那个服务器决定你要调用哪一个实例,然后返回具体的微服务调用地址给你。拿一个现实中的例子,我们去医院看病,先去门诊部挂号,但是你不知道自己要挂哪一个科室的号,于是你说出了病情,说骨折了。于是在门诊部的医生告诉你要去骨科并且告诉了你骨科怎么走。你得到地址后就去看病了~
-
进程式负载均衡,这个是集成于客户端上的。就像我们上文介绍的一样了。客户端得到注册表之后,自行根据策略决定调用哪一个服务。承接之前的故事,你已经挂到骨科的号了,但是你发现号上面只写了“骨科”两字,没有写具体的医生。没办法你只能自己去现场看看。到了之后发现有很多骨科医生,有的忙,有的刚刚就诊完。这时没有具体的医生,你决定去找不忙的医生帮你看病。
综上,两者区别为实行负载均衡的对象不同。
今天记录到这里。最近在学习相关的SpringCloud知识,把学习的学习代码慢慢分享到Github仓库中,有兴趣的可以看下哈,会持续更新,过段时间会把周阳老师的脑图放上去。
仓库地址:https://github.com/here-Leslie-Lau/springcloud_demo
感谢观看✨
本文地址:https://blog.csdn.net/Jokeronee/article/details/107385296