当前位置: 首页 > backend >正文

Spring Cloud Alibaba快速入门01

文章目录

  • 前言
  • Spring Cloud和Spring Cloud Alibaba的关系
  • 架构演进
    • 单体架构
    • 集群架构
    • 分布式架构
  • 环境准备
    • 创建项目
      • 创建父项目cloud-demo
      • 创建子项目services


在这里插入图片描述

前言

随着微服务技术的发展,微服务(MicroServices) 的概念早已深⼊⼈⼼,也越来越多的公司开始使⽤微服务架构来开发业务应⽤。
如果采⽤得当,微服务架构可以带来⾮常⼤的优势。微服务架构的最⼤好处是它可以提升开发效率和系统整体的稳定性:

  • 开发和部署相对简单:单个微服务的功能可以更快地更改,因为可以独⽴部署,影响范围更⼩,启动和调试单个微服务的时间成本相⽐于单体应⽤也⼤⼤减少。
  • 横向扩展简单:根据业务的⾼峰低⾕周期快速的横向扩展⾮常简单,因为单个微服务通常很⼩,可以随着系统整体负载的变化更快地启动和停⽌。
  • 架构升级灵活:单个微服务的内部架构可以迅速升级,因为微服务之间松散耦合的,只⾯向定义好的通讯接⼝进⾏编程。这使开发团队能够基于⾃身的技术背景和偏好灵活选择,⽽不会直接影响其他应⽤程序、服务或团队。
  • 更好的容错性:微服务之间可以实现更好的故障隔离,单个服务内的内存泄露等故障不容易影响其他服务,相⽐单体应⽤⼀个组件故障会拖垮整个系统。

但是微服务也并非没有缺点。如果微服务治理得不恰当,反⽽有可能适得其反,不仅不能享受到微服务架构带来的好处,反⽽会因为微服务带来的系统复杂性,造成开发、运维部署的复杂度增加,进⽽影响开发迭代的速度,甚⾄影响系统的整体稳定性。

Spring Cloud和Spring Cloud Alibaba的关系

在这里插入图片描述

官网:https://sca.aliyun.com/docs/2023/overview/what-is-sca/

架构演进

在这里插入图片描述

单体架构

定义:将所有功能模块(如用户管理、订单管理、支付管理等)打包成一个单一的、完整的应用程序单元(通常是一个巨大的 WAR 或 JAR 包),使用同一个数据库。
优点:

  • 开发简单:IDE 容易调试,代码结构直观。
  • 部署简单:只需要维护一个应用程序,复制一个包到服务器即可运行。
  • 测试简单:端到端测试容易,本地即可启动整个应用。
  • 易于横向扩展:初期可以通过集群来提升性能。

缺点:

  • 代码臃肿,维护困难:随着业务发展,代码库变得巨大,牵一发而动全身。
  • 技术栈僵化:必须使用统一的技术栈,难以引入新的语言或框架。
  • 扩展性差:无法对某个特定功能做独立扩展。比如“双十一”时订单模块是瓶颈,但你不得不扩展整个应用,浪费资源。
  • 可靠性差:任何一个模块的 Bug(如内存泄漏)都可能导致整个应用崩溃。
  • 阻碍持续交付:任何一个微小的修改都需要全量编译、测试和部署整个应用,发布周期长、风险高。

在这里插入图片描述

集群架构

定义:这并非一种新的应用架构,而是单体架构的部署模式。为了解决单点故障和性能瓶颈,将同一个单体应用部署到多台服务器上,形成一个集群,并通过负载均衡器(如 Nginx)将流量分发到各个实例。
优点:

  • 解决了高可用性问题:一台机器宕机,其他机器可以继续服务。
  • 提升了吞吐量:通过水平扩展,初步解决了并发用户数增长的问题。

缺点:

  • 并未解决单体架构的任何根本性缺陷(代码臃肿、技术栈僵化等)。
  • 引入了新的复杂性:需要管理负载均衡器、Session 共享、数据库主从同步等。
  • 数据库成为新的单一瓶颈:所有应用实例都连接到一个中心数据库,数据库的读写压力巨大。
    在这里插入图片描述

分布式架构

定义:将单体应用按业务边界拆分为一系列小的、自治的、松散耦合的服务。每个服务都是一个独立的应用,拥有自己的进程、数据库(或数据结构),并围绕特定的业务能力进行构建。服务间通过轻量级的通信机制(如 HTTP/REST, gRPC)进行协作。
优点:

  • 技术异构性:每个服务可以选择最合适的技术栈(例如,AI 服务用 Python,大数据分析用 Spark)。
  • 弹性扩展:可以针对特定服务进行精准扩展,资源利用更高效。
  • 故障隔离:单个服务故障不会导致整个系统瘫痪。
  • 独立开发、部署和迭代:小团队负责特定的服务,提升开发效率和交付速度(符合 DevOps 理念)。
  • 代码复杂度降低:每个服务代码库更小,更易于理解和维护。

缺点:

  • 分布式系统复杂性:开发者需要处理网络延迟、分布式事务、 eventual consistency (最终一致性)。
  • 运维复杂度急剧上升:需要管理大量的服务、监控、日志聚合等。容器化(Docker)和编排(Kubernetes)是管理微服务的的事实标准。
  • 测试和调试困难:需要模拟服务依赖,问题追踪跨越多个服务。
  • 数据一致性挑战:放弃了传统的强一致性 ACID 事务,转而使用 BASE 理论,通过 Saga 模式、TCC 等方案解决分布式事务问题。
  • 网络通信开销:服务间调用从本地方法调用变成了网络通信,增加了延迟和失败的可能性。
    在这里插入图片描述

环境准备

文章中框架版本选择
JDK17
SpringBoot:3.3.4
SpringCloud:2023.0.3
SpringCloudAlibaba:2023.0.3.2

创建项目

创建父项目cloud-demo

在这里插入图片描述
删掉其他创建maven项目时多余的文件
在这里插入图片描述
在pom.xml中加上标签:

<packaging>pom</packaging>

完整的pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.4</version><relativePath/> <!-- lookup parent from repository --></parent><packaging>pom</packaging><groupId>com.qf</groupId><artifactId>cloud-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>cloud-demo</name><description>cloud-demo</description><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-cloud.version>2023.0.3</spring-cloud.version><spring-cloud-alibaba.version>2023.0.3.2</spring-cloud-alibaba.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

创建子项目services

在这里插入图片描述
在这里插入图片描述
在子项目中pom.xml中加上标签:

<packaging>pom</packaging>

之后再分别创建services下的子项目services-order、services-product等
创建配置相同
在这里插入图片描述
创建好之后在maven项目结构中可以看到
在这里插入图片描述
如果没有分组显示,可以点击以下按钮
在这里插入图片描述

在services的pom.xml中导入nacos的服务发现

<dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2021.0.4.0</version></dependency>
</dependencies>

在maven项目结构中可以看到子项目也依赖了
在这里插入图片描述
至此完成基本框架搭建


http://www.xdnf.cn/news/19989.html

相关文章:

  • 去中心化投票系统开发教程
  • Java 双亲委派机制解析和破坏双亲委派的方式
  • sealos部署k8s
  • 华为校招实习留学生机试全攻略:真题目录+算法分类+在线OJ+备考策略
  • 如何将两个网段互相打通
  • Java场景题面试合集
  • 「数据获取」中国科技统计年鉴(1991-2024)Excel
  • 江协科技STM32学习笔记补充之004
  • ETL VS ELT企业应该怎么选择数据集成方式
  • 前缀和和差分思路理解以及典题题解
  • Java面试宝典:Redis的设计、实现
  • Flash Attention vs Paged Attention:大语言模型注意力计算的内存管理革命
  • 【国内电子数据取证厂商龙信科技】IOS 逆向脱壳
  • Milvus快速入门以及用 Java 操作 Milvus
  • PAT 1093 Count PAT‘s
  • [技术革命]Harmonizer:仅20MB模型如何实现8K图像_视频的完美和谐化?
  • 三高项目-缓存设计
  • k8s证书理论知识之/etc/kubernetes/pki/ 和/var/lib/kubelet/pki/的区别
  • 将 PDF 转换为 TIFF 图片:简单有效的 Java 教程
  • 23种设计模式——抽象工厂模式(Abstract Factory Pattern)详解
  • 实战复盘:pnpm Monorepo 中的 Nuxt 依赖地狱——Unhead 升级引发的连锁血案
  • Node.js 18+安装及Claude国内镜像使用、idea中claude插件下载指南
  • MMD动画(二)动作制作
  • Spring线程池ThreadPoolTaskExecutor‌详解
  • 大语言模型的“思考”逻辑:从Token生成到上下文理解的内部流程
  • 我的创作纪念日——《惊变365天》
  • 裸签、Attach、Detach及其验签方式
  • Docker学习笔记(二):镜像与容器管理
  • 基于STM32的智能家居环境监控系统设计
  • 如何看懂GPU架构?万云智算一分钟带你了解GPU参数指标