重识Spring Cloud

虽然之前自己使用过Spring Cloud中的一些组件,但是对于整个Spring Cloud体系的认识还是不够深刻,现在整理一下学习到的知识,来重新认识Spring Cloud

Spring Cloud是一种为构建分布式微服务系统而出现的一站式解决方案,具有庞大丰富的生态,它是基于Spring Boot之上,使得Java应用构建微服务更加的方便。

一般情况下,构建分布式微服务系统都需要服务注册中心、配置中心、负载均衡、网关、熔断和降级等等基础功能,Spring Cloud都提供了相对应的解决方案。

Spring Cloud架构图

服务注册中心

意义

微服务架构下,服务划分众多,服务与服务之间的调用是不可避免的。如果没有服务注册中心,调用其它服务中的接口就需要知道服务提供方的ip和端口,这就会带来许多的问题。比如服务提供方中的一个应用实例突然崩溃,调用方如何再去调用该服务下其它应用实例中的相同接口来保证系统高可用呢?再比如服务提供方的ip会变化,难道调用方中的代码也要随时根据其改变而修改代码吗?

诸多的不便就需要服务注册中心来解决,服务注册中心可以来管理服务,服务与服务之间的调用就通过服务注册中心这个中介来完成。

功能

服务注册中心一般具有服务注册、服务续约、获取注册列表信息、服务下线、服务剔除等功能。

组件

Spring Cloud集成的服务注册中心的组件有:EurekaZookeeperConsulNacos等。

配置中心

意义

微服务架构下,服务众多,各个服务都会有属于自己的配置文件。如果在项目运行的时候需要修改某些应用的配置,没有配置中心,我们就需要去每个应用存放目录下一个个地修改对应的配置文件,然后再重启应用。

而有了配置中心,就可以对配置文件进行统一的管理,除此之外,配置中心还可以让修改配置文件时不需要重启应用就能让某些修改的配置项直接生效。

功能

配置中心一般具有配置管理、配置项热更新、配置版本控制等功能。

注意点

对于应用的配置,需要热更新的配置项放到配置中心意义比较大,基本不会变更的配置(例如数据库连接配置)放在微服务本地比较好。

组件

Spring Cloud集成的配置中心的组件有:NacosApolloSpring Cloud Config等。

负载均衡

意义

微服务架构下为了支撑高并发,一个服务一般都拥有多个应用实例。如果没有负载均衡,所有的请求可能都只流入到对应服务下的其中一个应用实例,从而导致该应用实例崩溃,并且其它空闲的应用实例没有得到充分的利用。为了解决这种问题就必须要在服务中引入负载均衡策略。

功能

负载均衡顾名思义就是提供了对请求负载均衡的功能。

组件

Spring Cloud集成的负载均衡的组件有:Ribbon等。

网关

意义

当用户通过前台对系统发起请求,微服务架构下的服务众多,每个应用的ip和端口各不相同。如果没有网关,就会带来诸多的问题。比如访问后台接口需要直接通过ip和端口,如果下次应用部署的机器ip变了那前台代码还得跟着变。再比如整个系统会遭受许多网络攻击,没有网关那就需要每个应用都去解决网络攻击的问题,这就使代码变得重复冗余,每个团队负责的应用都得去实现这个重复的功能。

当然网关所能解决的问题不止这些,简单来讲网关是系统对外的唯一入口,介于客户端与服务器端之间。

功能

一般来说,网关具有对请求鉴权、限流、 路由、监控等功能。当然,网关也是能以服务的形式注册到注册中心中的,好处就是可以通过注册中心拿到所有服务的元数据,拿到这些信息之后网关就可以通过路由映射将请求统一。

组件

Spring Cloud集成的网关的组件有:ZuulSpring Cloud Gateway等。

熔断和降级

意义

在微服务架构下,服务之间的相互调用十分常见,而调用失败导致的阻塞也是不可避免的。例如服务A调用服务B,服务B调用服务C,但是因为某些原因服务C崩溃了,这时候大量的请求会在服务C中阻塞,此时请求因为阻塞无法返回响应,就会导致服务A和服务B也一同阻塞,这就是一种服务雪崩。

熔断和降级的作用就是当这种情况出现的时候,超出一定阈值的时候就会将此请求链路进行处理,从而提高系统的弹性。

功能

熔断就是当指定时间窗内的请求失败率达到设定阈值时,系统将通过断路器直接将此请求链路断开,以免导致服务雪崩的现象。

降级则是另一种较为友好的处理方式,提高了用户的体验,当一个方法调用异常时,通过执行另一种代码逻辑来给用户更友好的回复。

组件

Spring Cloud集成的熔断和降级的组件有:HystrixSentinel等。

Spring Cloud Kubenetes

Spring Cloud和Kubenetes在核心功能上有很大一部分交集,k8s中的Service有服务注册、负载均衡的能力,ConfigMap和Secret有配置管理的能力,Ingress可以作为统一网关,这些功能组件在Spring Cloud生态体系中都有类似的实现。

Spring Cloud Kubenetes这个项目是将k8s当作Spring Cloud微服务应用所需要的注册中心、配置中心,以此来简化微服务应用的整体架构,更好的和云原生环境进行融合。

作者

chengzhy

发布于

2022-05-09

更新于

2022-05-12

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×