簡體   English   中英

Azure ServiceFabric的藍/綠部署

[英]Blue/Green Deployments with Azure ServiceFabric

我目前正在Azure ServiceFabric上使用ReliableActors框架構建應用程序。 隨着我們擴大規模,我正在考慮進行藍/綠部署。 我可以看到如何使用無狀態系統來做到這一點。 有沒有辦法使用有狀態的演員來做到這一點?

Service Fabric完全是關於滾動升級,而不是像VIP交換那樣的部署交換。 無狀態和有狀態服務都以相同的方式升級,但有一些額外的細微差別,我稍后會提到。

通過滾動升級,我的意思是升級到應用程序,一次完成一個升級域,這樣就沒有停機時間,也沒有突然切換。 Service Fabric中的滾動升級可以在安全的“托管”模式下完成,其中平台將在進入下一個升級域之前執行運行狀況檢查,並在運行狀況檢查失敗時自動回滾。

好的,聽起來都不錯。 但是,當升級總是滾動升級時,如何進行藍/綠部署?

這就是應用程序類型和版本的用武之地.Service Fabric沒有兩個可以容納兩個正在運行的應用程序的“環境”,而是具有版本化應用程序類型的概念,可以從中創建應用程序實例。 這是一個如何工作的例子:

假設我想創建一個名為Foo的應用程序。 My Foo應用程序被定義為應用程序類型,稱之為FooType。 這類似於在C#中定義一個類。 和C#中的類一樣,我可以創建我的類型的實例。 每個實例都有一個唯一的名稱,類似於類的每個對象實例具有唯一的變量名稱。 但與C#中的類不同,我的FooType有一個版本號。 然后我可以在我的集群中“注冊”應用程序類型和版本:

FooType 1.0

注冊后,我可以創建該應用程序的實例:

"fabric:/FooApp" of FooType 1.0

現在,假設我開發了我的應用程序的2.0版本。 所以我在集群中注冊了我的FooType 2.0版:

FooType 1.0
FooType 2.0

現在我已經注冊了兩個版本的FooType,並且我仍然有一個運行1.0的實例:

"fabric:/FooApp" of FooType 1.0

這是它變得有趣的地方。 我可以做一些有趣的事情:

我可以使用“fabric:/ FooApp”--FooType 1.0的一個實例 - 並將其升級到FooType 2.0。 這將是正在運行的應用程序的滾動升級。

或者..我可以單獨留下“fabric:/ FooApp”,並創建我的2.0版應用程序的實例:

"fabric:/FooApp" of FooType 1.0
"fabric:/FooAppv2Test" of FooType 2.0

現在我有兩個並行運行的應用程序在同一個集群中。 一個是1.0的實例,另一個是2.0的實例。 通過一些端口和應用程序端點的配置,我可以確保用戶在測試2.0實例時仍然使用1.0實例。

太棒了,所以我的測試都是針對2.0實例傳遞的,所以現在我可以安全地使用1.0實例並將其升級到2.0的FooType。 同樣,這是該實例(fabric:/ FooApp)的滾動升級,它不會將用戶遷移到新實例(fabric:/ FooAppv2Test)。 稍后我會去刪除fabric:/ FooAppv2Test,因為那只是用於測試。

藍/綠的一個好處是,如果新的部署失敗,可以換回其他部署。 好吧,你仍然注冊了1.0和2.0的FooType。 因此,如果您的應用程序在從1.0升級到2.0后開始行為不端,您可以將其“升級”回1.0! 實際上,您可以根據需要在應用程序類型的多個不同版本之間“升級”應用程序實例! 並且您不需要像在交換環境中那樣運行所有應用程序版本的實例 ,只需注冊不同的版本,並且可以在版本之間“升級”單個應用程序實例。

我提到了有狀態服務的警告。 有狀態服務要記住的重要一點是應用程序狀態 - 用戶的數據 - 包含在應用程序實例(fabric:/ FooApp)中,因此要讓用戶查看他們的數據,您需要將它們保存在該實例上。 這就是我們進行滾動升級而不是部署交換的原因。

這只是基本的想法。 您可以通過其他方式使用應用程序類型,版本和實例,具體取決於您的目標和應用程序的工作方式,但這是另一種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM