Spring Boot 單體應用一鍵升級成 Spring Cloud Alibaba

背景

隨着 Apache Dubbo、Nacos 以及 Spring Cloud 等服務框架的流行,越來越多的企業開始採用微服務架構來構建其應用程序。微服務架構使企業能夠將其應用程序拆分成多個小型服務,這些服務可以獨立部署和擴展。這種架構模式也使企業更容易實現敏捷開發和持續交付,從而提高了其業務效率和響應能力。

微服務四大件:註冊中心、服務提供者、服務消費者、服務治理

如今,隨着服務提供者、服務消費者、服務註冊中心以及服務治理等微服務幾大件的出現和成熟,使得我們使用微服務開發,不僅可以做到快速開發,更能夠追求微服務的高效和穩定。

單體 or 微服務?

從上圖我們可以看到,隨着業務規模的增大,選擇單體架構與微服務架構的選擇趨勢,他們之間存在一個交點。在交點之後,選擇微服務架構,業務規模越大越可以享受到微服務架構帶來的效率的提升。我們可以觀察到,這個交點在持續地向左移動。數字化進程的快速發展普遍讓企業的 IT 系統更復雜,開源以及雲計算推進的技術標準化,正在大幅度地降低微服務架構的技術門檻,在雲上小公司也可以很好地玩轉微服務。隨着這個趨勢的到來,還在使用單體架構的企業也逐漸考慮向微服務轉型。我們發現在雲上大部分 Java 應用仍然是基於 SpringBoot 的,Spring Boot 應用由於其架構實現的簡單性,客戶端只需通過 http 和域名就能實現服務調用。因此,許多中小型公司仍然採用該方式進行應用開發。從技術角度上看,我們如何升級 SpringBoot 應用至微服務架構,享受到微服務治理帶來的技術紅利,我們需要增加 SpringCloud 的 maven 依賴?需要業務進行代碼改造?本文可以回答你,不需要一行代碼改動。

本方案可以通過 MSE 無侵入實現 Java 應用的註冊、發現與治理能力。

  1. 當前 MSE 提供的註冊中心產品能力主要集中在非持久化服務發現,即服務的狀態維護在 client,需要業務方依賴 SDK 主動註冊服務,並維持心跳;本方案提供了一種的持久化服務發現能力。
  2. 解決跨平臺服務發現問題,如跨 K8s 服務發現、非 K8s 服務和 K8s 服務互相發現等。
  3. 無侵入實現基於 Spring Boot 應用的服務治理能力,如全鏈路灰度、限流降級、安全可信等。

方案實踐與探索

爲了驗證該場景,我們提供了一個稍微比較複雜的Demo,通過該 Demo 來分別演示如何通過 MSE 無侵入實現 Spring Boot 應用的服務註冊與服務治理。Demo 是根據 K8s Service 進行服務發現並且通過簡單的 HttpClient 進行請求調用,詳細請求如下:

➜  ~ curl http://47.97.117.48/A/spring_boot                                   
A[10.0.3.238] -> B[10.0.3.227] -> C[10.0.3.230]%

架構如下所示:

介紹完 Demo 之後,我們來逐步演示如何通過服務治理進行服務註冊。

通過服務治理完成服務註冊

1. 進入到對應的 MSE Nacos 實例頁面,選擇創建服務

2. 我們填寫好服務名、分組名之後,可以選擇一個服務治理的應用進行註冊

3. 開啓了健康檢查能力後,我們還可以選擇健康檢查的協議

4. 點擊確定後,我們就實現了通過服務治理方式註冊應用與實例至 MSE Nacos 中

5. 根據下圖配置,我們分別將 A 應用註冊成 sc-A、B 應用註冊成 sc-b、C 應用註冊成 sc-c

6. 同時我們修改 Zuul 應用的 Nacos 地址配置,使其通過 SDK 方式註冊至 MSE Nacos 中

7. 我們通過服務治理方式註冊的服務,我們還可以通過服務治理方式將對應的節點從 MSE Nacos 中下線

8.點擊 MSE 服務治理中節點詳情頁面的服務下線,在不用重啓應用 pod 的條件下,實現服務從註冊中心中下線

到目前爲止,我們完成了通過服務治理實現服務註冊。

通過服務治理完成服務訂閱

1. 我們在需要訂閱 Nacos 服務的應用中增加如下 Env

2. 如何訂閱對應的服務?

我們 Http 請求域名直接調用對應的服務即可,比如:

restTemplate.getForObject("http://sc-b:20002/spring_boot", String.class);

其中 sc-b 爲服務名,默認的分組名可以通過 mse_nacos_group 指定,如果需要指定分組名可以調用 http://sc-b:20002/spring_boot?mse_nacos_group=xxx 即可。

3. 驗證

a.通過 MSE Nacos 控制檯可以驗證,明確訂閱關係

b.通過端到端請求驗證

➜  ~ curl http://47.97.117.48/A/spring_bootA[10.0.3.238] -> B[10.0.3.229] -> C[10.0.3.241]%

無侵入實現基於 SpringBoot 應用的全鏈路灰度

到目前爲止,我們默認就具備了符合如上場景的全鏈路灰度能力。

➜  ~ curl http://47.97.117.48/A/spring_boot -H "x-mse-tag: gray"               
Agray[10.0.3.240] -> B[10.0.3.229] -> Cgray[10.0.3.241]%

總結

使用 Spring Boot 應用一樣可以快速享受到全鏈路灰度能力帶來的發佈體驗。我們通過MSE 服務治理能力與Nacos引擎的整合,可以進一步簡化與降低研發在雲上需要關注的部分,應用的客戶端可以再輕量化,進一步提升研發效率。

作者:十眠

原文鏈接

本文爲阿里雲原創內容,未經允許不得轉載。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章