新睿云

> 知识库 > Spring Cloud?小意思,读后面试官都不如你知道多

Spring Cloud?小意思,读后面试官都不如你知道多

作者/来源:新睿云小编 发布时间:2019-12-10

Spring Boot 让我们从繁琐的配置文件中解脱了出来,而 Spring Cloud,它我们提供了一整套的微服务解决方案,大大的降低了微服务开发的门槛,同时也减少了开发成本。

Spring Cloud 并不是特指某个框架,它其实是一系列成熟框架的组合,通过 Spring Boot 风格的封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、容易部署的分布式系统开发工具包。

一、实际应用场景

假设咱们现在开发一个电商网站,要实现支付订单的功能,流程如下:

创建一个订单后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”

扣减相应的商品库存

通知仓储中心,进行发货

给用户的这次购物增加相应的积分

针对上述流程,我们需要有订单服务、库存服务、仓储服务、积分服务。整个流程的大体思路如下:

用户针对一个订单完成支付之后,就会去找订单服务,更新订单状态

订单服务调用库存服务,完成相应功能

订单服务调用仓储服务,完成相应功能

订单服务调用积分服务,完成相应功能

至此,整个支付订单的业务流程结束

流程框架图:

 支持流程图

支持流程图

二、Spring Cloud的基础组件

服务注册与发现

服务注册与发现是 Spring Cloud 中最核心的组件之一,整个系统中所有的服务都可以注册到注册中心,然后由注册中心进行统一调度,方便后续的水平扩展以及故障转移等。Spring Cloud 体系中的注册中心有很多的实现方式(参考上图),后续教程会一一介绍。

配置中心

随着服务的不断增多,同时每个服务也会有多个环境(开发环境、测试环境、生产环境等),每个环境的配置文件又会有所不同,但是其中又有许多配置是可以共用的,如果每个服务自己去管理这些配置,会给维护带来很大的麻烦,这时候,我们就需要引入配置中心去统一管理这些配置。Spring Cloud 提供了 Spring Cloud Config 来完成这项任务,但是也有社区提供的比较好的实现,如携程提供的 Apollo。但是,配置更新后怎样通知到具体服务,这又是个问题,所以 Spring Cloud 还提供了 Spring Cloud Bus 组件,来进行服务间的通讯。

服务消费者

既然是微服务架构,那服务间的调用肯定是无法避免的,Spring Cloud 提供了 Ribbon 组件,它可以用来进行服务间的调用,同时,它还支持客户端的负载均衡。但是,直接使用 Ribbon 不是很方便,所以,Spring Cloud 基于 Netflix Feign ,并整合了 Ribbon,这就有了 Spring Cloud OpenFeign,它实现了声明式的服务调用客户端,使得编写 web 服务客户端更加方便。

服务容错

在微服务架构中,通常会有多个服务之间相互调用的情况,一旦某些基础服务出现故障,则可能造成整个系统的不可用,称之为服务雪崩,为了避免这种情况的发生,我们需要在服务出现故障时实现故障隔离和服务降级。针对这种情况,Spring Cloud 使用了 Hystrix 来实现服务的容错。

网关

网关为系统提供了路由、鉴权、监控、负载均衡等功能。Spring Cloud 为此提供了两个解决方案:Zuul 以及 Spring Cloud Gateway。

服务追踪

在微服务架构中,服务之间的调用链会随着服务的增多越来越复杂,当我们在排查某些问题以及监控服务间通讯的指标时,服务的追踪就变得非常重要。Spring Cloud 提供的实现是:Spring Cloud Sleuth。

服务测试

因为微服务架构的特性,每个服务都可能依赖其它的服务,而不同的服务可能是由不同的团队去维护的,这样当我们在测试某个服务时,需要将它依赖的服务都部署起来,成本非常大;而如果只是使用单元测试,需要 mock 非常多的数据,而且一旦依赖的服务接口改变了,单纯只通过单元测试是无法感知的。所以有人就提出了 CDC (Consumer-Driver Contracts) 即 消费者驱动契约 的方式来进行测试。Spring Cloud Contract 就是 CDC的一种实现。

文字总结还不够直观?没问题!我们将Spring Cloud的基础组件通过一张图串联起来,再来直观的感受一下其底层的架构原理:

图解架构 

图解架构

您可能感兴趣的内容:《es6是什么?与JavaScript的关系以及重点语法应用

热门标签
new year
在线咨询
咨询热线 400-1515-720
投诉与建议
{{item.description}}

—您的烦恼我们已经收到—

我们会将处理结果发送至您的手机

请耐心等待