SpringCloud组件(6大组件图解)

SpringCloud组件(6大组件图解)-mikechen

Spring Cloud

SpringCloud 是一套完整的微服务解决方案,基于 SpringBoot框架,准确的说,它不是一个框架,而是一个大的容器,它将市面上较好的微服务框架集成进来,从而简化了开发者的代码量。

它利用 SpringBoot的开发便利性简化了分布式系统的开发,比如服务发现、服务网关、服务路由、链路追踪等。

Spring Cloud 并不重复造轮子,而是将市面上开发得比较好的模块集成进去,进行封装,从而减少了各模块的开发成本。

一句话总结:Spring Cloud 提供了构建分布式系统所需的“全家桶”。

Spring Cloud核心组件

SpringCloud组件(6大组件图解)-mikechen

Spring Cloud Netflix 集成众多Netflix的开源软件:Eureka, Hystrix, Zuul, Archaius,组成了微服务的最重要的核心组件,这里主要介绍5大常用组件。

1.Eureka

Eureka作为 Spring Cloud 框架的注册中心,与之对应的是 Dubbo 框架的Zookeeper。

SpringCloud组件(6大组件图解)-mikechen

上图简要描述了Eureka的基本架构,由3个角色组成:

1)Service Provider: 暴露服务的服务提供方。

2)Service Consumer:调用远程服务的服务消费方。

3)EureKa Server: 服务注册中心和服务发现中心。

2.Hystrix

熔断器,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

分布式系统环境下,服务间类似依赖非常常见,一个业务调用通常依赖多个别的服务,如下图:

SpringCloud组件(6大组件图解)-mikechen

如果各个服务正常运行,那大家齐乐融融,但是如果其中一个服务Service C崩坏掉会出现什么样的情况呢?如下图:

SpringCloud组件(6大组件图解)-mikechen

ServiceB依赖于ServiceC,由于ServiceC访问量比较大,由于ServiceC挂了,很可能ServiceB也会被拖累挂。

同理上游的ServiceA还依赖于ServiceB,同样也会被涉及。

最终一个服务失败,导致整条链路的服务都失败的情形,为造成大面积的服务雪崩效应。

这就给之前我们的大A股熔断是一个道理,所以针对这种情况需要考虑引入Hystrix 熔断机制,避免大面积雪崩等场景。

Hystrix 断路器是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方不会长时间、不必要占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

3.Zuul

Zuul是Spring Cloud全家桶中的微服务API网关。

所有从设备或网站来的请求都会经过Zuul到达后端的应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。

简单的话,Zuul就是楼下保安亭的大爷,所有进入大楼的人,都需要大爷检查,得到大爷的许可。我们可以通过一张图理解。

SpringCloud组件(6大组件图解)-mikechen

4.Ribbon

Zuul默认和Ribbon结合实现了负载均衡的功能,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。

SpringCloud组件(6大组件图解)-mikechen

5.Spring Cloud Config

SpringCloud组件(6大组件图解)-mikechen

6.Zipkin

Zipkin是一款分布式实时数据追踪系统,能够收集服务间调用的时序数据,提供调用链路的追踪。

SpringCloud组件(6大组件图解)-mikechen

Zipkin主要解决以下3点问题:

1.动态展示服务的链路;

2.分析服务链路的瓶颈并对其进行调优;

3.快速进行服务链路的故障发现。

这就是Zipkin服务跟踪系统存在的目的和意义。

实际工作中,我们可能会有几十上百的微服务节点,每一个节点有需要有配置信息,比如数据库的连接,服务中心的地址等等,当中信息变化的时候,我们可能面临手动一台一台修改的囧境。为了解决上述问题,我们能否借鉴 Git 的思想,有一个标准的配置,当我们配置修改,我们只需要同步刷新一下即可,不用手动搬运呢?答案是有的,我们可以通过 Spring Cloud Config 达到同步更新配置信息。

Spring Cloud架构实现

通过这张图,可以比较清楚的了解到各组件配置使用运行机制:

SpringCloud组件(6大组件图解)-mikechen

1、请求统一通过API网关(Zuul)来访问内部服务.

2、网关接收到请求后,从注册中心(Eureka)获取可用服务

3、由Ribbon进行均衡负载后,分发到后端具体实例

4、微服务之间通过Feign进行通信处理业务

5、Hystrix负责处理服务超时熔断

6、Turbine监控服务间的调用和熔断相关指标

以上就是SpringCloud组件详解,更多SpringCloud请查看:Spring Cloud教程(史上最全图文详解)

作者简介

陈睿|mikechen,10年+大厂架构经验,大厂资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法