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

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.dtcms.com/a/366800.html

相关文章:

  • C语言结构体:轻松管理球员数据
  • SpringMVC的异常处理和拦截器
  • 【C语言】深入理解指针(4)
  • nextcyber——常见应用攻击
  • 一个老工程师的“新生”:良策金宝AI,让我重新爱上设计
  • [光学原理与应用-389]:设计 - 深紫外皮秒脉冲激光器 - 元件 - 1064nm种子光准直透镜
  • 2025年经管领域专业资格认证发展路径分析
  • 数据结构 之 【模拟实现哈希表】
  • Python 值传递 (Pass by Value) 和引用传递 (Pass by Reference)
  • 电池预测 | 第36讲 Matlab基于CNN-BiGRU-Attention的锂电池剩余寿命预测
  • JVM 运行时数据区域
  • 开源本地LLM推理引擎(Cortex AI)
  • 【PZ-AU15P】璞致fpga开发板 Aritx UltraScalePlus PZ-AU15P 核心板与开发板用户手册
  • ZooKeeper核心ZAB选举核心逻辑(大白话版)
  • 性能堪比claude sonnet4,免费无限使用!claude code+魔搭GLM4.5在ubuntu上安装完整流程
  • 三高项目-缓存设计
  • SQL常见索引失效导致慢查询情况
  • Java 双亲委派机制解析和破坏双亲委派的方式
  • T检验(pearman)
  • 【全网最全】《2025国赛/高教杯》C题 思路+代码python和matlab+文献 一到四问 退火算法+遗传算法 NIPT的时点选择与胎儿的异常判定
  • 电商金融贷款服务市场趋势与竞争分析
  • [frontend]WebGL是啥?
  • 鸿蒙NEXT交互机制解析:从输入设备到手势响应的全面指南
  • Node.js 18+安装及Claude国内镜像使用、idea中claude插件下载指南
  • 【AI论文】UI-TARS-2技术报告:借助多轮强化学习推进图形用户界面(GUI)智能体发展
  • Django事务
  • 《Docker 零基础入门到实战:容器化部署如此简单,运维效率直接拉满》
  • 【有鹿机器人自述】我在社区的365天:扫地、卖萌、治愈人心
  • Android集成OpenCV4实例
  • Java 与 Docker 的最佳实践