阿里云账号:基于阿里云云原生微服务架构的 Spring Cloud 项目部署教程

cloud 2026-05-28 阅读 11
cloud

市面上很多讲微服务部署的教程,一上来就让你在服务器上肉身搭建 Nginx、Nacos、Sentinel、Zipkin……一套组合拳打完,服务器内存爆了不说,各种配置文件能把人折腾掉半条命。

在云原生时代,还这么玩就太低效了。阿里云已经把微服务底座(注册中心、配置中心、网关、限流降级)全部做成了云原生托管服务

今天这篇教程不扯复杂的架构理论,不讲废话。我们直接以一个标准的 Spring Cloud 微服务项目为例,带你用最接地气的实战方式,基于阿里云云原生架构(MSE + ACK/SAE),从零搞定微服务的部署与跑通

核心架构设计

在动手之前,先看一眼我们要实现的云原生微服务部署拓扑:

【客户端请求】

     │

     ▼

【阿里云云原生网关 (MSE)】 ──(自动发现服务)──> 【微服务注册中心 (MSE Nacos)】

     │                                                │

     ├───> 【微服务 A (轻量应用/SAE)】 <────────────────┤

     │                                                │

     └───> 【微服务 B (轻量应用/SAE)】 <────────────────┘

传统的做法是自己在 ECS 上装 Nacos 和 Gateway,而云原生做法是直接使用阿里云的 MSE(微服务引擎)SAE(Serverless 应用引擎)。这样你不需要维护服务器底层,还能实现秒级弹性伸缩。

第一步:微服务代码改造(适配云原生)

要把本地运行的 Spring Cloud 项目搬上云,首先要修改配置文件,让它对接阿里云的托管 Nacos。

1. 引入依赖

确保你的 pom.xml 中引入了标准的 Spring Cloud Alibaba 依赖:

XML


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2. 修改配置文件

在本地,我们通常把 Nacos 地址写死成 localhost:8848。但在云原生部署中,我们不要在代码里写死任何 IP 路径。直接使用环境变量来动态注入:

YAML


# bootstrap.yml 或 application.yml
spring:
  application:
    name: order-service # 你的服务名
  cloud:
    nacos:
      discovery:
        server-addr: ${NACOS_SERVER_ADDR:localhost:8848} # 优先读取环境变量
        namespace: ${NACOS_NAMESPACE:public}
      config:
        server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
        file-extension: yaml
💡 为什么要这样写? 通过 ${变量名:默认值} 的写法,本地开发时如果不传环境变量,依然走 localhost;而到了云端,云平台会自动帮我们注入真实的阿里云集群地址,实现代码“一套编译,到处运行”。

第二步:在阿里云开通并配置 MSE Nacos(1分钟)

现在我们去阿里云搞定微服务的“大脑”——注册中心与配置中心。

  1. 登录阿里云控制台,搜索并进入 “微服务引擎 MSE”。
  2. 点击 “实例管理” $\rightarrow$ “创建实例”,选择 “Nacos”。
  3. 版本选择:选最新的稳定版(如 Nacos 2.x)。集群规格根据业务量选,个人测试或小项目选开发测试型(单节点)即可,生产环境必须选专业型(3节点高可用)。
  4. 创建完成后,进入该实例详情页。你会看到两个核心网络地址:内网地址(类似 mse-xxxx-nacos-ctl.tbls.com:8848)公网地址(如果是公网调试需要开通,生产环境为了安全建议只用内网)
  5. 记录下这个内网地址,它就是我们下一步要塞给微服务的变量。

第三步:使用 SAE 部署微服务组件(4分钟)

微服务组件很多,如果用传统的 K8s(ACK)去部署,你需要写大量的 YAML 文件,还要懂 Pod、Deployment 等概念。

这里推荐使用更简单的 SAE(Serverless 应用引擎),它免去了你维护 K8s 集群的痛苦,直接上传 Jar 包或镜像就能跑。

1. 打包项目

在本地项目根目录下执行 Maven 命令,把微服务打包成标准的 Jar 包:

Bash


mvn clean package -DskipTests

拿到打包好的 order-service.jar

2. 在 SAE 中创建应用

  • 进入阿里云 “Serverless 应用引擎 SAE” 控制台。
  • 点击 “应用列表” $\rightarrow$ “创建应用”。
  • 应用部署方式:选择 “JAR包部署”(如果你熟悉 Docker,也可以选镜像部署)。
  • 运行时环境:选择对应的 JDK 版本(如 Java 8 或 Java 11/17)。
  • 上传你刚刚打包好的 order-service.jar。

3. 注入环境变量(核心步骤)

在部署页面的 “高级设置” 里,找到 “环境变量” 选项。还记得我们在第一步代码里留出的空位吗?在这里把它补上:

键(Key)值(Value)
NACOS_SERVER_ADDR填入第二步中复制的 MSE Nacos 内网地址
NACOS_NAMESPACE如果你在 Nacos 建了新命名空间就填 ID,没有就填 public

4. 启动应用

点击确认创建并部署。SAE 会自动在后台为你调度计算资源、拉起容器并运行 Jar 包。等待 1~2 分钟,看到状态变为“运行中”,说明服务已经成功在云端跑起来了。

你可以回过头登录 MSE Nacos 控制台,在“服务管理”列表中刷新一下,就能看到 order-service 已经成功注册上来了!

第四步:配置云原生网关实现外部访问(2分钟)

微服务在内网跑起来了,但外网用户怎么访问?我们需要一个统一的入口,即微服务网关。阿里云 MSE 提供了自带的“云原生网关”,完美替代了传统的 Spring Cloud Gateway。

  1. 进入 MSE 控制台 $\rightarrow$ 云原生网关 $\rightarrow$ 网关实例列表,点击创建。
  2. 关联你刚刚创建的 MSE Nacos 实例。
  3. 网关创建成功后,进入网关详情页,点击左侧的 “服务来源” $\rightarrow$ “添加服务来源”。来源类型选择 “MSE Nacos”,然后勾选你的 Nacos 实例。
  4. 点击左侧的 “路由配置” $\rightarrow$ “创建路由”:路由名称:如 order-route。匹配路径:例如输入 /order/。目标服务:在下拉菜单里直接选择你在 Nacos 里注册的 order-service。
  5. 点击保存并发布。

此时,访问云原生网关提供的公网 IP 加路径(如https://网关IP/order/create)

网关就会自动感知 Nacos 中的微服务节点,并把请求完美转发过去。

实战避坑与高级调优指南

  1. 白屏/无法注册?先查网络安全组! MSE Nacos、SAE 应用必须处于同一个 VPC(虚拟私有云)和同一个交换机下,它们之间才能通过内网互通。如果你发现 SAE 里的微服务疯狂报错“连接 Nacos 超时”,立刻去检查两个产品的 VPC 属性是否一致。
  2. 微服务优雅下线问题 微服务最怕发布新版本时导致正在访问的用户报错。阿里云 SAE 自带了优雅下线(无损下线)功能。原理:在微服务销毁前,SAE 会主动向 MSE Nacos 发送注销信号,让网关不再把新流量转过来,等旧请求处理完了再关闭容器。怎么用:在 SAE 应用的高级设置里,开启“微服务无损下线”开关,完全不需要修改代码。
  3. 内存溢出(OOM)报错 很多新手把 JVM 内存和系统内存搞混。如果在 SAE 里购买了 1核 2G 规格的实例,不要在 JVM 参数里写 -Xmx2g,因为系统本身运行也要吃内存。黄金法则:JVM 的最大堆内存(-Xmx)应该设置为实例规格的 60% ~ 70% 左右。例如 2G 规格的实例,JVM 参数建议配置为 -Xmx1300m。

恭喜你!到这里,一套高可用、可自动弹性伸缩的云原生微服务体系就已经完全跑通了。告别了繁琐的中间件运维,你可以把全部精力都投入到业务代码的编写中了。


cloud
← 返回新闻中心