2015-11-18 100 views
1

我們正在嘗試使用MS'ServiceFabric進行微服務。版本服務

場景: 我們有一個Service1運行版本1並準備升級到v2。

其他三個服務依賴於Service1的接口。我們希望能夠發佈Service1的v2,但保持v1運行,直到我們對v2升級並測試了三種服務。

我發現的所有例子,v2立即取代v1。可以配置嗎?有沒有一種方法可以告訴服務發現機制,我依賴於給定服務的特定版本?

回答

2

正如您所提到的,應用程序升級工作流程會將v1替換爲v2。但是,如果您希望v1和v2共存一段時間(以便您可以執行測試,將某些用戶逐漸路由到新版本等),則可以使用稍微更復雜的工作流程來完成此操作:

  1. 調配並創建一個新版本的v2服務實例。
  2. 對此實例執行測試(v2)。
  3. 一旦您對測試滿意,請將您的相關服務指向新實例(v2)。
  4. 一旦不再使用v1實例,請將其刪除。

這當然可能會給您帶來額外的麻煩,因爲您需要自己管理這個過程,處理您的依賴鏈等等。這是權衡 - 如果您想要更多地控制升級/推出過程,您必須自己處理更多細節。

或者,您可以查看站立的「暫存」羣集,您可以在其中部署和測試服務的新版本,而不會影響生產服務,並且只有在部署已通過驗證後纔將其部署到生產羣集階段。我們的一些客戶已經走了這條路,因爲它使得部署和驗證工作流程更加簡單,但需要額外的資源。

+0

這似乎有點冒險,因爲它是手動的 - 我們必須在每次升級時給服務一個新的名字 - 以及忘記風險太高。編輯:哦 - 這將導致漣漪效應 - 其他服務將取決於三個更新的服務,等等...... – Goblin

+0

事實上,您需要的控制越多,您的依賴鏈越複雜,更大的操作系統令您頭疼將有。我相信最簡單(雖然最昂貴)的模式是擁有多個羣集,只有在新的部署完全驗證之後,您的生產服務才能不受影響。正如我添加到答案中,一些客戶使用分段集羣來驗證其在與生產非常相似的環境中的部署。大型團隊通常會使用額外的測試集羣,爲他們的分期過程添加多個層次(隨着穩定性的提高)。 – tyadam

+1

@Goblin我們正在爲這些情況做的是在service/v1/blabla等服務url中注入版本名稱。服務/ V2 /布拉布拉。在我們發佈v2之後,我們正在爲service-v1計劃一個日落。直到那個時候,我們正在保持這兩個服務。我們正在監控service-v1的使用情況並提供必要的提醒和關閉v1。我不確定你提供的是什麼樣的服務,有多少不同的客戶正在使用你的服務,但是如果你需要向後兼容和平滑過渡,這似乎是唯一的方法。 – cool