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

前言

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.mzph.cn/news/724925.shtml

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

相关文章

鸿蒙4.0-DevEco Studio界面工程

DevEco Studio界面工程 DevEco Studio 下载与第一个工程新建的第一个工程界面回到Project工程结构来看 DevEco Studio 下载与第一个工程 DevEco Studio 下载地址:点击跳转 https://developer.harmonyos.com/cn/develop/deveco-studio#download 学习课堂以及文档地址…

《金三银四求职攻略》:程序员面试季倒计时

程序员的金三银四求职宝典 大家好,我是小明,一位即将面临春季求职季的程序员。在这个黄金时段,如何在众多应聘者中脱颖而出,拿下理想的offer,成为了我思考的重点。今天,我将分享一些我个人的求职攻略&…

增强型YOLOv5应用于扩展PASCAL VOC数据集

目录 摘要关键词 1. 引言2. 性能研究2.1 YOLO2.2 PASCAL VOC 2007 数据集2.3 MS COCO 数据集 3 实验方法3.1 利用COCO数据集扩展PASCAL VOC 2007(以elephant大象为例)3.2 方法实现(以YOLOv5为例)3.2.1 YOLOv5介绍3.2.2 YOLOv5…

【详识C语言】动态内存管理

本章重点 为什么存在动态内存分配 动态内存函数的介绍 malloc free calloc realloc 常见的动态内存错误 几个经典的笔试题 柔性数组 为什么存在动态内存分配 我们已经掌握的内存开辟方式有: int val 20;//在栈空间上开辟四个字节char arr[10] {0};//在栈空间上开…

Three.js--》探寻Cannon.js构建震撼的3D物理交互体验(二)

我们用three.js可以绘制出各种酷炫的画面,但是当我们想要一个更加真实的物理效果的话,这个时候我们就需要一个物理的库,接下来我们就讲解一下今天要学习的canon,它可以给我们提供一个更加真实的物理效果,像物体的张力、…

2024护网面试题精选(一)

0x00.基础漏洞篇 00-TOP10漏洞 1.SQL注入 2.失效的身份认证和会话管理 3.跨站脚本攻击XSS 4.直接引用不安全的对象 5.安全配置错误 6.敏感信息泄露 7.缺少功能级的访问控制 8.跨站请求伪造CSRF 9.实验含有已知漏洞的组件 10.未验证的重定向和转发 01-SQL注入漏洞 …

【Java_JSON】如何从JSON数据中提取value值

如何从JSON数据中提取value值? 首先将JSON数据转成字符串 创建JSONObject 对象 通过kv键值对的特性 使用key值来获取value 值 并输出 结果:

c++: 缺省参数/默认参数的详解及其应用

c缺省参数/默认参数的详解及其应用 缺省参数是什么 #include<iostream> using namespace std;void func(int a 666) {cout << "a " << a << endl; } int main() {func(); //没有传参func(10); //传参return 0; }缺省参数就是在我们不进…

计算机体系结构:VLIW

原文来自知乎 计算机体系结构&#xff1a;VLIW 本文主要介绍计算机体系结构中的VLIW&#xff0c;以供读者能够理解该技术的定义、原理、应用。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;计算机杂记 &#x1f…

腾讯云服务器99元一年购买入口链接

腾讯云服务器99元一年购买入口链接如下&#xff0c;现在已经降价到61元一年&#xff0c;官方活动链接如下&#xff1a; 腾讯云99元服务器一年购买页面腾讯云活动汇聚了腾讯云最新的促销打折、优惠折扣等信息&#xff0c;你在这里可以找到云服务器、域名、数据库、小程序等等多种…

【uniapp】小程序自定义一个通用的返回按钮组件

左边箭头&#xff0c;右边文字可以自定义&#xff0c;但是不要太长&#xff0c;太长可以自己改 .back的width值&#xff0c;改宽一点。 用这个组件的时候首先要在pages.json里把导航栏变成自定义的&#xff1a; ,{"path" : "pages/test/test","style&…

Goose:Golang中的数据库迁移工具

Goose&#xff1a;Golang中的数据库迁移工具 在Golang开发中&#xff0c;数据库迁移是一个常见的任务&#xff0c;用于管理数据库模式的演化和版本控制。Goose是一个轻量级的、易于使用的数据库迁移工具&#xff0c;专为Golang开发者设计。本文将介绍Goose的基本概念、用法和优…

智能驾驶规划控制理论学习01-自动驾驶系统介绍、规划控制模块介绍

目录 一、自动驾驶系统概述 二、规划控制模块介绍 1、规划控制架构 2、规划控制目标 3、Cartesian和Frenet坐标系 4、Frenet坐标系概览 5、解耦式规划和联合式规划 一、自动驾驶系统概述 目前被国内外广为接受的自动驾驶级别划分标准是 SAE&#xff…

Nano 33 BLE Sense Rev2学习第二节——手机蓝牙接收数据

Nano 33 BLE Sense Rev2需要下载的程序 #include <ArduinoBLE.h> #include "Arduino_BMI270_BMM150.h"float x, y, z; int degreesX 0; int degreesY 0;BLEService ledService("19B10010-E8F2-537E-4F6C-D104768A1214"); // create service// cre…

XSS漏洞--概念、类型、实战--分析与详解[结合靶场pikachu]

目录 一、XSS概念简述 1、XSS简介&#xff1a; 2、XSS基本原理&#xff1a; 3、XSS攻击流程&#xff1a; 4、XSS漏洞危害&#xff1a; 二、XSS类型&#xff1a; 1、反射型XSS&#xff1a; 2、存储型XSS&#xff1a; 3、DOM型XSS&#xff1a; 三、靶场漏洞复现(pikach…

LVS四层负载均衡集群

简介 LVS&#xff08;Linux Virtual Server&#xff09;即Linux虚拟服务器&#xff0c;是由章文嵩博士主导的开源负载均衡项目&#xff0c;目前LVS已经被集成到Linux内核模块中。该项目在Linux内核中实现了基于IP的数据请求负载均衡调度方案&#xff0c;终端互联网用户从外部访…

diffusion model (扩散模型)原理

扩散模型分为正向过程和反向过程。 正向过程为一点点在图片上添加噪声的过程&#xff0c;反向过程为去噪声的过程。 图片的生成就是反向过程&#xff0c;给一张高斯噪声图片&#xff0c;逐步去噪生成图片。 扩散模型和VAE的区别&#xff0c; VAE是一步到位的&#xff08;通过…

一个基于差异同步数据库结构的工具 - Skeema

本文是 GO 三方库推荐的第 5 篇&#xff0c;继续介绍数据库 schema 同步工具&#xff0c;我前面已经写了两篇这个主题的文章。系列查看&#xff1a;Golang 三方库。 今天&#xff0c;推荐是的一个基于差异实现数据库 schema 迁移的工具库 - skeema&#xff0c;同样由 Go 实现。…

数字孪生10个技术栈:数据采集的八种方式

大家好&#xff0c;我是贝格前端工场&#xff0c;上期讲了数字孪生10个技术栈&#xff08;总括&#xff09;:概念扫盲和总体介绍&#xff0c;获得了大家的热捧&#xff0c;本期继续分享技术栈&#xff0c;大家如有数字孪生或者数据可视化的需求&#xff0c;可以联络我们。 一、…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…