SpringCloud原理

SpringCloud

SpringCloud是基于SpringBoot的一整套实现微服务的框架。它提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,基于SpringBoot,会让开发微服务架构非常方便。
简而言之:一个帮助开发微服务应用的框架.

业务场景(已支付订单为例)

在这里插入图片描述

核心组件一:Eureka

从业务场景我们可以看到,要想完成订单,需要订单服务,库存服务,仓储服务,积分服务一起协调完成。
那么就会出现第一个问题:订单服务怎么找到其他服务,这时候就需要Eureka帮忙了。
在这里插入图片描述
在库存服务,和仓储服务,积分服务中都有一个Eureka Client组件,这个组件专门负责将这个服务的信息注册到Eureka Server中。简单来说就是告诉Eureka Server,自己在哪台机器上,监听哪个端口。而Eureka Server是一个注册中心,里面有一个注册表,保存了各服务的机器和端口号。
订单服务也有一个Eureka Client,当订单服务要找积分服务时就会找Eureka Server问一下:积分服务在哪台机器上?监听哪个端口号?然后将相关信息从Eureka Server的注册表中拉取到自己本地缓存起来。
这时如果订单服务想要调用库存服务,不就可以找自己的Eureka Client问一下积分服务在哪台机器上?监听哪个端口?收到响应后,就可以发送一个请求过去,调用积分服务的接口加减积分了
简而言之:

  • Eureka Client负责将这个服务的信息注册到Eureka Server中
  • Eureka Server注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号

核心组件二:Feign

当我们知道库存服务,积分服务,仓储服务在哪个机器上以及端口号,我们怎么调用它们的接口呢,这时候就需要Feign出马了。
在这里插入图片描述

  • 首先,如果你对某个接口定义了@FeignClient注解,Feign就会针对这个接口创建一个动态代理
  • 接着你要是调用那个接口,本质就是会调用 Feign创建的动态代理,这是核心中的核心
  • Feign的动态代理会根据你在接口上的@RequestMapping等注解,来动态构造出你要请求的服务的地址
  • 最后针对这个地址,发起请求、解析响应
    在这里插入图片描述

核心组件三:Ribbon

现在我们部署服务不可能只部署在一台机器上,那么新的问题又来了,如果库存服务部署在多个服务器上,我们到底掉那个接口呢?这个时候就轮到我们Ribbon出马了,他的作用就是负载均衡,会帮你在每次请求时选择一台机器,均匀的把请求分发到各个机器上
Ribbon默认的是最经典的Round Ribbon轮询算法,就是一台机器请求一次,一台一台换着来
Ribbon与Eureka,feign的协同合作如下
在这里插入图片描述

核心组件四:Hystrix

在高并发的场景下,大量请求调用订单服务时,可能导致订单服务不可用,就是微服务架构中恐怖的雪崩问题。
在这里插入图片描述
为了避免积分服务挂了导致订单服务无法进行,这时候就要用到Hystrix。
Hystrix会搞很多个小小的线程池,比如订单服务请求库存服务是一个线程池,请求仓储服务是一个线程池,请求积分服务是一个线程池。每个线程池里的线程就仅仅用于请求那个服务。
这个时候如果别人请求订单服务,订单服务还是可以正常调用库存服务扣减库存,调用仓储服务通知发货。只不过调用积分服务的时候,每次都会报错。但是如果积分服务都挂了,每次调用都要去卡住几秒钟干啥呢?有意义吗?当然没有!所以我们直接对积分服务熔断不就得了,比如在5分钟内请求积分服务直接就返回了,不要去走网络请求卡住几秒钟,这个过程,就是所谓的熔断!

那人家又说,兄弟,积分服务挂了你就熔断,好歹你干点儿什么啊!别啥都不干就直接返回啊?没问题,咱们就来个降级:每次调用积分服务,你就在数据库里记录一条消息,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!这样等积分服务恢复了,你可以根据这些记录手工加一下积分。这个过程,就是所谓的降级。
在这里插入图片描述

核心组件五: Zuul

职责: 负责网络路由

假设你后台部署了几百个服务,现在有个前端兄弟,人家请求是直接从浏览器那儿发过来的。打个比方:人家要请求一下库存服务,你难道还让人家记着这服务的名字叫做inventory-service?部署在5台机器上?就算人家肯记住这一个,你后台可有几百个服务的名称和地址呢?难不成人家请求一个,就得记住一个?你要这样玩儿,那真是友谊的小船,说翻就翻!

上面这种情况,压根儿是不现实的。所以一般微服务架构中都必然会设计一个网关在里面,像android、ios、pc前端、微信小程序、H5等等,不用去关心后端有几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务。

而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等。

总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值