Spring Cloud Alibaba快速入门


在这里插入图片描述

前言

随着微服务技术的发展,微服务(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项目结构中可以看到子项目也依赖了
在这里插入图片描述
至此完成基本框架搭建


相关文章:
Spring Cloud Alibaba快速入门
Spring Cloud Alibaba快速入门-Nacos注册中心(上)
Spring Cloud Alibaba快速入门-Nacos注册中心(下)
Spring Cloud Alibaba快速入门-Nacos配置中心(上)
Spring Cloud Alibaba快速入门-Nacos配置中心(下)
Spring Cloud Alibaba快速入门-OpenFeign
Spring Cloud Alibaba快速入门-OpenFeign进阶用法
Spring Cloud Alibaba快速入门-Sentinel
Spring Cloud Alibaba快速入门-Sentinel流量控制(FlowRule)
Spring Cloud Alibaba快速入门-Sentinel熔断规则

Spring Cloud Netflix快速入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值