Service Fabric 應用程式生命週期
如同其他平台,Azure Service Fabric 上的應用程式通常會經歷下列階段:設計、開發、測試、部署、升級、維護和移除。 從開發到部署、到每日管理、維護,以及最終的解除委任,Service Fabric 為雲端應用程式的完整應用程式生命週期提供第一等的支援。 服務模型可以啟用數個不同的角色,在應用程式生命週期中獨立參與。 本文章提供 API 的概觀以及其使用方式,這些 API 是由不同的角色在 Service Fabric 應用程式生命週期的各個階段使用。
重要
有兩個 CLI 公用程式用來與 Service Fabric 互動。 Azure CLI 用來管理 Azure 資源,例如 Azure 託管的 Service Fabric 叢集。 Service Fabric CLI 用來直接連線到 Service Fabric 叢集 (不論裝載於何處) 及管理叢集、應用程式和服務。
服務模型角色
服務模型角色是:
- 服務開發人員:開發模組化和一般服務,可以重新制定目的以及在相同類型或不同類型的多個應用程式中使用。 例如,佇列服務可以用於建立票證應用程式 ( 技術支援中心) 或電子商務應用程式 (購物車)。
- 應用程式開發人員:藉由整合服務集合來建立應用程式,以滿足部分特定需求或案例。 例如,電子商務網站可能會整合「JSON 無狀態前端服務」、「拍賣可設定狀態服務」和「佇列可設定狀態服務」,以建立拍賣解決方案。
- 應用程式系統管理員:進行應用程式組態 (填入組態範本參數)、部署 (對應至可用的資源),以及服務品質的決策。 例如,應用程式系統管理員會決定應用程式的語言地區設定 (例如,在美國使用美式英文、在日本使用日文)。 以不同方式部署的應用程式可以有不同的設定。
- 運算子:根據應用程式組態和應用程式系統管理員所指定的需求,部署應用程式。 例如,操作員佈建和部署應用程式,並確保它在 Azure 中執行。 操作員會監視應用程式健康狀況和效能資訊,並視需要維護實體基礎結構。
開發
- 服務開發人員使用可靠的執行者或可靠的服務程式設計模型來開發不同類型的服務。
- 服務開發人員 以宣告方式描述服務資訊清單檔案中的已開發服務類型,該檔案包含一或多個程式碼、組態和資料封裝。
- 然後, 應用程式開發人員 建置使用不同服務類型的應用程式。
- 應用程式開發人員 以宣告方式描述應用程式資訊清單中的應用程式類型,方法是參考組成服務的服務資訊清單,並且適當地覆寫和參數化組成服務的不同組態和部署設定。
如需範例,請參閱開始使用可靠的執行者和開始使用可靠的服務。
部署
- 應用程式系統管理員 會將應用程式類型調整為要部署至 Service Fabric 叢集的特定應用程式,方法是在應用程式資訊清單中指定 ApplicationType 元素的適當參數。
- 「運算子」會使用 CopyApplicationPackage 方法或 Copy-ServiceFabricApplicationPackage Cmdlet,將應用程式封裝上傳至叢集映像存放區。 應用程式封裝包含應用程式資訊清單和服務封裝集合。 Service Fabric 會從儲存在映像存放區 (可以是 Azure Blob 存放區或 Service Fabric 系統服務) 中的應用程式封裝部署應用程式。
- 然後,「運算子」會使用 ProvisionApplicationAsync 方法、Register-ServiceFabricApplicationType Cmdlet,或佈建應用程式 REST 作業,從上傳的應用程式套件,在目標叢集中佈建應用程式類型。
- 佈建應用程式之後,「運算子」會使用「應用程式系統管理員」提供的參數啟動應用程式,方法是使用 CreateApplicationAsync 方法、New-ServiceFabricApplication Cmdlet,或建立應用程式 REST 作業。
- 在部署應用程式之後,「運算子」會使用 CreateServiceAsync 方法、New-ServiceFabricService Cmdlet,或建立服務 REST 作業,根據可用的服務類型針對應用程式建立新的服務執行個體。
- 應用程式現在會在 Service Fabric 叢集中執行。
如需範例,請參閱 部署應用程式 。
Test
- 在部署至本機開發叢集或測試叢集之後,「服務開發人員」會執行內建的容錯移轉測試案例,方法是使用 FailoverTestScenarioParameters 和 FailoverTestScenario 類別,或 Invoke-ServiceFabricFailoverTestScenario Cmdlet。 容錯移轉測試案例會在重要的轉換和容錯移轉期間執行指定服務,以確保它是仍然可用且可運作。
- 然後,「服務開發人員」會執行內建混亂測試案例,方法是使用 ChaosTestScenarioParameters 和 ChaosTestScenario 類別,或 Invoke-ServiceFabricChaosTestScenario Cmdlet。 混亂測試案例會在叢集中隨機引發多個節點、程式碼封裝和複本錯誤。
- 「服務開發人員」會撰寫在叢集周圍移動主要複本的測試案例來測試服務對服務通訊。
如需詳細資訊,請參閱 錯誤分析服務簡介 。
升級
- 服務開發人員 會更新具現化應用程式的組成服務及/或修正錯誤,並提供新版本的服務資訊清單。
- 應用程式開發人員 會覆寫和參數化組成服務的組態和部署設定,並提供新版本的應用程式資訊清單。 然後,應用程式開發人員會將新版本的服務資訊清單併入應用程式,並在更新的應用程式封裝中提供新版本的應用程式類型。
- 應用程式系統管理員 會將新版本的應用程式類型併入目標應用程式,方法是更新適當的參數。
- 「運算子」會使用 CopyApplicationPackage 方法或 Copy-ServiceFabricApplicationPackage Cmdlet,將更新的應用程式封裝上傳至叢集映像存放區。 應用程式封裝包含應用程式資訊清單和服務封裝集合。
- 「運算子」使用 ProvisionApplicationAsync 方法、Register-ServiceFabricApplicationType Cmdlet,或佈建應用程式 REST 作業,在目標叢集中佈建新版本的應用程式。
- 「運算子」使用 UpgradeApplicationAsync 方法、Start-ServiceFabricApplicationUpgrade Cmdlet 或升級應用程式 REST 作業升級應用程式,將目標應用程式升級為新版本。
- 「運算子」使用 GetApplicationUpgradeProgressAsync 方法、Get-ServiceFabricApplicationUpgrade Cmdlet,或取得應用程式升級進度 REST 作業,檢查升級進度。
- 如果需要,「運算子」使用 UpdateApplicationUpgradeAsync 方法、Update-ServiceFabricApplicationUpgrade Cmdlet或更新應用程式升級 REST 作業,修改並重新套用目前應用程式升級的參數。
- 如果需要,「運算子」使用 RollbackApplicationUpgradeAsync 方法、Start-ServiceFabricApplicationRollback Cmdlet,或回復應用程式升級 REST 作業,回復目前的應用程式升級。
- Service Fabric 會升級在叢集中執行的目標應用程式,而不會遺失任何其組成服務的可用性。
如需範例,請參閱 應用程式升級教學課程 。
維護
- 對於作業系統升級和修補程式,Service Fabric 會與 Azure 基礎結構連結,以保證在叢集中執行之所有應用程式的可用性。
- 對於 Service Fabric 平台的升級和修補程式,Service Fabric 會自行升級,而不會遺失在叢集上執行之任何應用程式的可用性。
- 應用程式系統管理員 在分析歷史容量使用率資料和預測的未來需求之後,核准在叢集中新增或移除節點。
- 「操作員」會新增或移除「應用程式系統管理員」指定的節點。
- 當新的節點加入至叢集或從叢集移除現有節點時,Service Fabric 會自動對叢集中所有節點的執行中應用程式進行負載平衡,以達到最佳效能。
移除
- 「運算子」可以使用 DeleteServiceAsync 方法、Remove-ServiceFabricService Cmdlet,或刪除服務 REST 作業,刪除叢集內執行中服務的特定執行個體,而不需要移除整個應用程式。
- 「運算子」也可以使用 DeleteApplicationAsync 方法、Remove-ServiceFabricApplication Cmdlet,或刪除應用程式 REST 作業,刪除應用程式執行個體及其所有服務。
- 應用程式和服務停止之後,「運算子」可以使用 UnprovisionApplicationAsync 方法、Unregister-ServiceFabricApplicationType Cmdlet,或解除佈建應用程式 REST 作業,解除佈建應用程式類型。 解除佈建應用程式類型不會從 ImageStore 移除應用程式封裝。
- 「運算子」會使用 RemoveApplicationPackage 方法或 Remove-ServiceFabricApplicationPackage Cmdlet,從 ImageStore 移除應用程式封裝。
如需範例,請參閱 部署應用程式 。
保留叢集映像存放區中的磁碟空間
ImageStoreService 會保留複製和佈建的封裝,這可能會導致檔案累積。 檔案累積可能會導致 ImageStoreService (fabric:/System/ImageStoreService) 填滿磁碟,並可能增加 ImageStoreService 複本的建置時間。
若要避免檔案累積,請使用下列佈建順序:
將套件複製到 ImageStore,並使用壓縮選項
佈建封裝
移除映像存放區中的封裝
升級應用程式/叢集
取消佈建舊版本
上述程序中的步驟 3 和 5 會防止在映像存放區中發生檔案累積。
自動清除的設定
您可以使用 PowerShell 或 XML 將上述步驟 3 自動化。 這會導致應用程式封裝在應用程式類型成功註冊之後自動刪除。
Register-ServiceFabricApplicationTye -ApplicationPackageCleanupPolicy Automatic
XML:
<Section Name="Management">
<Parameter Name="CleanupApplicationPackageOnProvisionSuccess" Value="True" />
</Section>
您可以使用 XML 將上述步驟 5 自動化。 這會導致未使用的應用程式類型自動取消註冊。
<Section Name="Management">
<Parameter Name="CleanupUnusedApplicationTypes" Value="true" />
<Parameter Name="PeriodicCleanupUnusedApplicationTypes" Value="true" />
<Parameter Name="TriggerAppTypeCleanupOnProvisionSuccess" Value="true" />
<Parameter Name="MaxUnusedAppTypeVersionsToKeep" Value="3" />
</Section>
清除節點上的檔案和資料
應用程式檔案的複寫最終會依照平衡動作,將檔案散發到所有節點。 視應用程式數目及其檔案大小而定,這可能會帶來磁碟壓力。 即使節點上沒有作用中的執行個體正在執行,先前執行個體的檔案仍會保留。 對於具狀態服務所使用可靠集合的資料也是如此。 這會提供更高的可用性用途。 如果相同節點上有新的應用程式執行個體,則不得複製任何檔案。 對於可靠的集合,只能複寫差異。
若要完全移除應用程式二進位檔,您必須取消註冊應用程式類型。
建議降低磁碟壓力:
- Remove-ServiceFabricApplicationPackage 這會從暫時上傳位置移除套件。
- Unregister-ServiceFabricApplicationType 會從映像存放區服務和所有節點移除應用程式類型檔案,以釋放儲存空間。 刪除管理員預設會每小時執行一次。
- CleanupUnusedApplicationTypes 會自動清除未使用的應用程式舊版本。
{ "name": "Management", "parameters": [ { "name": "CleanupUnusedApplicationTypes", "value": true }, { "name": "MaxUnusedAppTypeVersionsToKeep", "value": "3" } ] }
- Remove-ServiceFabricClusterPackage 會移除未使用的舊執行階段安裝二進位檔。
注意
功能正在開發中,可讓 Service Fabric 在應用程式從節點中清空後刪除應用程式資料夾。
下一步
如需開發、測試及管理 Service Fabric 應用程式和服務的詳細資訊,請參閱: