SpringCloud生态体系介绍

Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、智能路由、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。

SpringCloud3要求JDK最低版本为OpenJDK 17。

必要说明

SpringCloud2(2021.x及2021.x之前的版本)和SpringCloud3(2022.
x及2022.x之后的版本)并不兼容,这意味着如果您的项目最开始是基于V2版本构建的,需要升级到V3版本,除了更改SpringCloud版本外,还需更改很多其它集成依赖jar包的版本,同时还需要考虑服务器JDK版本,So,如果不是新项目不建议升级,。

本专题环境

系统

  • Mac OS 12.7.4
  • Intellij Idea 2024.1.1
  • OpenJDK 17.0.11
  • Docker Desktop 4.29.0

Spring

  • Springboot starter 3.2.4
  • SpringCloud 2023.0.1
  • Alibaba SpringCloud 2023.0.1.1

中间件

  • Apache Maven 3.9.6
  • Mysql 8.0.52
  • Nacos 2.3.2
  • Consul 1.18.0
  • Sentinel dashboard 1.8.7

帮助文档

Spring、Springboot、Springboot starter、Springcloud、jdk存在版本兼容关系,同样的Alibaba Springcloud也与上述几个框架存在版本对应关系。详细可查看下列官网说明:

  • https://spring.io/projects/spring-cloud
  • https://sca.aliyun.com/docs/2023/user-guide/ai/quick-start/

生态体系

整体架构

在这里插入图片描述

  1. Spring体系中存在下面这样的演进依赖关系:Spring -> Spring Boot > Spring Cloud ;
  2. Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot;
  3. Spring Boot专注于快速、方便集成的单个个体微服务,Spring Cloud是关注全局的服务治理框架;

核心项目

  • Spring Cloud Config :集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。

  • springcloud netflix:Netflix OSS 开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。主要用于微服务架构中的服务治理

    • Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
    • Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
    • Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
    • Feign:基于Ribbon和Hystrix的声明式服务调用组件;
    • Zuul:API网关组件,对请求提供路由及过滤功能。
  • Spring Cloud Bus:用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置。

  • Spring Cloud Consul :基于Hashicorp Consul 的服务发现和配置管理。

  • Spring Cloud Security :安全工具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进行支持

  • Spring Cloud Sleuth :Spring Cloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。

  • Spring Cloud Stream :一个轻量级的事件驱动型微服务框架,用于快速构建可连接到外部系统的应用程序。使用 Apache Kafka 或 RabbitMQ 在 Spring Boot 应用程序之间发送和接收消息的简单声明性模型。

  • Spring Cloud Task :一个短期的微服务框架,用于快速构建执行有限量数据处理的应用程序。用于向 Spring Boot 应用程序添加功能性和非功能性功能的简单声明。

  • Spring Cloud Zookeeper :使用 Apache Zookeeper 进行服务发现和配置管理。

  • Spring Cloud Gateway :Spring Cloud Gateway 是一款基于 Spring Framework 和 Spring Boot 的智能可编程路由器。API网关组件,对请求提供路由及过滤功能。

  • Spring Cloud OpenFeign :基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用;

了解微服务

简单地说,微服务是系统架构上的一种设计风格,它的主旨是将一个原本独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间通过基于HTTP的RESTful API进行通信协作。被拆分成的每一个小型服务都围绕着系统中的某一项或一些耦合度较高的业务功能进行构建,并且每个服务都维护着自身的数据存储、业务开发、自动化测试案例以及独立部署机制。由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语言来编写。

同时也带来了三个问题

  • 运维新挑战,应用数量增多,运维过程需要大量的自动化,同时也需要开发能力来开发编排类的服务
  • 接口一致性,接口和调用变了,但原业务逻辑没变
  • 分布式的复杂性,由单进程变成了多进程,需要通信,而通信就会引出延迟、异步等问题

一般要实施时需要以下几种方式的配合

  • 服务组件化
  • 按业务组织团队,而不是职能
  • 做产品的态度,而不是做项目的态度
  • 更粗粒度的通信方式,比如RPC或MQ
  • 去中心化治理,每个应用按需选择,而不是一刀切,这样有可能会浪费资源
  • 去中心化数据管理,分区,分表等,使数据管理更细化
  • 基础设施自动化,主要是测试和部署
  • 容错和故障寻源的能力,要求强大的恢复和监控能力
  • 演进式设计,但不允许带故障发布

了解SpringCloud项目

基于以上理解,我们可以从微服务角度重新审视下SpringCloud相关的项目分类:

类目作用可选组件
注册中心注册中心主要用于服务治理,提供了服务的注册与发现功能,微服务架构中的服务可以注册到注册中心,也可以通过注册中心获取到其他服务的信息。Eureka、Consul、Nacos(推荐)
配置中心配置中心主要用于提供统一的外部配置管理,微服务架构中的服务可以从配置中心获取配置信息,同时支持动态刷新配置。SpringCloud Config、Consul、Nacos (推荐)
服务网关API网关主要用于为微服务架构中的服务提供统一的外部访问入口,实现请求的路由与过滤功能。Zuul、Gateway(推荐)
服务负载均衡微服务架构中有的服务会部署多个,Ribbon提供了服务间调用的客户端负载均衡功能,OpenFeign基于Ribbon提供了声明式的服务间调用,可简化开发流程,同样的他们需要注册中心的配合。 在功能上和Ribbon差不太多,只是不需要RestTemplate声明了。Ribbon、OpenFeign(推荐)
链路跟踪Spring Cloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。SpringCloud Sleuth
熔断与限流熔断与限流是对微服务架构中服务的一种保护措施,当系统中有故障发生时,可以防止故障的蔓延。Hystrix、Sentinel(推荐)
安全保护Spring Cloud Security 为构建安全的SpringBoot应用提供了一系列解决方案,结合Oauth2可以实现单点登录、服务安全保护等功能,可以很好地保护微服务架构中的服务。Spring Cloud Security (推荐)
监控中心微服务架构中,当一次业务操作需要操作多个数据源或需要进行远程调用时就会产生分布式事务问题,Seata可以很好地解决该问题。Spring Boot Admin
分布式事务微服务架构中,当一次业务操作需要操作多个数据源或需要进行远程调用时就会产生分布式事务问题,Seata可以很好地解决该问题。Seata (推荐)

读懂springCloud版本

Spring Cloud是一个由许多子项目组成的综合项目,各子项目有不同的发布节奏。 为了管理Spring Cloud与各子项目的版本依赖关系,发布了一个清单,其中包括了某个Spring Cloud版本对应的子项目版本。

Spring Cloud版本最开始采用了伦敦地铁站的名字而非版本号来命名,例如Angel是第一个版本,Brixton是第二个版本。 当Spring Cloud的发布内容积累到临界点或者一个重大BUG被解决后,会发布一个"service releases"版本,简称SRX版本。

从Hoxton版本后,Spring Cloud的版本号从地铁名称改成了时间的命名方式,目前Spring Cloud的最新版本是2023.0.1。
在这里插入图片描述

开发相关

JDK版本的选择

Spring Boot 3.0 本次带来最大的改动就是 GraalVM 原生镜像的支持,也是官方文档中强调的他们花费时间精力比较多的部分。 GraalVM 技术作为 JRE 的替代方案,其通过预先编译(Ahead Of Time,AOT)等技术对 Java 应用进行预先编译,让 Spring 在运行应用时掌握更多应用有关的信息,让整个应用启动速度更快。

另外,通过编译工具在编译过程中通过消除一些不必要的内容可以让最终的应用更小,占用内存更低。对于一些对启动速度要求非常高的场景,比如 Serverless、FaaS 场景非常友好! 本次 Spring Boot 3.0 直接将其正式从 Spring Native 迁入到 Spring Boot 中来,也预示着该项技术开始逐渐走向成熟,Spring 生态开始迈入 GraalVM 阶段! 跟 JVM 编译部署方式相比,GraalVM 具有以下特点:

  • 在应用构建阶段,从主入口点就开始进行应用程序的静态分析。
  • 创建本机镜像时,通过代码分析,会将无法访问的代码删除,并且不会成为可执行文件的一部分,从而可在一定程度上压缩程序包大小。
  • GraalVM 无法直接感知代码的动态元素,因此对于存在反射、序列化和动态代理的应用程序,需要提前提供相关 hint 配置文件,帮助解析应用程序,相关操作过程可参考官方文档。
  • 应用程序类路径在构建时是固定的,不能更改。
  • 没有惰性类加载,可执行文件中的所有内容都将在启动时加载到内存中。
  • 支持的 Java 应用程序在某些方面存在一些限制,因此目前并不能保证之前的 Java 应用都可直接使用 GraalVM 技术进行应用构建,有一定概率会存在不兼容的异常情况。

常用开发命令

没太好分类,主要是开发调度过程中有可能会使用的命令。

  • HomeBrew
    • 安装的软件位置:/usr/local/Cellar/
    • 安装的软件配置文件位置:/usr/local/etc/
brew search softName
brew services start/stop/list
  • Linux
lsof -i :15001
ps -ef | grep java
kill -9 pid 

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

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

相关文章

linux上安装Jmeter环境

以前都是在Windows本机上使用界面版Jmeter,今天试一下安装到linux上在linux中使用,Jmeter的使用需要先安装jdk环境然后再配置jmeter。 1.配置环境 linux环境:Centos 8.2 64位 JDK版本:jdk-8u221-linux-x64.tar.gz (…

数据中心法

数据中心法是实现词法分析器的结构化方法。通过设计主表和子表分开存储状态转移信息,实现词法分析器的控制逻辑和数据结构分离。 主要解决了状态爆炸、难以维护和复杂性的问题。 状态爆炸是指当状态和转移较多时,单一使用一个表来存储所有的信息的话会导…

通俗的理解网关的概念的用途(二):不同区域的网络之间的访问方式

两个不同区域的网络互相访问,一般可以通过一种叫做“三层”的网络设备来进行通信: 一、网关方式: 本机A(192.168.1.1)访问目标 T10(10.10.10.10)时,由于根据本地网络的设置,操作系统通过计算得…

UE4BeginPlay执行流程

文章目录 UE4 BeginPlay执行流程源代码UGameInstance::StartPlayInEditorGameInstance:UWorld::BeginPlayAGameModeBase::StartPlayAGameStateBase::HandleBeginPlayAWorldSettings::NotifyBeginPlayAActor::DispatchBeginPlay UE4 BeginPlay执行流程 Created with Raphal 2.3.…

算法第63天 单调栈3

84 柱状图中最大的矩形 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最大面积。 def largestRectangleArea(heights):res0for i in range(len(heights)):left…

【Linux】如何查看Linux命令的使用方法

man cd | col -b > cdhelp.txt #查询帮助文档 man 命令用于查看 Linux 系统的在线帮助文档(man page)。man 是 “manual” 的缩写,通过它,你可以访问关于各种命令、函数、配置文件等的详细文档。 cd 是一个常用的命令&#xf…

YOLO数据集制作(一)|Labelme标注的矩形框json文件转txt

以下教程用于将使用Labelme软件标注生成的json格式文件转成YOLO使用的txt格式,适用场景:矩形框 使用方法:将json文件夹路径填到json_dir后, 将保存转化后txt的路径填入txt_dir后,运行即可转化。 运行完成后会生成label…

io流、字节流字符流区别

想象你正在做一道菜,需要准备材料和烹饪步骤。IO流就像是你在做菜时使用的工具,而字节流和字符流则是不同类型的工具,适合不同的操作。 首先,字节流就像是你使用的普通厨具,比如刀、砧板等。它们可以处理任何类型的食…

Linux-解压缩文件命令(gzip、zip、unzip、tar、jar)

目录 1、压缩解压命令 1.1 gzip、gzcat、gunzip 1.2 bzip2、bzcat、bunzip2 1.3 zip和unzip 2、tar命令 3、jar命令 1、压缩解压命令 1.1 gzip、gzcat、gunzip gzip 命令 压缩文件后缀.gz gzcat 用来显示压缩的文本文件内容 gunzip 用来解压文件 把/home目录下的t…

使用向量数据库 Zilliz Cloud 时常用到的术语和概念

AUTOINDEX 为满足用户不同需求,Zilliz Cloud 提供 2 种类型的集群 CU:性能型和容量型。但是,为不同类型 CU 集群中的 Collection 创建索引时,通常需要根据所选择的 CU 类型调整索引参数。为了方便创建索引,免去调节参数的麻烦,Zilliz Cloud 使用 AUTOINDEX 的索引类型。…

OpenAI 正在开发一种可以防止版权诉讼的工具

OpenAI 正在开发一种名为 Media Manager 的工具,该工具将使内容创建者和所有者能够确定他们是否愿意将自己的内容用于 ML 研究和 AI 模型训练。 Media Manager 将做什么? 明年推出的 Media Manager 将使内容创作者和所有者能够更好地控制他们的工作是否…

Oracle体系结构初探:闪回技术

在Oracle体系结构初探这个专栏中,已经写过了REDO、UNDO等内容。觉得可以开始写下有关备份恢复的内容。闪回技术 — Oracle数据库备份恢复机制的一种。它可以在一定条件下,高效快速的恢复因为逻辑错误(误删误更新等)导致的数据丢失…

岩点×数说故事×小红书 | 发布《中国攀岩行业分析报告》

从下班健身到下班攀岩,从“鸡娃”到岩馆“溜娃”,被奥运“正名”的攀岩运动,在国内熬过了萌芽阶段,悄然开出了花。2023年,各类重磅攀岩赛事重启、线下岩馆疯狂扩张,小众攀岩正式进入大众视野,风…

249 基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法

基于matlab的MED、OMEDA、MOMEDA、MCKD信号处理方法。最小熵反褶积(MED),最优最小熵反卷积调整卷积 (OMEDA),多点最优最小熵解卷积调整(Multipoint Optimal Minimum Entropy Deconvolution Adjusted,MOMEDA),最大相关峭…

Vue2 组件通信方式

props/emit props 作用&#xff1a;父组件通过 props 向子组件传递数据parent.vue <template><div><Son :msg"msg" :pfn"pFn"></Son></div> </template><script> import Son from ./son export default {name: …

winform图书管理系统

winform图书管理系统说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 图书管理员 读者管理 图书管理 添加 修改 删除 查看 入库 书册列表 书册管理用户管理退出 借书 还书 系统管理员 修改图书管理权限 项目获取&#xff1a;…

LeetCode 209 长度最小的子数组(滑动窗口and暴力)

、 法一&#xff1a;滑动窗口 //使用滑动窗口来解决问题 //滑动窗口的核心点有&#xff1a; /*1.窗口内是什么&#xff1f;2.如何移动窗口的起始位置&#xff1f;3.如何移动窗口的结束位置&#xff1f;4.两个指针&#xff0c;怎么判断哪个指针是终止指针&#xff0c;哪个指针…

代码随想录算法训练营第六十天| LeetCode647. 回文子串 、516.最长回文子序列

一、LeetCode647. 回文子串 题目链接/文章讲解/视频讲解&#xff1a;https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.html 状态&#xff1a;已解决 1.思路 这道题我只想出来了暴力解法&#xff0c;动规解法并没有想出来。根据视频讲解才把它想出来。…

针对macOS上的maven安装配置

这篇博客将向读者介绍如何安装和配置Maven。Maven是一个强大的项目管理工具&#xff0c;广泛用于Java项目的构建、依赖管理和项目报告生成。它可以极大地简化项目的构建过程&#xff0c;并帮助开发人员管理项目的各种依赖项。 什么是Maven&#xff1f; Maven是一个基于项目对…

C++——命名空间

c ——命名空间 前言一.命名空间命名空间的进一步拓展 二.io流特性 前言 ** 好久不见&#xff0c;甚是想念~今天我们讲解的是关于c命名空间的一些知识点&#xff0c;这只是开胃小菜哦&#xff0c;期待我们后面更深入知识的灵魂碰撞吧 ** 一.命名空间 怎么形容呢~命名空间出现…