SpringCloud2023最新版本该如何进行组件选型?

news2024/10/7 0:27:45

前言

Developing distributed systems can be challenging. Complexity is moved from the application layer to the network layer and demands greater interaction between services. Making your code ‘cloud-native’ means dealing with 12-factor issues such as external configuration, statelessness, logging, and connecting to backing services. The Spring Cloud suite of projects contains many of the services you need to make your applications run in the cloud.

开发分布式系统具有挑战性。复杂性从应用程序层转移到网络层,并要求各个服务之间更密切的交互。将代码设计为“云原生”意味着要处理12要素(12-factor)的问题,例如外部配置、无状态性、日志记录以及与后端服务的连接。Spring Cloud项目套件中包含了许多服务,可以使应用程序在云环境中运行。

架构图

Spring Cloud architecture highlights

  1. 多端适配,物联网、手机、电脑设备通过网关访问服务。
  2. 网关使用配置中心获取配置,通过服务注册中心发现调用微服务。
  3. 服务运行时进行分布式追踪。

组件选型

服务发现

通过服务发现组件可以监控服务的部署和存活情况,并实现基于服务编码的负载均衡进行远程调用。以下是一些常见的服务发现工具:

  • Netflix Eureka:已停止维护,不再推荐使用。
  • HashiCorp Consul:提供了强大的服务发现和配置管理功能。
  • Zookeeper:在从 Eureka 切换过来时成本较低,并且功能相对简单。推荐
  • Nacos:功能完善,提供了用户界面(UI),易于管理和监控。推荐

接口网关

好的,以下是为你补充完善的内容:

多端调用和微服务部署可能会导致系统变得复杂。通过 API 网关调用多个服务可以减少系统的复杂程度。API 网关能够提供安全拦截处理、路由信息传递、隐藏服务、负载均衡等功能。

在选择 API 网关时,有几个常用的框架可供选择:

  • Spring Cloud Gateway:这是一个基于 Spring Cloud 生态系统的 API 网关,它提供了丰富的功能,如路由、过滤器、负载均衡等。Spring Cloud Gateway 具有良好的扩展性和灵活性。推荐
  • Zuul:这是一个早期的 API 网关框架,由 Netflix 开发。然而,需要注意的是,Zuul 已经停止维护,不再推荐使用。

除了 Spring Cloud Gateway 和 Zuul 之外,还有其他一些 API 网关框架,如 Kong、Tyk、APISIX 等。

云服务配置

在微服务中,配置嵌入到应用侧有很多限制。例如不能实时更新、更新配置需要重启、版本维护没有、多环境支持。配置中心主要解决的就是这些问题。

  • Spring cloud config,分布式部署、支持注册中心、版本控制等。推荐。
  • Nacos,提供UI可视化界面。也支持分布式部署、支持注册中心、版本控制等。推荐。

熔断

当分布式系统中出现服务不可靠的情况时,熔断器可以帮助解决这个问题。熔断器可以采用限流、降级、重试等机制来处理服务不可靠的情况。

  • Resilience4J:这是一个轻量级的熔断器框架,它提供了限流、降级和重试等功能。Resilience4J 易于使用和配置。推荐
  • Sentinel:这是一个强大的熔断器和限流框架,它支持多种限流策略,并提供了丰富的监控和指标功能。推荐
  • Hystrix:这是一个经典的熔断器框架,由 Netflix 开发。Hystrix 提供了断路器、降级和缓存等功能。

服务追踪

调试分布式应用确实是一项复杂且耗时的任务。当问题出现时,可能会涉及到多个独立的微服务。Sleuth 提供了一系列服务调用追踪的集成方案,使得服务追踪更加可预测和可重复。

需要注意的是,Sleuth 已经停止对 Spring Boot 3 的支持,而后续的替代者是 Micrometer Tracing。Micrometer Tracing 提供了类似的接口和功能。

  • Micrometer Tracing:作为 Sleuth 的后继者,Micrometer Tracing 提供了更强大和灵活的追踪功能。推荐
  • Zipkin:这是一个开源的分布式追踪系统,它可以收集和可视化服务之间的调用关系。
  • Skywalking:这是一个功能丰富的分布式追踪和监控系统,它提供了全面的监控和分析功能。推荐

测试集成

想要拥有可靠、值得信赖和稳定的 API,就得需要单元测试。合同式测试是高效团队常用的一种技术,它通过将 API 的内容形式化并构建相关测试,来帮助确保代码或者 API 是正常运行功能正常的。需要注意的是,Spring Cloud Contract 已经停止维护了。在选择测试框架时,推荐使用 JUnit 5(Spring Boot Test)。JUnit 5 是一个广泛使用的单元测试框架,与 Spring Boot 集成良好,可以方便地进行测试编写和执行。

  • Spring Cloud Contract 停止维护了
  • Junit5(Spring boot test)可以编写针对 API 的测试用例,验证 API 的响应结果是否符合预期。通过模拟请求和响应,可以对 API 进行全面的测试,包括参数验证、响应状态码、数据返回等。 推荐

远程调用

在微服务架构中,存在许多独立的单体服务,服务之间的调用频率增加,依赖关系也变得更加复杂。为了解决这些问题,我们需要一个通用的框架来处理服务之间的调用,并解决负载均衡、安全机制、服务降级等一系列问题。

OpenFeign 是一个非常流行和强大的框架,用于在微服务之间进行调用。它提供了简洁而易于使用的 API,使开发者能够方便地调用其他服务。OpenFeign 支持负载均衡、熔断器、重试机制等功能,以提高系统的可靠性和容错性。

使用 OpenFeign,你可以通过注解或配置来定义服务接口和调用方式,然后框架将自动处理服务的发现、调用和异常处理。它还支持动态路由和参数传递,可以轻松实现服务之间的通信。
OpenFeign 与其他微服务框架(如 Spring Cloud)集成良好,可以与注册中心(如 Eureka)配合使用,实现服务的自动注册和发现。

  • OpenFeign,推荐

接口文档

通过统一的接口文档管理,可以减少接口模拟、接口测试、接口文档输出等相关工作。

  • springdoc-openapi,推荐,支持springboot3生态,支持openapi3
  • springfox(前身swagger-springmvc) ,不推荐,缺少openapi3的支持

分布式事务

分布式事务是指在分布式系统中,跨多个节点或多个数据库的操作需要保持一致性和原子性的一种机制。在传统的单节点事务中,事务在一个数据库上执行,而在分布式事务中,事务可能涉及多个数据库或多个服务之间的操作。

分布式事务面临的挑战主要是协调和保持数据的一致性。由于涉及多个节点或多个数据库,事务的执行会面临以下问题:

  • ACID属性的保持:分布式事务需要满足ACID(原子性、一致性、隔离性、持久性)属性,即要么所有操作都成功,要么都失败。这需要确保在不同节点或数据库上的操作都能同步进行,并且在出现故障时能够回滚。
  • 并发控制:由于分布式事务可能涉及多个并发执行的操作,需要对并发访问进行控制,以避免数据的不一致性。常见的并发控制方法包括锁机制、多版本并发控制(MVCC)等。
  • 故障处理:在分布式环境下,各个节点或数据库可能出现故障或网络通信中断,这可能导致事务的中断或数据不一致。因此,需要有效的故障处理机制,如故障恢复、重试机制等。

为了解决这些问题,有多种分布式事务协调协议被提出,包括两阶段提交(2PC)、三阶段提交(3PC)、Paxos、Raft等。这些协议通过协调参与者节点的行为,保证了分布式事务的一致性和原子性。此外,还有一些分布式事务的替代方案,如基于消息队列的最终一致性、补偿事务等。这些方案在一定程度上降低了分布式事务的复杂性和性能开销,但也带来了一些其他的约束和问题。

分布式事务是在分布式系统中保持一致性和原子性的重要机制,需要采用合适的协调协议和方案来解决数据的一致性和并发控制的问题。

  • Seata,推荐,是由阿里中间件团队发起的开源项目 Fescar,后更名为Seata,它是一个是开源的分布式事务框架。以高效并且对业务0侵入的方式解决微服 务场景下面临的分布式事务问题,它目前提供AT模式(即2PC)及TCC模式的分布式事务解决方案。

组件确定

通过SpringCloudAlibaba、SpringCloud的组件推荐选型,SpringCloud2023最终组件选型如下:

  • 注册中心(Spring Cloud Zookeeper):负责服务的注册和发现。
  • 网关(Spring Cloud Gateway):作为外部请求的入口,实现路由和负载均衡。
  • 云服务配置(Spring Cloud Config):用于管理服务的配置信息。
  • 熔断(Sentinel):提供熔断器功能,实现服务的限流和降级。
  • 服务追踪(Micrometer Tracing):用于追踪和监控服务的性能和调用情况。
  • 测试集成(JUnit 5 + Spring Boot Test):用于编写和执行单元测试。
  • 远程调用(OpenFeign):用于服务之间的远程调用。
  • 接口文档(springdoc-openapi + openapi3):用于生成和管理 API 的文档。
  • 分布式事务(Seata):用于处理跨多个服务的事务。

这些组件通过相互协作,构建了一个完整的微服务架构,实现了服务的注册、发现、配置管理、熔断器、服务追踪、测试集成、远程调用和接口文档生成等功能。每个组件在整个架构中扮演着不同的角色,共同确保了微服务系统的可靠性、可扩展性和高可用性。

关于作者

来自一线全栈程序员nine的八年探索与实践,持续迭代中。欢迎关注“雨林寻北”或添加个人卫星codetrend(备注技术)。

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

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

相关文章

万赞提问:自动化测试的发展前景怎么样?

一个行业前景怎么样? 先看看市场需求。 下面是一部分自动化测试岗位的相关数据: 据统计,当前企业对自动化的需求已经接近一半左右了,请看下图: 自动化发展的前景如何,市场给出的薪资也是一个重要参考,来看…

Linux笔记--GCC

GCC编译器是Linux系统下最常用的CIC编译器,大部分Linux发行版中都会默认安装。GCC编译器通常以gcc指令的形式在终端中使用。 一.gcc指令 1.直接编译 创建a.c文件 #使用gcc对程序进行编译,默认得到可执行文件的文件名为a.out gcc [文件名].c gcc a.c .…

【框架学习 | 第一篇】一篇文章读懂MyBatis

文章目录 1.Mybatis介绍1.1Mybatis历史1.2Mybatis特点1.3与其他持久化框架对比1.4对象关系映射——ORM 2.搭建Mybatis2.1引入依赖2.2创建核心配置文件2.3创建表、实体类、mapper接口2.4创建映射文件2.4.1映射文件命名位置规则2.4.2编写映射文件2.4.3修改核心配置文件中映射文件…

智能驾驶规划控制理论学习06-基于优化的规划方法

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法(Le…

怎么判断晶振是否起振?晶振不起振该怎么办?

如果怀疑晶振不起振造成电路板上电不良,该如何进一步判定是晶振本身的不良呢?这一步的判定非常关键,因为若为晶振不振,就可以排除晶振与电路板不匹配造成电路板上电不良发生的假定。晶发电子以下介绍针对晶振单体判定的方法: 1.…

Python内置模块

目录 什么是模块 模块分类 通过模块创建者分类 系统内置模块 第三方模块 在线安装 离线安装 模块导入 math和random模块介绍 math模块 random模块 什么是模块 在我们编写程序时,需要导入包。例如随机数的产生,需要import random。import XXX&…

C++引入

引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会为了引用变量开辟内存空间,它和它引用的变量公用同一块内存空间。如李白被称为诗仙。李白和诗仙都是同一个人。 语法: 类型& 引用变量名(对象名)引用实体; 特性: 引用在…

一体化对账和结算平台的设计与实现

随着企业规模的扩大和业务的复杂化,对账和结算工作变得愈发繁琐和复杂。为了提高工作效率和降低错误率,许多企业开始寻求一体化对账和结算平台的解决方案。本文将探讨一体化对账和结算平台的设计原则和实施步骤,以及其在企业管理中的重要性。…

Canvas笔记04:绘制九大基本图形的方法,重头戏是贝塞尔曲线

hello,我是贝格前端工场,最近在学习canvas,分享一些canvas的一些知识点笔记,本期分享canvas绘制图形的知识,欢迎老铁们一同学习,欢迎关注,如有前端项目可以私信贝格。 Canvas是HTML5中的一个绘…

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

HTML静态网页成品作业(HTML+CSS)——舞蹈网页设计制作(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 &#x1…

CogCaliperTool卡尺工具

CogCaliperTool(卡尺工具) CogCaliperTool(卡尺工具)是一种用于测量直线特征的工具。该工具通常用于检测图像中的边缘、轮廓或其他直线特征,并提供精确的测量数据,如长度、角度和位置信息。 比如说我们需要测量下图工具的边缘对…

Typescript的联合类型和交叉类型

联合类型 在 TypeScript 中,可以使用联合类型来定义对象接口,从而表示一个对象可以具有多种不同结构的类型。联合类型是或的关系!!! interface Circle {kind: "circle";radius: number; }interface Square {kind: "square";sideLe…

Positional Encoding 位置编码

Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络,无法从序列中学习到位置信息,并且它是并行结构,不是按位置来处理序列的,所以为输入序列加入了位置编码,将每个词的位置加入到了词向量中…

C 嵌入式系统设计模式 20:队列模式

本书的原著为:《Design Patterns for Embedded Systems in C ——An Embedded Software Engineering Toolkit 》,讲解的是嵌入式系统设计模式,是一本不可多得的好书。 本系列描述我对书中内容的理解。本文章描述嵌入式并发和资源管理模式之六…

Docker容器化解决方案(进程管理操作)

kill 杀死一个或多个正在运行的容器 语法格式 docker kill [OPTIONS] CONTAINER [CONTAINER...] 重点: docker kill子命令可杀死一个或多个容器向容器内部的主进程发送SIGKILL 信号(默认),或使用 --signal选项指定的信号 说明 options作…

微信jsSDK前端签名错误,巨坑; 前后端分离的一大失误。

微信 JS 接口签名校验工具 1. 确保你后端生成的签名是正确,这个是第一步。否则后面都是白扯。 以用上面微信自带的验证签名工龄进行验证。 确保生成的签名和你的签名是一致的。 2. timestamp需要是字符串类型. 3. 切记,URL不要encode,如果…

Redis核心数据结构之SDS和链表(三)

SDS与C字符串的区别 二进制安全 C字符串中的字符必须符合某种编码(比如ASCII),并且除了字符串的末尾之外,字符串里面不能包含空字符,否则最先被程序读入的空字符将被误认为是字符串结尾,这些限制使得C字符串只能保存文本数据,而…

fastadmin自定义弹出框的回调问题

使用了 vue 更改了 fastadmin 项目的列表页面 但是,当点击 添加时, 弹出 fastadmin 的弹出框,添加也是fastadmin 自带的 上面的代码有点不如意的地方,就是 当我们新增完成之后, 在关闭弹出窗时,想让当前…

keycloak18.0.0==本地源码启动

github下载源码, 版本18.0.0 java和maven的版本如下 E:\keycloak-18.0.0>java -version java version "21.0.1" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 21.0.112-LTS-29) Java HotSpot(TM) 64-Bit Server VM (build 21.0.112-LTS-…