深入浅出 -- 系统架构之在Java体系中的微服务标准组件

前面我们介绍了微服务架构的各个组件以及各组件的职责,在Java领域中,Spring可以说是无人不知无人不晓的,我们现代的企业级应用和互联网应用,很大一部分都是构建在Spring生态体系上的,同样,实现微服务架构的SpringCloud也是在Spring基础上生根发芽的。

下面我们来看一下Spring、Springboot、SpringCloud之间的关系:

Spring是整个微服务开发的基石,在此基础上对Spring进行简化和封装,形成Springboot敏捷开发框架,而想掌握SpringCloud微服务开发,必须先掌握Springboot。

SpringCloud提供了完整的微服务架构技术生态,像我们上篇文章提到的各类组件,在SpringCloud中都有着对应的实现。(如上图)

1、SpringCloud 实现微服务架构的具体组件

不过在这里需要注意一点,SpringCloud各组件并不是完全由Spring机构自行研发的,秉持着不重复造轮子的观念,Spring机构整合了市面上各大厂商优秀的开源作品,比如在SpringCloud中使用的注册中心组件就是选用了Netflix 的 Eureka,在此基础上进行整合形成了完整的Java微服务架构解决方案。我们前面列举出来的8个微服务标准组件在SpringCloud中都对应着具体实现。并且同一类组件可能有着多个开源产品供我们选择,这些产品在SpringCloud中是彼此兼容的。下面我们一起来看看8大组件的具体实现产品:

(1)注册中心

SpringCloud中注册中心使用的组件有Netflix 的 Eureka 1.xHashiCorp Consul ,Eureka是Netflix公司提供的开源注册中心,2.x版本现已停止维护 。HashiCorp Consul倒是在持续维护,但商用授权版本于2020年受到贸易管制已禁止国内使用

(2)负载均衡

SpringCloud中负载均衡使用的组件是Netflix Ribbon,属于微服务内置的客户端负载均衡组件,支持多种负载均衡策略。

(3)服务通信

SpringCloud中服务通信使用的组件是Netflix FeignSpringCloud RestTemplateFeign 是基于Ribbon声明式RESTful服务调用组件,已于2020年停止维护RestTemplateSpringCloud自研的服务间RESTful通信模板对象。

(4)API服务网关

SpringCloud中服务网关使用的组件是Netflix ZuulSpringCloud GatewayZuul 属于SpringCloud第一代网关 ,于2020年停止维护Gateway 是SpringCloud自研的第二代网关,使用简单方便,功能更为强大。

(5)配置中心

SpringCloud中使用的配置中心组件是SpringCloud Config,属于SpringCloud 自研的配置中心组件,通过GitHub/Gitee统一托管微服务的应用配置文件。

(6)集中式日志管理

SpringCloud 中可以使用ELK进行日志统一管理,在SpringCloud中并未内置统一组件,如想实现此功能需自行搭建ELK集群实现。

(7)分布式链路追踪

SpringCloud中链路追踪组件使用的是SpringCloud Sleuth和Zipkin Server组件,Sleuth是SpringCloud分布式调用链路跟踪系统,用于产生链路数据。

(8)服务保护

SpringCloud中服务保护组件是Netflix Hystrix,属于容错管理工具,实现了断路器模式,通过控制服务节点从而对延迟和故障提供更强大的容错机制。

以上是SpringCloud的重要组成部分,还有很多组件没有提到,如果大家有兴趣可以自行去SpringCloud官网查看更多的组件及介绍。

从上述的描述中,我们可以发现一个问题 ,正是因为SpringCloud集众家之所长,导致它也受制于第三方厂商的掣肘,以Zuul为例,Netflix宣布停止维护,Spring机构不得不寻求其他的替代品或是自行研发 。同时,SpringCloud作为国外的产品引入国内后,也出现了一些问题,比如SpringCloud Config默认将配置文件托管在GitHub仓库中,但国内的厂商并不喜欢这样做,他们更希望的是将配置文件存储在自己的数据库中 。因此,阿里巴巴在原有的基础上结合多年的开源技术沉淀,设计了更符合国内需要的SpringCloud Alibaba

2、SpringCloud Alibaba实现微服务架构的具体组件

SpringCloud Alibaba是隶属于SpringCloud子项目,是国内微服务开发一站式解决方案,与原有的SpringCloud兼容的同时,对微服务生态进行扩展,通过添加少量的配置注解,便可实现更符合国人使用习惯的微服务架构。

下面我们再一起来看看SpringCloud Alibaba依托哪些组件实现微服务架构:

(1)注册中心

SpringCloud Alibaba中使用Alibaba Nacos 组件实现注册中心,Nacos提供了一组简单易用的特性集,可快速实现动态服务发现、服务配置、服务元数据及流量管理。

(2)负载均衡

SpringCloud Alibaba 使用Nacos服务端均衡实现负载均衡,与Ribbon在调用端负载不同,Nacos是在服务发现的同时利用负载均衡返回服务节点数据。

(3)服务通信

SpringCloud Alibaba 使用Netflix FeignAlibaba Dubbo 组件来实现服务通行,前者与SpringCloud采用了相同的方案,后者则是对自家的RPC 框架Dubbo也给予支持,为服务间通信提供另一种选择。

(4)API服务网关

SpringCloud Alibaba 在API服务网关 组件中,使用与SpringCloud相同的组件,即:SpringCloud Gateway

(5)配置中心

SpringCloud Alibaba在配置中心组件中使用Nacos内置配置中心 ,Nacos内置的配置中心,可将配置信息存储保存在指定数据库中。

(6)集中式日志管理

SpringCloud Alibaba在原有的ELK方案外,还可以使用**阿里云日志服务(LOG)**实现日志集中式管理。

(7)分布式链路追踪

SpringCloud Alibaba在分布式链路组件 中采用与SpringCloud相同的方案,即:Sleuth/Zipkin Server

(8)系统保护

SpringCloud Alibaba使用Alibaba Sentinel实现系统保护,Sentinel不仅功能更强大,实现系统保护比Hystrix更优雅,而且还拥有更好的UI界面。

在以上核心组件的实现基础上,SpringCloud Alibaba还在其他方面提供了通用组件,来使得我们的微服务架构更健壮。以下简单介绍一下:

(1)消息队列

SpringCloud Alibaba在原有SpringCloud支持的MQ基础上,对自己的开源消息队列产品RocketMQ组件进行集成。提供了更多的选择。

(2)分布式事务

SpringCloud Alibaba 在分布式事务上采用 Alibaba Seata组件,Seata是阿里巴巴开源分布式事务中间件,内置AT、TCC和SAGA三种模式适用不同的分布式事务场景。

(3)任务调度

SpringCloud Alibaba 在任务调度上采用 Alibaba Cloud SchedulerX组件,SchedulerX是阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准、高可靠、高可用的定时任务调度服务。

(4)分布式存储

SpringCloud Alibaba在分布式存储上采用Alibaba Cloud OSS组件,OSS是阿里云对象存储服务,是阿里云提供海量、安全、低成本、高可靠的云存储服务。

将SpringCloud 和SpringCloud Alibaba各维度组件对比发现,SpringCloud Alibaba对服务注册,配置中心与负载均衡都整合进了Nacos,这样简化了微服务架构的复杂度,出问题的概率也会降低,原有的服务保护组件也调整成了Sentinel,相较于Hysterix更强大,使用也更友好。同时在实现核心组件基础上,依托阿里云的强大能力,提供了更多的新特性,很多复杂场景通过SpringCloud Alibaba结合阿里云便可轻松实现。

相关推荐
苹果醋31 小时前
React源码02 - 基础知识 React API 一览
java·运维·spring boot·mysql·nginx
Hello.Reader1 小时前
深入解析 Apache APISIX
java·apache
菠萝蚊鸭2 小时前
Dhatim FastExcel 读写 Excel 文件
java·excel·fastexcel
旭东怪2 小时前
EasyPoi 使用$fe:模板语法生成Word动态行
java·前端·word
007php0072 小时前
Go语言zero项目部署后启动失败问题分析与解决
java·服务器·网络·python·golang·php·ai编程
∝请叫*我简单先生2 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl
ssr——ssss2 小时前
SSM-期末项目 - 基于SSM的宠物信息管理系统
java·ssm
一棵星2 小时前
Java模拟Mqtt客户端连接Mqtt Broker
java·开发语言
鲤籽鲲3 小时前
C# Random 随机数 全面解析
android·java·c#
zquwei3 小时前
SpringCloudGateway+Nacos注册与转发Netty+WebSocket
java·网络·分布式·后端·websocket·网络协议·spring