天天看點

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

作者 | 亦盞

01 微服務靈活開發不簡單

1、安得環境千萬套,大庇開發小哥俱歡笑

微服務給大家帶來了靈活開發的特性,基于靈活開發帶來的便利,讓我們可以在同一個時間内多個疊代/feature 并行開發。但微服務架構本身也給開發環境帶來了一定的複雜性:每個 feature 的修改點都可能會被分散在多個應用中,需要多個應用互相配合才能完成整體的邏輯。這些應用既需要互相配合好,又不能讓他們互相影響,故靈活開發有時候也不是那麼容易。

相信實踐過微服務靈活開發的同學曾經都遇到過以下情況:

1、開發接口時,應用無法獨立地聯調測試,需要依賴于下遊的傳回,是以一般都需要一個完整的開發環境,這個環境需要包含所有的其他應用。

2、A 同學辛辛苦苦,終于開發好了一個接口,但是部署到開發環境後,發現傳回值一直是錯的,就是不符合預期,百思不得其解。最終根據日志、arthas 層層跟蹤下去,發現原來是另一個同僚更新了下遊應用的代碼,導緻原有邏輯發生了變更。

3、A 同學準備開始聯調測試了,這時候他要找到開發 B 和 C 吼一嗓子确認:“我要開始測試了哈兄弟們,你們都别動環境,不要重新開機和 debug 哈”。B 同學 和 C 同學一臉懵逼:“我自己這還有個邏輯沒理清楚呢,剛改完代碼準備測一發,你這一測試聯調我就不能動環境了,我這功能得等到什麼時候才能開發好”。

4、排查問題好麻煩啊,要不直接 debug 一下吧,這 IDEA 遠端 debug 剛連上去呢,立馬就傳來了同僚的聲音:“誰 XX 又在瞎動環境啊,怎麼剛剛還能跑的接口現在就出錯了”。

以上這些問題顯然會影響項目的進度,非常容易造成項目延期。對于此刻的開發小哥哥而言,擁有一套屬于自己的獨立環境,帶來的幸福感也許比有一套屬于自己的小房子還大。

2、流量閉環是微服務靈活開發的基礎

上文中提到的問題,其實都是因為沒有在開發環境中,精準地控制流量在 feature 環境内流轉。

為什麼精準地控制流量如此重要?舉個最簡單的微服務架構圖來說明,這裡假設應用的調用鍊路為 A ---> B ---> C ---> D ,現在同時開發兩個 feature, feature1 和 feature2 。feature1 需要修改 A 和 C 的代碼, feature2 需要修改 B、C 和 D 的代碼。為了友善表述,我們用 A、B、C、D 來代指 A、B、C、D 的線上穩定版本,也叫做基線版本;A1、C1 來代指 feature1 環境中的 A 和 C ;B2、C2、D2 來來代指 feature2 環境中 B、C、D。

那麼開發測試 feature1 的同學會要求他的請求,準确地在 A1 ---> B ---> C1 ---> D 中流轉。為什麼一定要這樣,我們來簡單分析一下:

1、如果流量走到 A 或者 C 的基線環境,因為他們都沒有包含 feature1 相關的代碼,是以肯定是無法正常測試和聯調 feature1 對應的功能。

2、如果流量走到 B2、D2 環境,大多數情況下是可以正常工作的,因為正常情況下 B2 和 D2 中的修改是不會影響 feature1 的。但是因為 feature1 和 feature2 可能是由不同的同學開發的,或者有不同的開發排期和節奏,他們有自己的開發、重新開機、debug 節奏,是以大機率還是會出現上文中提到的場景。

綜上所述,讓流量在 feature 環境内流轉非常重要,是微服務靈活開發的基礎。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

如何準确地讓請求在 feature 環境内流轉呢?最簡單的辦法是每個疊代/feature 的都享有一套獨立的完整環境,這套獨立的環境包含了整個微服務應用集所有的應用,包含注冊中心和接入層,這樣就能確定流量在 feature 環境裡閉環,不用擔心應用之間互相影響。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

這個解決方案雖然簡單,但是問題也很顯而易見,成本比較大。我們假設微服務應用有10 個,每個應用隻部署一台,以 java 為例,部署一個 java 應用按  2C4G 的 共享标準型 ECS 進行計算,維護一套環境一年的成本是 10 × 140 × 12 = 16800 元,如果同時有 4 套環境,即隻支援兩個疊代并行開發,每個疊代隻有 2 個 feature,這樣一年的成本就是 67200 元,而且我們可以發現,這裡面計算公式使用的是乘法,當應用增加和環境增加時,成本的增加是成倍的。

注意,這裡隻是單純地計算了應用使用的 ECS 的成本,其他周邊的配套設施我們還沒有計算,因為我們的開發、聯調、測試是需要確定端到端的全流程都是足夠順利的,那這裡就還會涉及到 域名/SLB/網關/注冊中心這些資源,這些資源一般比較固定,不會需要進行大的修改,但是在多套環境的方案下這些資源也需要維護多套,成本還會進一步上升。

那麼,有沒有一個比較優雅地方式,既能享受到微服務架構帶來的靈活開發的便利,又不會給日常開發環境的搭建帶來很大的成本呢?基于 MSE(微服務引擎 MSE,以下簡稱 MSE)标簽路由功能使用開發環境隔離方案是您的不二之選。

3、如何低成本玩轉靈活開發

什麼是 MSE 開發環境隔離,簡單地說就是将 feature 環境的隔離方式從簡單的實體隔離轉為邏輯隔離。借助于 MSE 提供的邏輯隔離,您隻需要維護一套完整的基線環境,在增加 feature 環境時,隻需要單獨部署這個 feature 所涉及到改動的應用即可,而不需要在每個 feature 環境都部署整套的微服務應用及其配套設施。

我們稱這唯一的一套完整的環境為基線環境。基線環境包含了所有微服務應用,也包含了服務注冊中心、域名、SLB、網關 等其他設施,而 feature 環境中隻包含了這個 feature 中需要修改的應用。這樣維護 n 套 feature 環境的成本,就變成了加法,而不是原來的乘法,由 n × m 變成了  n +  m。差不多相當于零成本增加 feature 環境,這樣我們就可以放心地擴容出多套 feature 環境,每個開發小哥哥都可以輕松擁有屬于自己的獨立環境,盡情地享受微服務靈活開發。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境
四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

從上圖中我們可以看到,feature1 對應的流量,在發現 feature1 中存在 A1 應用時,一定會去往 A1 節點,A1在調用B的時候發現 feature1 環境中不存在 B1 ,則會将請求發到 基線版本的 B 中;B在調用C時,發現 feature1 環境存在 C1 應用,又會傳回到 feature1 環境中,依次類推,確定了流量會在 feature1 環境中閉環。

而且,在這個過程中,您不需要修改任何代碼和配置,直接接入 MSE 微服務治理即可使用,不會給您增加任何開發成本。

02 如何使用 MSE 開發環境隔離01

1、開通 MSE 微服務治理專業版

登入

MSE治理中心控制台

,如果您尚未開通 MSE 微服務治理,請根據提示開通專業版。如果您已經開通了MSE 微服務治理基礎版,請根據概覽頁中右側的提示,更新到 專業版。

02

2、部署基線環境/基線環境接入

首先需要将基線環境的所有應用接入到 MSE 中,接入方式與您開發環境中應用部署方式有關。這裡我們拿兩個典型的場景作為例子進行說明。更多接入場景請參考 MSE 幫助文檔

MSE 微服務治理快速入門

  • 阿裡雲容器服務 ACK

若您的開發環境部署在 阿裡雲容器服務的 ACK 中,将基線環境接入 MSE 的流程如下:

1、在 ACK 中安裝 MSE 治理中心元件

  1. 容器服務控制台
  2. 在左側導航欄單擊市場 > 應用目錄。
  3. 在應用目錄頁面搜尋并單擊 ack-mse-pilot。
  4. 在 ack-mse-pilot 頁面右側叢集清單中選擇叢集,然後單擊建立。
四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

安裝 MSE 微服務治理元件大約需要 2 分鐘,請耐心等待。建立成功後,會自動跳轉到目标叢集的釋出頁面,檢查安裝結果。如果出現以下頁面,展示相關資源,則說明安裝成功。

2、為 ACK 命名空間中的應用開啟 MSE 微服務治理

  1. MSE 治理中心控制台
  2. 在左側導航欄選擇微服務治理中心 > K8s 叢集清單。
  3. 在 K8s 叢集清單頁面搜尋框清單中選擇叢集名稱或叢集 ID,然後輸入相應的關鍵字,單擊 🔍 圖示。
  4. 單擊目标叢集操作列的管理。
  5. 在叢集詳情頁面命名空間清單區域,單擊目标命名空間操作列下的開啟微服務治理。(如果您的基線環境部署在 default 這個 namespace 中,則目标命名空間為 default)
  6. 在開啟微服務治理對話框中單擊确認

3、完成上述步驟後,重新開機/部署基線版本的應用,您的基線環境就已經接入完成。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境
四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境
  • ECS/虛拟機

若您的應用是通過 ECS 或者 虛拟機的方式部署的,請您打開 MSE微服務治理控制台中的應用清單-接入方式-ECS 叢集,根據指南裡面的提示進行操作。

1、通過Shell腳本方式下載下傳Agent 複制以下指令行并在待治理應用所處的系統中運作。

wget -O- http://mse-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/install.sh | sh
# 此指令具體内容會随着您控制台中的選擇的 Region 而變化,請注意在控制台中選擇機器所在的 Region
# 若您的機器不在阿裡雲環境中,請選擇 杭州 Region。      

2、接入 MSE Agenta. 将MseAgent.zip中的所有檔案解壓到任意目錄中。

unzip MseAgent -d /{user.workspace}/

# 說明 “{user.workspace}”是示例路徑,請根據具體環境替換為正确的路徑。      

b. 在應用啟動參數上添加AppName以及LicenseKey參數。

java -javaagent:/{user.workspace}/MseAgent/mse-bootstrap-1.7.0-SNAPSHOT.jar 
-Dmse.licenseKey=<yourLicenseKey>   
-Dmse.appName=<yourAppName>  
-Dmse.enable=true  -jar A.jar

#系統将為您自動生成的 <yourLicenseKey> ,在上文中提到的 ECS接入指南 界面檢視,請勿洩露。
#<yourAppName> 為應用名稱,同一應用在後續的 feature 環境接入需要保持應用名稱一緻      

注意:各個 Region 的 LicenseKey 值可能不一緻,請注意選擇正确的 Region,若您的機器不在阿裡雲環境中,請選擇 杭州 Region。

  • 驗證環境接入成功

完成上述步驟後,您的基線環境就已經部署好了。您可以在 MSE 控制台中找到對應的 Region 檢視應用清單,以及應用詳情頁的節點情況。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

03

3、将應用接入 feature 環境

将應用接入 feature 環境的方式和第二步中的方式基本相同,隻不過這裡需要額外給應用打上一個标簽,将這個應用标記為屬于 feature 環境。

同樣的,接入 feature 環境的方式也和應用的部署形态相關,這裡同樣分别以 K8s 和 ECS 方式舉例,如何将 A 應用接入到 feature1 環境。

  • K8s 部署方式

如果您的應用是通過 K8s 方式部署,則應用在接入 feature1 環境時需要在 deployment 中的 spec > template > metadata 下的 annotations 增加如下配置:

spec:
  template:
    metadata:
      annotations:
        alicloud.service.tag: feature1      

如果您的應用是通過 ECS/虛拟機的方式部署,則應用在接入 feature1 環境時需要額外配置 JVM 系統屬性(SystemProperty) ,增加的方式為在 Java 啟動指令中增加 `-Dalicloud.service.tag=feature1`,完整的啟動指令如下:

java -javaagent:/{user.workspace}/MseAgent/mse-bootstrap-1.7.0-SNAPSHOT.jar 
-Dmse.licenseKey=<yourLicenseKey>   
-Dmse.appName=<yourAppName>  
-Dmse.enable=true
-Dalicloud.service.tag=feature1 -jar A.jar      

完成上述操作後,登入 MSE 控制台,找到剛才啟動的應用,在詳情頁面檢視執行個體詳情,可以确認節點的 ip 和标簽是否符合預期。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

04

4、輕松開始聯調和測試

假設我們發往網關的請求是 http 請求,希望這個請求再 feature1 中完成閉環,隻需要在請求的 header 中添加 x-mse-tag=feature1 即可,流量會自動在 feature1 環境内完成閉環。注意這裡的 key 為 x-mse-tag 為固定值,feature1 則需要和環境的标簽(即上文中配置的 alicloud.service.tag)保持一緻。

如果您的請求來源為 Dubbo,則需要在 RpcContext 中增加 Attachment ,内容也是 x-mse-tag=feature1。

特别地,如果您的網關應用不屬于 Java 體系,則需要在網關層配置一下規則,目前已經支援 MSE雲原生網關,Nginx,K8s Ingress 等,詳細的接入方式可以參考

MSE 全鍊路灰階配置

03 更進一步 IDEA 接入 feature 環境

上文中提到過,開發聯調過程中,将應用部署到聯調環境也是需要成本的,能不能直接在 IDEA 裡面把正在開發的微服務跑起來呢?這樣豈不是就可以直接愉快地快速部署和 debug 了?當然可以!而且操作起來還非常簡單!

将 IDEA 啟動的應用直接接入到 feature 環境中也不複雜,隻需要簡單幾步即可實作。注意:使用此特性的前提條件為,您本機的網絡與開發環境其他應用能夠正常通訊。

01

1、 安裝 CloudToolkit 插件

安裝最新版本的 Cloud Toolkit,安裝詳情請參考官網:

https://www.aliyun.com/product/cloudtoolkit

2、配置 MSE 參數

點選 IDEA 的 Tools 中找到 Preference ,找到 Alibaba Cloud Toolkit 中 Microservice 下的 MSE ,點選 開啟微服務治理,并安裝下圖的方式進行配置即可。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境
四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境
對以下幾個參數做一下說明:
  • LicenseKey

您阿裡雲賬号對應的 MSE 産品的 LicenseKey ,請在

https://mse.console.aliyun.com/#/msc/app/accessType

中的選擇 ECS 叢集,在 安裝 MSE Agent 章節找到 LicenseKey 的值。

注意:請您做好 LicenseKey 的保密工作。注意:各個 Region 的 LicenseKey 值可能不一緻,請選擇對應的 Region,并和基線環境接入的 Region 保持一緻。

  • App Name

應用在接入 MSE 時所使用的應用名,請根據實際業務情況進行配置,注意這個值需要和本次所啟動的應用保持一緻。

  • Tag

此應用所屬的環境 Tag,基線不用填,其他請根據實際業務情況進行填寫。如果此應用屬于 feature1 環境,請填寫 feature1。

  • Agent 位址

選擇自己應用所在的地域,需要和 LienseKey 所在的地域、以及基線環境接入的地域 都保持一緻。

  • 開啟 RPC 灰階  ✅

支援對 Spring Cloud 和 Dubbo 近5年内的所有版本的流量進行精準控制。預設情況下請開啟,除非您明确知道關閉此選項的使用場景,否則請勿關閉此選項。

  • 開啟标簽染色  ✅

推薦開啟,開啟後經過此應用的流量就隻會在對應的 Tag 環境中流轉。

  • 開啟消息灰階  ✅

請根據業務實際情況選擇是否開啟,目前僅支援 RocketMQ 4.2 及以上版本。

3、驗證應用是否接入成功

1、使用常見的 IDEA 啟動應用的方式進行啟動2、登入 MSE 控制台,選擇對應 Region ,找到剛才填寫的應用名,點選此應用名,如果在應用詳情中發現了本地對應的 IP 和 Tag ,表明接入成功。

四步輕松玩轉微服務靈活開發01 微服務靈活開發不簡單02 如何使用 MSE 開發環境隔離0103 更進一步 IDEA 接入 feature 環境

注意,第一第二步隻需要執行一次,若 AppName 和 Tag 發生了變更,則根據實際情況進行調整。

4、接入成功

現在,您可以在 IDEA 中盡情地享受本地開發部署和 debug 的快感。

雙 11 搶購倒計時 6 天,微服務引擎 MSE 注冊&配置中心、MSE 雲原生網關預付費低至 8 折,全年最低優惠!

點選文末連結,移步詳情頁加購。

https://www.aliyun.com/product/aliware/mse