建立協助程式服務,代表取用者服務或應用程式傳送網路要求。 大使服務可以視為與用戶端共置的跨進程 Proxy。
此模式可用於卸除常見的用戶端連線工作,例如監視、記錄、路由、安全性(例如 TLS),以及 語言無關的復原模式 。 它通常會與舊版應用程式或其他難以修改的應用程式搭配使用,以擴充其網路功能。 它也可以讓特製化小組實作這些功能。
內容和問題
復原雲端式應用程式需要諸如斷路器、路由、計量和監視等功能,以及進行網路相關設定更新的能力。 更新舊版應用程式或現有程式代碼連結庫以新增這些功能可能很困難或不可能,因為程式代碼已不再維護或無法由開發小組輕鬆修改。
網路呼叫可能也需要大量的連線、驗證和授權設定。 如果這些呼叫用於多個應用程式,使用多種語言和架構建置,則必須針對每個實例設定呼叫。 此外,網路和安全性功能可能需要由貴組織內的中央小組管理。 使用大型程式代碼基底,小組可能會有風險地更新他們不熟悉的應用程式程序代碼。
解決方案
將客戶端架構和連結庫放入外部進程,做為應用程式與外部服務之間的 Proxy。 在與應用程式相同的主機環境中部署 Proxy,以允許控制路由、復原、安全性功能,以及避免任何與主機相關的存取限制。 您也可以使用大使模式來標準化和擴充檢測。 Proxy 可以監視效能計量,例如延遲或資源使用量,而且此監視會在與應用程式相同的主機環境中進行。
卸除至大使的功能可以獨立於應用程式管理。 您可以更新和修改大使,而不干擾應用程式的舊版功能。 它也允許個別、專門的小組實作和維護已移至大使的安全性、網路或驗證功能。
大使服務可以部署為 側車 ,以伴隨取用應用程式或服務的生命週期。 或者,如果大使是由一般主機上的多個個別進程共用,它可以部署為精靈或 Windows 服務。 如果取用服務已容器化,則大使應建立為相同主機上的個別容器,並設定適當的連結以進行通訊。
問題和考慮
- Proxy 會增加一些延遲額外負荷。 請考慮應用程式直接叫用的用戶端連結庫是否為較佳的方法。
- 請考慮在 Proxy 中包含一般化功能的可能影響。 例如,大使可以處理重試,但除非所有作業都是等冪的,否則可能不安全。
- 請考慮一種機制,以允許用戶端將某些內容傳遞至 Proxy,並傳回用戶端。 例如,包含 HTTP 要求標頭以退出退出重試,或指定要重試的次數上限。
- 請考慮您將如何封裝及部署 Proxy。
- 請考慮針對所有用戶端使用單一共享實例,還是針對每個用戶端使用實例。
使用此模式的時機
當您:
- 需要為多種語言或架構建置一組常見的用戶端連線功能。
- 需要卸除跨領域用戶端連線問題給基礎結構開發人員或其他更特製化的小組。
- 需要支援舊版應用程式中的雲端或叢集連線需求,或難以修改的應用程式。
此模式可能不適合:
- 當網路要求延遲很重要時。 Proxy 引進了一些額外負荷,雖然最少,但在某些情況下,這可能會影響應用程式。
- 當單一語言取用用戶端連線功能時。 在此情況下,較佳的選項可能是以套件的形式散發給開發小組的用戶端連結庫。
- 當連線功能無法一般化,且需要與用戶端應用程式進行更深入的整合時。
工作負載設計
架構設計人員應該評估大使模式如何用於其工作負載的設計,以解決 Azure 架構架構支柱中涵蓋的目標和原則。 例如:
要素 | 此模式如何支援支柱目標 |
---|---|
可靠性設計決策可協助工作負載復原到故障,並確保它會在發生失敗后復原到完全正常運作的狀態。 | 此模式所促進的網路通訊中繼點提供將可靠性模式新增至網路通訊的機會,例如重試或緩衝。 - RE:07 自我保護 |
安全性 設計決策有助於確保 工作負載數據和系統的機密性、 完整性和 可用性 。 | 此模式提供增強客戶端無法直接處理之網路通訊安全性的機會。 - SE:06 網路控制 - SE:07 加密 |
如同任何設計決策,請考慮對其他可能以此模式導入之目標的任何取捨。
範例
下圖顯示透過大使 Proxy 向遠端服務提出要求的應用程式。 大使會提供路由、斷路器和記錄。 它會呼叫遠端服務,然後傳回對用戶端應用程式的回應: