雲端設計模式
這些設計模式有助於在雲端中建置可靠、可擴充且安全的應用程式。
每個模式都會說明模式處理的問題、套用模式的考量,以及以 Microsoft Azure 為基礎的範例。 大部分模式都包含示範如何在 Azure 上實作模式的程式碼範例或程式碼片段。 不過,大部分模式都與任何分散式系統有關,不論裝載于 Azure 或其他雲端平臺上。
雲端開發中的挑戰
資料管理資料管理是雲端應用程式的關鍵元素,會影響大部分的品質屬性。 資料通常會裝載在不同的位置,且跨多部伺服器進行效能、延展性或可用性。 這可能會呈現各種挑戰。 例如,必須維持資料的一致性,並且通常需要同步處理跨不同位置的資料。 |
|
設計與實作良好的設計包含元件設計和部署的一致性和一致性、簡化管理和開發的可維護性,以及允許元件和子系統用於其他應用程式和案例的重複使用性。 在設計和實作階段所做的決策,會大幅影響雲端裝載應用程式和服務的品質和擁有權總成本。 |
|
傳訊雲端應用程式的分散式本質需要傳訊基礎結構來連接元件和服務,最好是鬆散結合以最大化延展性。 非同步傳訊廣泛使用並提供許多優點,但也帶來挑戰,例如排序訊息、有害訊息管理、等冪性等等。 |
模式的目錄
模式 | 摘要 | 類別 |
---|---|---|
外交官 (Ambassador) | 建立會代表取用者服務或應用程式傳送網路要求的協助程式服務。 | 設計與實作, 卓越營運 |
防損毀層 | 在最新應用程式和舊系統間實作外觀或配接層。 | 設計與實作, 卓越營運 |
非同步要求-回覆 | 將後端處理與前端主機分離,其中後端處理必須是非同步的,但前端仍然需要明確的回應。 | 傳訊 |
前端的後端 | 建立由特定前端應用程式或介面取用的個別後端服務。 | 設計與實作 |
隔艙 | 將應用程式的元素隔離到集區中,以便其中一個元素失敗時,其他元素可以繼續運作。 | 可靠性 |
另行快取 | 依需要從資料存放區將資料載入快取中 | 資料管理, 效能效率 |
設計 | 讓每個服務決定處理商務作業的時間和方式,而不是依據中央協調器。 | 傳訊, 效能效率 |
斷路器 | 在連線到遠端服務或資源時,處理可能需要不同時間來修復的錯誤。 | 可靠性 |
提領票證 | 將大型訊息分割成提領票證與承載,以免癱瘓訊息匯流排。 | 傳訊 |
補償交易 | 復原由一系列步驟執行的工作,這些步驟共同定義最終一致的作業。 | 可靠性 |
競爭取用者 | 讓多個並行取用者處理在相同傳訊通道上接收的訊息。 | 傳訊 |
計算資源彙總 | 將多個工作或作業合併為單一計算單位 | 設計與實作 |
CQRS | 如果作業讀取的資料來自使用個別介面更新資料的作業,則隔離該作業。 | 資料管理, 設計與實作, 效能效率 |
部署戳記 | 部署多個獨立的應用程式元件複本,包括資料存放區。 | 可靠性, 效能效率 |
Edge 工作負載設定 | 生產區中的各種系統和裝置,皆會讓您難以設定工作負載。 | 設計與實作 |
事件來源 | 使用附加專用存放區記錄完整系列的事件,其描述對網域中的資料採取的動作。 | 資料管理, 效能效率 |
外部設定存放區 | 將設定資訊從應用程式部署套件移至集中位置。 | 設計與實作, 卓越營運 |
同盟身分識別 | 將驗證委派給外部身分識別提供者。 | 安全性 |
閘道管理員 | 保護應用程式和服務,方法是使用專用的主機執行個體,其會作為用戶端和應用程式或服務之間的代理程式、會驗證和處理要求,並在兩者之間傳遞要求和資料。 | 安全性 |
閘道彙總 | 您可以使用閘道來將多個個別的要求彙總成單一要求。 | 設計與實作, 卓越營運 |
閘道卸載 | 將共用或特殊服務功能卸載至閘道 Proxy。 | 設計與實作, 卓越營運 |
閘道路由 | 使用單一端點將要求路由至多個服務。 | 設計與實作, 卓越營運 |
Geodes | 將後端服務部署到一組地理節點,其中每個節點都可以為任何區域中的任何用戶端要求提供服務。 | 可靠性, 卓越營運 |
健康情況端點監視 | 實作應用程式中的功能檢查,而外部工具可透過公開的端點定期存取此應用程式。 | 可靠性, 卓越營運 |
索引資料表 | 針對資料存放區中查詢經常參考的欄位建立索引。 | 資料管理, 效能效率 |
選出領導者 | 選取一個執行個體作為領導者,負責管理其他執行個體,協調分散式應用程式中共同作業工作執行個體集合執行的動作。 | 設計與實作, 可靠性 |
具體化檢視模式 | 當資料格式對必要的查詢作業而言不理想時,對一或多個資料存放區中的資料產生預先填入的檢視。 | 資料管理, 營運卓越、 效能效率 |
管道與篩選器 | 將執行複雜處理程序的工作,細分成一系列可重複使用的個別元素。 | 設計與實作, 傳訊 |
優先順序佇列 | 針對傳送給服務的要求排列優先順序,讓高優先順序要求的接收和處理順序在低優先順序要求之前。 | 傳訊, 效能效率 |
發行者/訂閱者 | 讓應用程式能夠非同步地向多個感興趣的取用者宣告事件,而不需要將傳送者與取用者結合。 | 傳訊 |
佇列型負載調節 | 使用佇列來作為工作與其所叫用服務之間的緩衝區,以使間歇性的繁重負載順暢。 | 可靠性, 傳訊, 復原能力, 效能效率 |
速率限制模式 | 限制模式可協助您避免或最小化與這些節流限制相關的節流錯誤,並協助您更精確地預測輸送量。 | 可靠性 |
重試 | 讓應用程式可以在嘗試連線到服務或網路資源時,藉由明確地重試先前失敗的作業,處理預期的暫時性失敗。 | 可靠性 |
Saga | 在分散式交易案例中管理微服務之間的資料一致性。 Saga 是一連串的交易,會更新每個服務,併發布訊息或事件來觸發下一個交易步驟。 | 傳訊 |
排程器代理程式監督員 | 在一組分散式服務和其他遠端資源中協調一組動作。 | 傳訊, 可靠性 |
循序群組 | 以定義的順序處理一組相關的訊息,而不封鎖處理其他訊息群組。 | 傳訊 |
分區化 | 將資料存放區分割為一組水平分割或分區。 | 資料管理, 效能效率 |
側車 | 將應用程式的元件部署到個別的處理序或容器,以提供隔離和封裝。 | 設計與實作, 卓越營運 |
靜態內容裝載 | 將靜態內容部署到可以直接將其交付給用戶端的雲端儲存體服務。 | 設計與實作, 資料管理, 效能效率 |
扼制圖 | 透過將功能的特定片段逐漸取代成新的應用程式和服務,來逐步移轉舊有系統。 | 設計與實作, 卓越營運 |
節流 | 控制應用程式執行個體、個別租用戶或整個服務所使用的資源耗用量。 | 可靠性, 效能效率 |
Valet 金鑰 | 使用可提供用戶端對特定資源或服務受限制的直接存取的權杖或金鑰。 | 資料管理, 安全性 |