Azure Web PubSub Service 是一項完全受管理的即時訊息服務,透過 WebSocket 協定實現伺服器與用戶端之間的雙向通訊。 單一 Web PubSub 資源可擴展至一百萬個同時 WebSocket 連線。 該服務支援多種訊息模式,包括伺服器對用戶端廣播、指定群組訊息、用戶端間發佈/訂閱,以及 AI 令牌串流。
當您使用 Azure 時, 可靠性是共同的責任。 Microsoft 提供一系列功能以支援韌性與復原。 您有責任瞭解這些功能在您使用的所有服務中如何運作,並選取符合業務目標和正常運作時間目標所需的功能。
本文說明如何讓 Azure Web PubSub 服務具備韌性,能應對各種潛在的中斷與問題,包括暫態故障、可用性區域故障及區域性故障。 同時說明服務如何處理維護,並強調 Azure Web PubSub 服務水準協議(SLA)的關鍵資訊。
可靠性的生產部署建議
對於生產工作負載,請遵循以下建議:
- 使用高級等級。 高級層在支援可用性區域的地區中,對於可用性區域失效具備抗性,並允許您設定地理複寫。
- 在建置客戶端應用程式時,請使用 Azure Web PubSub 用戶端 SDK,或依照暫時故障處理指引,安全地重新連線。 區域故障轉移、區故障轉移和暫時故障都會斷開有效連線。
- 啟用地理複製以防範區域性故障。 每個副本的大小要有足夠的單位來處理故障轉移事件中預期的全部流量負載。
可靠性架構概觀
本節說明服務運作中從可靠性角度來看最為重要的部分。 本節介紹邏輯架構,包含你部署和使用的部分資源與功能。 它還討論了物理架構,其中提供了有關服務如何在幕後工作的詳細信息。
邏輯架構
你建立的資源是 Web PubSub 資源。 你用數量的 單元來配置一個資源,這代表資源的容量,包括最大同時連線數。 欲了解更多資訊,請參閱 Azure Web PubSub 服務績效指南。
Web PubSub 資源具有一個全球唯一的端點,類似於 contoso.webpubsub.azure.com。 用戶端會建立 WebSocket 連線至此端點。 應用伺服器連接至同一端點以發送訊息並接收用戶端的事件。
欲了解更多資訊,請參閱 Azure Web PubSub 服務內部結構。
實體架構
Azure Web PubSub 服務管理 WebSocket 連線狀態與訊息路由,跨越一組計算資源。 Microsoft 管理底層基礎設施。 你不會直接看到或互動服務所使用的個別虛擬機或其他基礎設施元件。
對瞬態故障的彈性
暫時性錯誤是元件中的短暫間歇性失敗。 它們經常出現在雲端等分散式環境中,而且是作業的一般部分。 暫時性錯誤會在短時間內自行修正。 請務必確保您的應用程式能妥善處理暫時性錯誤,通常透過重試受影響的請求來進行。
所有雲端託管應用程式在與任何雲端託管的 API、資料庫及其他元件通訊時,都應遵循 Azure 暫態故障處理指引。 如需詳細資訊,請參閱 處理暫時性錯誤的建議。
WebSocket 是一種長壽的連線協定。 短暫的網路事件、後端基礎設施重啟以及服務維護操作都可能讓連線中斷。 基本的重新連線會恢復連線,但若沒有額外邏輯,客戶端會遺失在故障期間正在執行或排隊的訊息。
Azure Web PubSub Service 透過可靠的子通訊協定來解決這個問題,這些子協定位於原始 WebSocket 連線之上。 子協定會追蹤訊息序列與連線狀態,當連線中斷時,用戶端會與服務重新協商,並從中斷處繼續。
通常連線器斷線再重新連線後不會有訊息遺失。 然而,有些情況下可能會發生訊息遺失。 例如,如果用戶端斷線超過一分鐘,然後以相同的連線 ID 重新連線,重連操作會顯示失敗狀態,表示可能發生訊息遺失。
為了善用可靠的子協議,請遵循以下建議:
如果可能,請使用 Azure Web PubSub 客戶端 SDK。 SDK 會自動實作可靠的子協定。 不需要進行其他組態設定。 欲了解更多資訊,請參閱:
如果你不能用 SDK,就直接在你的 WebSocket 用戶端程式碼中實作一個可靠的子協定 。 完整規範與實作指引請參閱 「建立可靠的 WebSocket 用戶端」。
對可用性區域故障的抵抗力
可用性區域 是 Azure 區域內物理上獨立的資料中心群組。 當某個區域發生故障時,服務可以切換至其他剩餘的區域。
使用 Premium 層級時,Azure Web PubSub 服務支援區域冗餘部署。 當你在支援可用性區域的區域建立或升級高級版 Web PubSub 資源時,區域冗餘會自動啟用。 該服務將基礎設施分布於區域內多個可用區域。 若某區域失效,服務會將流量導向健康區域內的基礎設施。
要求
區域支援: 在大多數同時符合上述條件的地區,區域冗餘都被支援:
- Azure Web PubSub 服務可用。 有關該服務可用地區的列表,請參見「 按區域分類的產品可用性」。
- 該區域支援可用區域。 有關可用區域列表,請參見 Azure regions list。
不過,Japan West 目前不支援 Azure Web PubSub 的區域冗餘。
等級: 區域冗餘功能在高級版中可用。
Cost
區域冗餘不會增加費用,而且您支付的是 Premium 層級的標準費率。 欲了解更多資訊,請參閱Azure Web PubSub服務價格。
設定可用性區域支援
區域冗餘只需選擇 Premium 層,無需進行其他配置。 這兩種情況下都會自動啟用:
建立一個新的區域冗餘網路 PubSub 資源。 建立資源時選擇一個高級等級的 SKU。 欲了解更多資訊,請參閱 Create a Azure Web PubSub resource。
將現有資源升級為高級等級。 區域冗餘會在你將現有資源升級為高級等級 SKU 時自動啟用。 從標準升級到高級不會導致服務中斷。 欲了解更多資訊,請參見 擴展 Azure Web PubSub 服務實例。
所有區域都狀況良好時的行為
本節說明當您設定 Azure Web PubSub 資源以區域冗餘且所有可用區域皆正常運作時,可以預期的情況。
跨區操作: Azure Web PubSub服務自動管理連線與操作在可用區域間的分布。 多個區域的基礎設施以主動-主動模式處理流量。 你不需要設定任何東西就能利用這種行為。 該服務會自動在實例間路由訊息,因此用戶端在一個區域發送的訊息會被送達到連接在其他區域的用戶端。
跨區資料複製: Azure Web PubSub 服務不會持久化客戶資料。 該服務會維護會話中繼資料,例如連線狀態與主動連線的訊息序列資訊。 這些元資料會同步複製於不同可用區域。
區域失敗期間的行為
本節說明當您設定 Azure Web PubSub 資源以進行區域冗餘,且其中一個可用區域發生故障時,會遇到的情況。
- 偵測與回應: Azure Web PubSub服務平台負責偵測可用性區域內的故障。 你不需要採取任何動作來啟動區域故障轉移。
- 通知:Microsoft 不會在區域關閉時自動通知您。 不過,你可以使用 Azure 資源健康狀態 監控單一資源的健康狀況,並設定資源 健康警示 來通知你問題。 你也可以使用 Azure 服務健康狀態 來了解整體服務的健康狀況,包括任何區域故障,並設定 服務健康警示 來通知你問題。
動態請求: 在區域故障時,受影響區域內與基礎設施的主動 WebSocket 連線會被中斷。 若客戶適當處理 短暫故障 ,例如短時間後重新連線,通常可避免重大影響。
預期資料遺失: Azure Web PubSub 服務不會持久化訊息,因此區域故障不會導致Azure Web PubSub服務內的資料遺失。 然而,在區域關閉事件期間,任何正在進行的連線都會被中斷,因此正在傳輸的資料可能會遺失。
如果發佈者使用 Azure Web PubSub 用戶端 SDK 或實作可靠的子協定,服務接收訊息後會被確認。 當訊息被確認時,會被複製到所有可用區域,因此發佈者的區域失效不會導致訊息遺失。 然而,如果訂閱者在訊息被丟棄前沒有收到,可能就無法接收到訊息。
預期的停機時間: 中斷的主動連線重新連線通常需要幾秒鐘。 實施重新連接邏輯的客戶端體驗的中斷極少。
Redistribution: Azure Web PubSub 服務偵測區域遺失,並自動將流量重新分配至健康區域。 您不需要採取任何動作。
區域復原
當可用性區域恢復時,Azure Web PubSub Service 會自動將其重新整合到主動服務拓撲中。 你不需要採取任何行動來恢復區域。
區域恢復後,可能會將新連線導向該區域內的基礎設施。 現有的連接不會被移至已恢復的區域,而是隨著現有連接逐漸斷開與重新連接,這些連接會逐漸重新平衡。 跨區域連線不平衡不會影響你的工作負載。
測試區域失敗
Azure Web PubSub Service 會自動管理區域冗餘高級層資源的流量路由、故障轉移及區域恢復。 您不需要開始任何事情。 由於區域冗餘是完全管理的,你不需要驗證可用性區的故障流程。
對區域範圍故障的復原能力
Azure Web PubSub 服務係單一區域服務。 若該區域無法使用,您的 Web PubSub 資源也將無法使用。
為了保護你的應用程式免於區域性故障,你可以使用 地理複製功能,這功能在高級版中提供。 或者,你也可以在不同區域部署多個 Web PubSub 資源,建立自訂的多區域解決方案。
異地複寫
地理複製允許您在 Azure 的其他區域新增 Web PubSub 資源的 副本。 所有副本共用單一端點(contoso.webpubsub.azure.com)。 在這個端點背後,Azure 流量管理員 使用 DNS 路由將每個用戶端導向最近的健康區域副本。 若區域失敗,流量管理器會透過健康檢查偵測故障,並停止將用戶端導向該副本。 新的用戶端連線會自動路由到最近的健康副本。
你建立 Web PubSub 資源的區域稱為 主要區域,而它的副本是 主要副本。 主要資源的控制平面負責管理你 Web PubSub 資源的設定。
要求
- Region support: 你可以在任何有 Azure Web PubSub 服務的地區新增副本。
- 等級: 你必須使用 Premium 方案才能啟用地理複製。
- 複製上限: 每個主要的 Web PubSub 資源最多支援八個副本。
考量
配置繼承: 副本會繼承大部分主要資源的設定設定。 某些設定必須在每個副本上分別設定。 未繼承的設定完整清單請參見 Azure Web PubSub 中的 Geo-replication。
配置變更: 主要控制平面位於主要區域,負責處理對 Web PubSub 資源的任何設定變更。 若主要控制平面無法使用,您將無法更新資源配置,但現有副本仍可持續處理資料流量,且不中斷。
Cost
每個副本依其自身的單位數量和外發訊息量分別計費。 如果訊息在副本間傳輸,然後送達到其他區域的客戶端或伺服器,則會被視為外發訊息。 欲了解更多資訊,請參閱Azure Web PubSub服務價格。
設定異地複寫
若要新增或移除 Web PubSub 資源的副本,請參見 Azure Web PubSub 中的地理複寫。
容量規劃和管理
每個副本會獨立處理網路流量。 在區域故障轉移期間,失敗區域的用戶端會重新連接到最近的健康複本。 為了確保存活的複本有足夠的容量來吸收額外負載,應配置每個複本具備能處理整體預期工作負載流量的單元,而不僅僅是它通常服務的部分。
或者,在每個複製品上啟用自動縮放功能,讓單位能因應較高負載自動擴展。 當次要副本無法使用時,自動擴展仍然可以運作,但如果主控制平面無法使用,自動擴展將無法運作。 欲了解更多關於自動縮放的資訊,請參見 自動縮放 Azure Web PubSub 服務單元。
關於過度配置作為策略的一般指引,請參見 「以過度配置管理容量」。
當所有區域都正常時的行為
本節說明當您設定 Azure Web PubSub Service 進行地理複製且所有區域都能正常運作時,會遇到什麼情況。
跨區域操作: Azure 流量管理員會將每個用戶端路由到最近的健康區域副本。 不同地理區域的用戶端可能會連接到不同的複本。 Web PubSub 服務能在副本間同步訊息,使連接到任何副本的用戶端都能彼此通訊。
跨區域資料複寫: 當訊息發送到副本時,服務會同步將該訊息傳送到其他副本,讓連接在其他地方的用戶端也能接收。 對於大多數常見的訊息模式,例如向大型群組廣播或向單一連線發送消息,同步開銷極低。 向小群組(少於10人)發送訊息可能會產生稍微較高的同步開銷。
Azure Web PubSub 服務不會持久化訊息;只有主動傳遞會同步於多個副本之間。
區域失敗期間的行為
本節說明當您設定 Azure Web PubSub Service 進行地理複製時,當其中一個副本區域發生故障時,會發生什麼情況。
- 偵測與回應: Web PubSub 服務負責偵測某區域的故障,並自動將輸入流量重新導向你設定的其他區域中的副本。
通知:Microsoft 不會自動通知你區域故障。 但是:
你可以使用 Azure 資源健康狀態 來監控單一資源的健康狀況,並且可以設定 資源健康狀態 警報來通知你問題。
你可以使用 Azure 服務健康狀態 來了解服務整體健康狀況,包括任何區域故障,並設定 Service Health alerts 來通知你問題。
目前的請求: 在失敗區域中,與副本的主動 WebSocket 連線會被中斷。 用戶端必須在副本故障轉移後重新連線。
預期資料遺失: Azure Web PubSub 服務不會持久化訊息。 在故障發生時,正在傳送至失敗區域用戶端的訊息可能會遺失。 由於服務不儲存客戶資料,預期不會有持續性資料遺失。
預期停機時間: Azure 流量管理員會對每個複製品進行健康檢查。 當區域故障導致複本健康檢查失敗時,流量管理器會將該複本的端點從 DNS 解析結果中移除。 移除端點後,必須經過 90 秒的 DNS TTL 才能讓用戶端看到更新的 DNS 紀錄。 整體來說,轉換過程通常只需幾分鐘。 設計良好的客戶端若實作重連邏輯,則可在重新連接健康副本後恢復正常運作。
如果主要控制平面無法使用,你就無法更改 Web PubSub 資源或其副本的設定。 然而,WebSocket 連線在健康的副本中仍然正常運作。
Redistribution: Azure 流量管理員 將收到的請求導向狀態良好的副本。 然而,如果用戶端在 Azure 流量管理員 偵測到副本故障轉移且更新後的 DNS 條目尚未傳入用戶端前嘗試重新連線,那麼用戶端的重新連線嘗試可能會持續鎖定無法使用的區域,並可能失敗。
DNS 更新完成後,重新連接的用戶端會自動被路由到最近的健康副本。
區域復原
當失敗的區域恢復時,流量管理員健康檢查會偵測還原的副本,並再次將其端點納入 DNS 解析中。 目前連接其他副本的用戶端不會受影響,且會一直連線直到斷線。 當恢復區域是最近的健康複本時,新的連線會再次路由到該區域的副本。
區域故障測試
為了模擬區域故障轉移並測試客戶端應用程式的重新連線行為,你可以停用副本的端點。 此操作會使流量管理員停止將流量路由至該副本,讓您能觀察當客戶端連接的副本無法使用時的行為。 詳細步驟請參閱 停用或啟用複本端點。
客製化多區域韌性解決方案
如果你需要跨區域韌性但不使用地理複製,可以在多個區域部署和管理獨立的 Web PubSub 資源,並在應用伺服器中實作自己的故障轉移邏輯。 此方法比地理複製更複雜,且不支援客戶端到客戶端連線的不中斷故障轉移。 如需詳細架構概述、故障轉移模式及測試指引,請參閱Azure Web PubSub服務中的韌性與災難復原。
備份與還原
Azure Web PubSub Service 是一個無狀態的訊息服務。 它無法持久保存客戶訊息,也沒有備份或還原功能。
為了保護你的資源配置,請用基礎設施作為程式碼(例如 Bicep 或 ARM 範本)定義你的 Web PubSub 資源,並將這些定義儲存在原始碼控制中。 如果你需要重建資源,就從儲存的設定重新部署它。
服務維護的韌性
Microsoft 定期執行服務更新及其他維護。 Azure 平台自動處理這些活動,確保維護過程對您來說無縫且透明。 除非您收到透過 Azure 服務健康狀態 計畫維護 的通知,否則維護期間將不會有停機。
服務等級協定
Azure 服務的服務層級協議(SLA)描述了每項服務的預期可用性,以及您的解決方案必須符合的條件,以達成該可用性預期。 欲了解更多資訊,請參閱線上服務的服務等級協議。