Spring-Cloud核心组件及底层原理( 四 )


所以我们直接对积分服务熔断不就得了,比如在 5 分钟内请求积分服务直接就返回了,不要去走网络请求卡住几秒钟,这个过程,就是所谓的熔断!
那人家又说,兄弟,积分服务挂了你就熔断,好歹你干点儿什么啊!别啥都不干就直接返回啊?
没问题,咱们就来个降级:每次调用积分服务,你就在数据库里记录一条消息,说给某某用户增加了多少积分,因为积分服务挂了,导致没增加成功!
这样等积分服务恢复了,你可以根据这些记录手工加一下积分 。这个过程,就是所谓的降级 。
为帮助大家更直观的理解,接下来用一张图,梳理一下隔离、熔断和降级的全流程:
Cloud核心组件之五:Zuul
说完了 ,接着给大家说说最后一个组件:Zuul,也就是微服务网关 。这个组件是负责网络路由的 。
不懂网络路由?行,那我给你说说,如果没有 Zuul 的日常工作会怎样?
假设你后台部署了几百个服务,现在有个前端兄弟,人家请求是直接从浏览器那儿发过来的 。
打个比方:人家要请求一下库存服务,你难道还让人家记着这服务的名字叫做 -?部署在 5 台机器上?
就算人家肯记住这一个,你后台可有几百个服务的名称和地址呢?难不成人家请求一个,就得记住一个?你要这样玩儿,那真是友谊的小船,说翻就翻!
上面这种情况,压根儿是不现实的 。所以一般微服务架构中都必然会设计一个网关在里面 。
像 、iOS、PC 前端、微信小程序、H5 等等,不用去关心后端有几百个服务,就知道有一个网关,所有请求都往网关走,网关会根据请求中的一些特征,将请求转发给后端的各个服务 。
而且有一个网关之后,还有很多好处,比如可以做统一的降级、限流、认证授权、安全,等等 。
总结
最后再来总结一下,上述几个Cloud 核心组件,在微服务架构中,分别扮演的角色:
:各个服务启动时,都会将服务注册到,并且还可以反过来从拉取注册表,从而知道其他服务在哪里 。
:服务间发起请求的时候,基于做负载均衡,从一个服务的多台机器中选择一台 。
Feign:基于 Feign 的动态代理机制,根据注解和选择的机器,拼接请求 URL 地址,发起请求 。
:发起请求是通过的线程池来走的,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题 。
Zuul:如果前端、移动端要调用后端系统,统一从 Zuul 网关进入,由 Zuul 网关转发请求给对应的服务 。
以上就是我们通过一个电商业务场景,阐述了Cloud 微服务架构几个核心组件的底层原理 。
文字总结还不够直观?没问题!我们将Cloud 的 5 个核心组件通过一张图串联起来,再来直观的感受一下其底层的架构原理:
#/song?id=