阿里雲賬號:基於阿里云云原生微服務架構的 Spring 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}
設定:
Server-addr: ${NACOS_SERVER_ADDR:localhost:8848}
File-extension: yaml
💡為什麼要這樣寫? 通過 ${變量名:默認值} 的寫法,本地開發時如果不傳環境變量,依然走 localhost;而到了雲端,雲平台會自動幫我們注入真實的阿里雲集群地址,實現代碼「一套編譯,到處運行」。
第二步:在阿里雲開通並配置 MSE Nacos(1分鐘)
現在我們去阿里雲搞定微服務的「大腦」--注冊中心與配置中心。
登錄阿里雲控制台,搜索並進入 「微服務引擎 MSE」。
點擊 「實例管理」 $\rightarrow$ 「創建實例」,選擇 「Nacos」。
版本選擇:選最新的穩定版(如 Nacos 2.x)。 集群規格根據業務量選,個人測試或小項目選開發測試型(單節點)即可,生產環境必須選專業型(3節點高可用)。
創建完成後,進入該實例詳情頁。 你會看到兩個核心網絡地址:內網地址(類似 mse-xxxx-nacos-ctl.tbls.com:8848)公網地址(如果是公網調試需要開通,生產環境為了安全建議只用內網)
記錄下這個內網地址,它就是我們下一步要塞給微服務的變量。
第三步:使用 SAE 部署微服務組件(4分鐘)
微服務組件很多,如果用傳統的 K8s(ACK)去部署,你需要寫大量的 YAML 文件,還要懂 Pod、deployment 等概念。
這裡推薦使用更簡單的
SAE(無伺服器應用程式引擎)
,它免去了你維護 K8s 集群的痛苦,直接上傳 Jar 包或鏡像就能跑。
1. 打包項目
在本地項目根目錄下執行 Maven 命令,把微服務打包成標準的 Jar 包:
貝殼腳本
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。
進入 MSE 控制台 $\rightarrow$ 雲原生網關 $\rightarrow$ 網關實例列表,點擊創建。
關聯你剛剛創建的 MSE Nacos 實例。
網關創建成功後,進入網關詳情頁,點擊左側的 「服務來源」 $\rightarrow$ 「添加服務來源」。 來源類型選擇 「MSE Nacos」,然後勾選你的 Nacos 實例。
點擊左側的 「路由配置」 $\rightarrow$ 「創建路由」:路由名稱:如 order-route。 匹配路徑:例如輸入 /order/。 目標服務:在下拉菜單裡直接選擇你在 Nacos 里注冊的 order-service。
點擊保存並發布。
此時,訪問雲原生網關提供的公網 IP 加路徑(如https://網關IP/order/create)
網關就會自動感知 Nacos 中的微服務節點,並把請求完美轉發過去。
實戰避坑與高級調優指南
白屏/無法註冊? 先查網絡安全組! MSE Nacos、SAE 應用必須處於同一個 VPC(虛擬私有雲)和同一個交換機下,它們之間才能通過內網互通。 如果你發現 SAE 里的微服務瘋狂報錯「連接 Nacos 超時」,立刻去檢查兩個產品的 VPC 屬性是否一致。
微服務優雅下線問題 微服務最怕發布新版本時導致正在訪問的用戶報錯。 阿里雲 SAE 自帶了優雅下線(無損下線)功能。 原
理:在微服務銷毀前,SAE 會主動向 MSE Nacos 發送註銷信號,讓網關不再把新流量轉過來,等舊請求處理完了再關閉容器。 怎麼用:在 SAE 應用的高級設置里,開啟「微服務無損下線」開關,完全不需要修改代碼。
內存溢出(OOM)報錯 很多新手把 JVM 內存和系統內存搞混。 如果在 SAE 裡購買了 1核 2G 規格的實例,不要在 JVM 參數里寫 -Xmx2g,因為系統本身運行也要吃內存。 黃金法則:JVM 的最大堆內存(-Xmx)應該設置為實例規格的 60% ~ 70% 左右。 例如 2G 規格的實例,JVM 參數建議配置為 -Xmx1300m。
恭喜你! 到這裡,一套高可用、可自動彈性伸縮的雲原生微服務體系就已經完全跑通了。 告別了繁瑣的中間件運維,你可以把全部精力都投入到業務代碼的編寫中了。

