Azure SignalR 中的異地複寫

尋求本機存在或要求強固故障轉移系統的公司通常會選擇跨多個 Azure 區域部署服務。 在 Azure SignalR 中整合異地複寫之後,管理多區域案例會變得相當容易。

使用異地複寫的優點

  • 更能復原區域中斷: 如果發生區域性中斷,Azure SignalR DNS 將會解析為其他區域中狀況良好的複本。
  • 跨區域通訊。 不同的複本可以彼此通訊,就像是相同的實例一樣。
  • 增強的網路速度: 異地分散的用戶端會連線到最近的複本。 這些複本會透過 Azure 全球網路骨幹進行通訊,確保網路快速且穩定。
  • 共用組態。 所有復本都會保留主要 Azure SignalR Service 資源的組態。

必要條件

  • 進階版 層中的 Azure SignalR 服務。

使用案例範例

Contoso 是一家社交媒體公司,其客戶群遍佈美國和加拿大。 為了為這些客戶提供服務,並讓他們彼此通訊,Contoso 在美國中部執行其服務。 Azure SignalR Service 可用來處理用戶連線,並協助使用者之間的通訊。 Contoso 的終端使用者大多是電話使用者。 由於地理距離很長,加拿大的終端使用者可能會遇到高延遲和網路品質不佳。

使用一個 Azure SignalR 實例來處理來自兩個國家的流量圖表。

在異地復寫功能問世之前,Contoso 可以在加拿大中部設定另一個 Azure SignalR 服務,為加拿大使用者提供服務。 藉由設定更接近地理位置的 Azure SignalR 服務,終端用戶現在擁有更好的網路品質和較低的延遲。

不過,管理多個 Azure SignalR Services 會帶來一些挑戰:

  1. 需要跨區域通訊機制,才能啟用加拿大和美國使用者之間的交談。
  2. 開發小組必須管理兩個不同的 Azure SignalR Services,每個服務都有不同的網域和 連接字串。
  3. 如果發生區域性中斷,則必須將流量切換至另一個區域。

使用兩個 Azure SignalR 實例來處理來自兩個國家的流量圖表。

利用異地復寫

有了新的異地復寫功能,Contoso 現在可以在加拿大中部建立複本,有效地克服上述障礙。

使用一個具有複本的 Azure SignalR 實例來處理來自兩個國家的流量圖表。

建立 SignalR 複本

若要建立複本,請流覽至 Azure 入口網站 上的 [SignalR 本] 刀鋒視窗,然後按兩下 [新增] 以建立複本。 它會在建立時自動啟用。

在入口網站上建立 Azure SignalR 複本的螢幕快照。

建立之後,您可以按一下該複本名稱以在入口網站上檢視/編輯您的複本。

Azure SignalR 複本資源概觀刀鋒視窗的螢幕快照。

定價和資源單位

每個複本都有自己的unitautoscale settings

復本是 Azure SignalR Service 進階版 層的功能。 每個複本都會根據自己的單位和輸出流量個別計費。 免費的訊息配額也會個別計算。

在上述範例中,Contoso 已在加拿大中部新增了一個複本。 Contoso 會根據複本在 Premium 價格中的單位和訊息來支付加拿大中部的複本費用。

會針對跨區域輸出流量來收取輸出費用。 如果訊息跨複本傳輸在傳輸後成功傳送至用戶端或伺服器,則該訊息會按輸出訊息計費。

刪除複本

為 Azure SignalR 服務建立複本之後,如果不再需要複本,您可以隨時將其刪除。

若要在 Azure 入口網站中刪除複本:

  1. 流覽至您的 Azure SignalR 服務,然後選取 [ 複本] 刀鋒視窗。 按一下您要刪除的複本。
  2. 按一下 [複本概觀] 刀鋒視窗上的 [刪除] 按鈕。

瞭解 SignalR 複本的運作方式

下圖提供 SignalR 複本功能的簡短圖例:

Azure SignalR 複本的架構圖表。

  1. 用戶端會與應用程式伺服器交涉,並接收重新導向至 Azure SignalR 服務。 然後,它會解析 SignalR 服務的完整功能變數名稱 (FQDN) — contoso.service.signalr.net。 此 FQDN 指向 流量管理員,它會傳回最接近區域 SignalR 實例的標準名稱 (CNAME)。
  2. 使用此 CNAME 時,用戶端會建立與區域實例 (Replica) 的連線。
  3. 兩個複本會彼此同步資料。 如有必要,傳送至一個複本的訊息會傳輸到其他複本。
  4. 如果複本失敗,流量管理員 (TM) 進行的健全狀況檢查,TM 會將其網域解析程式排除失敗實例的端點。 如需詳細資料,請參閱下面的復原和災害復原

注意

  • 在數據平面中,主要 Azure SignalR 資源的運作方式與其復本相同

復原和災害復原

Azure SignalR Service 會利用流量管理員來檢查其復本的健康情況檢查和 DNS 解析。 在正常情況下,當所有複本都正常運作時,用戶端會被導向到最接近的複本。 例如:

  • 靠近 eastus 的用戶端會被導向到位於 eastus 的複本。
  • 同樣地,靠近 westus 的用戶端會被導向到位於 westus 的複本。

如果 eastus 發生區域性中斷情況 (如下圖中所示),則流量管理員會偵測到該區域的健康情況檢查失敗。 然後,此失效複本的 DNS 會從流量管理員的 DNS 解析結果中排除。 在 DNS 存留時間 (TTL) 持續時間 (設定為 90 秒) 之後,eastus 的用戶端會被重新導向來與 westus 的複本連線。

Azure SignalR 複本故障轉移的圖表。

一旦 eastus 的問題被解決且該區域重新上線之後,健康情況檢查就會成功。 然後,eastus 的用戶端會再次被導向到其所在區域的複本。 此轉換是平順的,因為在關閉現有的連線之前,連線的用戶端都不會受到影響。

Azure SignalR 複本故障轉移復原的圖表。

此容錯移轉和復原程序是自動的,不需要手動介入。

針對 伺服器連線,故障轉移和復原的運作方式與用戶端連線的運作方式相同。

注意

  • 此故障轉移機制適用於 Azure SignalR 服務。 應用程式伺服器的區域中斷超出本檔的範圍。

停用或啟用複本端點

設定複本時,您可以選擇啟用或停用其端點。 如果停用,則主要 FQDN 的 DNS 解析不會包含複本,因此不會將流量導向至該複本。

Azure SignalR 複本端點設定的圖表。

您也可以在建立端點之後啟用或停用該端點。 在主要資源的 [複本] 刀鋒視窗上,按一下複本右側的省略符號按鈕,然後選擇 [啟用端點] 或 [停用端點]

Azure SignalR 複本端點修改的圖表。

刪除複寫之前,請考慮先停用其端點。 一段時間之後,現有的連線都將中斷。 由於沒有新的連線到來,因此複寫最後會變成閑置的狀態。 這可確保順暢的刪除過程。

此功能對於解決區域問題也很有幫助。

注意

  • 由於 DNS 快取,DNS 更新可能需要幾分鐘的時間才會生效。
  • 現有的連線在中斷之前不會受到影響。

新增複本之後對效能的影響

啟用複本之後,用戶端自然會根據其地理位置進行分散。 雖然 SignalR 負責跨這些復本同步處理數據,但您會很高興知道伺服器負載的相關額外負荷對於最常見的使用案例而言最低。

具體而言,如果您的應用程式通常是向較大的群組 (大小 > 10) 或單一連線進行訊息廣播,則對同步效能的影響幾乎可以忽略不計。 如果您要傳訊小型群組(大小 < 10)或個別使用者,您可能會注意到更多同步處理額外負荷。

為了確保有效的容錯移轉管理作業,建議您設定每個複本的單位大小以處理所有的流量。 或者,您也可以啟用自動調整功能來管理這項作業。

如需效能評估的相關資訊,請參閱效能