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

news2025/1/31 11:30:25

前面我们介绍了微服务架构的各个组件以及各组件的职责,在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结合阿里云便可轻松实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1586375.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高级详解

文章目录 约束概述分类主键约束概述特点定义及删除主键自增 唯一约束作用语法 非空约束作用语法 面试题:非空唯一约束与主键约束有什么区别默认值约束作用语法 总结 表关系及外键约束表关系概述分类一对多关系表设计外键字段设计原则 多对多关系表设定设计原则 一对…

【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)

Dijkstra单源最短路径 问题描述 输入n 表示n个结点,m表示m条边,求编号1的结点到每个点的最短路径 输出从第一个点到第n个点的最短路径 思路 将图g[][]中所有的权值初始化为0x3f表示正无穷 将dist[]中所有的值初始化为0x3f表示从第一个点到所有点的距离…

一辆新能源汽车需要多少颗传感器?

随着科技的发展和环保意识的日益提高,新能源汽车(包括纯电动汽车、混合动力汽车等)在全球范围内越来越受到欢迎。这些汽车不仅减少了碳排放,还推动了汽车产业的创新。然而,这些高科技汽车的背后,隐藏着许多…

Qt中播放GIF动画

在Qt应用程序中,如果你想在QLabel控件上播放GIF动画,可以使用QMovie类与QLabel配合来实现。以下是详细步骤和代码示例: 步骤1:引入必要的头文件 首先,在你的源代码文件中包含QMovie和QLabel相关的头文件:…

Java官网下载JDK21版本详细教程(下载、安装、环境变量配置)

文章目录 前言:一、下载(一).链接(直达JDK21)(二).官网搜索(可选其他版本) 二、安装三、环境变量配置四、验证安装和配置五、常见问题解答 前言: 本文将为您提供关于Java官网下载JDK21版本的详细教程。作为…

springboot在使用 Servlet API中提供的javax.servlet.Filter 过滤器 对请求参数 和 响应参数 进行获取并记录日志方案

不多说 直接上代码 第一步 package com.xxx.init.webFilter;import com.alibaba.fastjson.JSONObject; import com.xxx.api.constant.CommonConstant; import com.xxx.api.entities.log.OperationLog; import com.xxx.init.utils.JwtHelper; import com.xxx.init.utils.Reques…

King‘s AUTO的QI妙能力|实验室“总导演”

在2023年夏天,两场国际赛事分别在成都、杭州盛大举办——第31届世界大学生夏季运动会(大运会)以及第19届亚洲运动会(亚运会)。为确保开幕式的顺利进行,大运会共进行了三次全要素彩排,而亚运会则…

上海人工智能实验室的书生·浦语大模型学习笔记(第二期第三课——上篇)

书生浦语是上海人工智能实验室和商汤科技联合研发的一款大模型,这次有机会参与试用,特记录每次学习情况。 一、课程笔记 本次学习的是RAG(Retrieval Augmented Generation)技术,它是通过检索与用户输入相关的信息片段…

【MATLAB源码-第185期】基于matlab的16QAM系统相位偏移估计EOS算法仿真,对比补偿前后的星座图误码率。

操作环境: MATLAB 2022a 1、算法描述 1. 引言 M-QAM调制技术的重要性 现代通信系统追求的是更高的数据传输速率和更有效的频谱利用率。M-QAM调制技术,作为一种高效的调制方案,能够通过在相同的带宽条件下传输更多的数据位来满足这一需求…

springboot如何切换内置web服务器?

切换内置web服务器 这是没有引入web依赖的服务 这是引入web依赖的服务 由此可知默认是tomcat服务器 那么如何切换内置服务器 只要有对应服务器的坐标即可自动切换&#xff0c;先排除tomcat再引入依赖&#xff0c;比如切换成jetty服务器 <dependency><groupId>org…

d3dx9_43.dll丢失的一些可行的解决方案,有效解决d3dx9_43.dll丢失

在电脑中&#xff0c;d3dx9_43.dll文件丢失是一个相当普遍的问题。实际上&#xff0c;要解决这个问题有多种方法。今天&#xff0c;我们将讨论一下关于d3dx9_43.dll文件丢失的问题&#xff0c;并向大家介绍一些可行的解决方案。 一.快速了解d3dx9_43.dll文件 首先&#xff0c;…

Linux的学习之路:6、Linux编译器-gcc/g++使用

摘要 本文主要是说一些gcc的使用&#xff0c;g和gcc使用一样就没有特殊讲述。 目录 摘要 一、背景知识 二、gcc如何完成 1、预处理(进行宏替换) 2、编译&#xff08;生成汇编&#xff09; 3、汇编&#xff08;生成机器可识别代码 4、链接&#xff08;生成可执行文件或…

2024-基于人工智能的药物设计方法研究-AIDD

AIDD docx 基于人工智能的药物设计方法研究 AI作为一种强大的数据挖掘和分析技术已经涉及新药研发的各个阶段&#xff0c;有望推动创新药物先导分子的筛选、设计和发现&#xff0c;但基于AI的数据驱动式创新药物设计和筛选方法仍存在若干亟待解决的问题。我们课题组的核心研究…

【Entity Framework】如何使用EF中的生成值

【Entity Framework】如何使用EF中的生成值 文章目录 【Entity Framework】如何使用EF中的生成值一、概述二、默认值三、计算列四、设置主键五、显示配置值生成六、设置日期/时间值生成6.1 创建时间戳6.2 更新时间戳 七、替代值生成八、无值生成九、总结 一、概述 数据库列的值…

服务器端口被扫会出现哪些风险

一、安全风险增加端口扫描是黑客攻击的常见手段之一。通过对服务器端口进行扫描&#xff0c;黑客可以了解服务器的开放端口、服务类型以及可能存在的漏洞。一旦黑客发现漏洞并成功利用&#xff0c;就可能导致服务器被入侵&#xff0c;进而窃取数据、植入恶意软件或进行其他非法…

基于SSM的电影网站(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的电影网站&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring SpringMv…

编程规范(保姆级教程)

文章目录 为什么需要编程规范&#xff1f;&#x1f4a1;代码检测工具 ESLint&#x1f4a1;代码格式化 Prettier&#x1f4a1;ESLint 与 Prettier 配合解决代码格式问题eslint支持ts约定式提交规范Commitizen助你规范化提交代码什么是 Git Hooks使用 husky commitlint 检查提交…

解决Idea中文乱码

解决 Idea 中文乱码问题的方法通常包括以下几个步骤&#xff1a; 1、调整文件编码&#xff1a;确保项目中的文件编码与 Idea 中的编码设置一致。通常情况下&#xff0c;使用 UTF-8 编码是比较合适的选择。你可以在 Idea 中通过 File -> Settings -> Editor -> File E…

在keil里用c++编程(1)

做嵌入式开发时&#xff0c;我们对使用c语言写的库有强烈的需求&#xff0c;比如eigen&#xff0c;boost等&#xff0c;但是通常来说&#xff0c;我们的开发是围绕c语言进行的&#xff0c;怎么把c的库文件放在c语言环境下进行编译&#xff0c;就是我们需要面对的问题 1.问题来…

代码随想录第36、37天| 435. 无重叠区间 763.划分字母区间 56. 合并区间

435. 无重叠区间 435. 无重叠区间 - 力扣&#xff08;LeetCode&#xff09; 代码随想录 (programmercarl.com) 贪心算法&#xff0c;依然是判断重叠区间 | LeetCode&#xff1a;435.无重叠区间_哔哩哔哩_bilibili 给定一个区间的集合 intervals &#xff0c;其中 intervals[…