使用低成本無伺服器 Azure 服務即時共用位置

Azure Front Door
Azure Functions
Azure 服務匯流排

此案例描述如何建構解決方案,以使用即時服務處理網頁檢視內基礎資料的變更,而不需要重新整理頁面。 使用此案例的範例包括即時追蹤產品和商品,以及社交媒體解決方案。

架構

顯示 Azure 服務匯流排佇列、Azure Functions和 SignalR 共用即時位置資料的架構圖表。

下載這個架構的 Visio 檔案

單元

  • Azure 服務匯流排是應用程式和服務之間的高度可靠雲端傳訊服務,即使一或多個離線也是如此。
  • Azure SignalR Service可讓您輕鬆地將即時通訊新增至 Web 應用程式。
  • Azure Functions是事件驅動的無伺服器計算平臺,也可以解決複雜的協調流程問題。

替代方案

替代方法可解決此案例,包括 Pusher。 這是健全 API 的類別領導者,適用于建置可調整即時通訊功能的應用程式開發人員。

另外還有 PubNub。 PubNub 可讓您輕鬆地在應用程式中新增即時功能,而不必擔心基礎結構為何。 建立可讓使用者在行動裝置、瀏覽器、桌上型電腦和伺服器上即時互動的應用程式。

Ably 是另一個替代方法。 它提供無伺服器發佈/訂閱 (pub/sub) 傳訊,以可靠地根據您的需求進行調整。 傳訊會使用 WebSocket 在邊緣傳遞。 Ally 平臺會在 API 呼叫時,提供高可用性、彈性可調整且全域散發的即時基礎結構。

雖然 Pusher、PubNub 和 Ably 是即時傳訊的最廣泛採用平臺,但在此案例中,您會在 Azure 中執行所有作業。 我們建議 SignalR 做為進入平臺,因為它允許伺服器與用戶端之間的雙向通訊。 它也是開放原始碼工具,具有 7.9 千個 GitHub 星號和 2.2 千個 GitHub 分支。

如需詳細資訊,請參閱 GitHub 上的 SignalR 開放原始碼存放庫

實例詳細資料

在此案例中,您將瞭解如何設定即時傳訊服務,以共用食物傳遞服務交易的即時位置。 此範例也適用于嘗試為其 Web 或行動應用程式建置即時位置共用平臺的人員。

您將使用以無伺服器模式設定的 SignalR 服務,與服務匯流排所觸發的Azure Functions應用程式整合,全部都是使用 .NET Core。

潛在使用案例

這些其他使用案例具有類似的設計模式:

  • 與用戶端裝置共用即時位置
  • 將通知推送給使用者
  • 更新時程表
  • 建立聊天室

考量

這些考慮會實作 Azure Well-Architected Framework 的要素,這是一組可用來改善工作負載品質的指引原則。 如需詳細資訊,請參閱 Microsoft Azure Well-Architected Framework

以下是開發此案例時要記住的一些事項,包括如何在 ServiceBusTrigger 中設定Azure 服務匯流排連接字串中的參數:

  • 中樞:中樞可以與影片串流服務進行比較。 您可以訂閱中樞來傳送和接收訊息。
  • 目標:目標類似無線電通道。 他們包含接聽目標頻道的人,並在有新訊息時收到通知。

如果您記得 SignalR 平臺的上述兩個功能,很容易就能快速啟動並執行。

可用性、延展性與安全性

您可以遵循下兩節中所述的內容,來達成此解決方案的高可用性。

區域配對

每個 Azure 區域都會與相同地理位置內的另一個區域配對。 通常會從相同區域配對選擇區域 (例如,美國東部 2 和美國中部)。 這樣做的優點包括:

  • 如果發生廣泛的中斷,則會排定每個配對中至少一個區域的復原優先順序。
  • 已計劃的 Azure 系統更新會循序在配對區域中展開,將可能的停機時間降到最低。
  • 在大部分情況下,區域配對會位於相同的地理位置,以符合資料落地需求。
  • 不過,請確定這兩個區域都支援應用程式所需的所有 Azure 服務。 請參閱依區域提供的服務。 如需區域配對的詳細資訊,請參閱商務持續性和災害復原 (BCDR):Azure 配對的區域

Azure Front Door

顯示 Azure Front Page 如何運作,以提供行動應用程式高可用性的架構圖表。

下載這個架構的 Visio 檔案

Azure Front Door 是可調整又安全的進入點,可讓您快速傳遞全球應用程式。 當您使用 優先順序路由時,如果主要區域變成無法使用,它就會自動容錯移轉。 多區域架構可以提供比部署到單一區域更高的可用性。 如果區域中斷會影響主要區域,您可以使用 Front Door 容錯移轉到次要地區。

如果解決方案的個別子系統失敗,此架構也可以提供協助。 運用 Web 應用程式防火牆與 DDoS 保護,在邊緣阻止網路與應用程式層的攻擊。 使用 Microsoft 管理的規則集強化您的服務,並撰寫您自己的規則來自訂應用程式保護。

Front Door 可能是此系統中的失敗點。 如果服務失敗,用戶端就無法在停機期間存取您的應用程式。 檢閱 Front Door 服務等級協定 (SLA) ,並判斷單獨使用 Front Door 是否符合高可用性的商務需求。 如果沒有,請考慮新增另一個流量管理解決方案作為容錯回復。 如果 Front Door 流量管理員服務失敗,請變更您在 DNS 中的正式名稱 (CNAME) 記錄,以指向其他流量管理服務。 您必須手動執行此步驟,您的應用程式將無法使用,直到 DNS 變更傳播為止。

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化要素的概觀

假設您的企業每天有 1,000 個訂單,而且必須同時與所有訂單共用位置資料。 您部署此案例的預估 Azure 使用量每月將接近 192 美元,根據發行日期的定價。

服務類型 預估每月成本
Azure Functions 美金 119.40 美元
Azure SignalR 服務 美元48.97
Azure 服務匯流排 美元23.71
總計 美金 192.08 美元

部署此案例

Azure Functions 開發

使用 Azure Functions 和 Azure SignalR Service 建置的無伺服器即時應用程式通常需要兩個Azure Functions:

  • negotiate用戶端呼叫以取得有效SignalR Service存取權杖和服務端點 URL 的函式。
  • 傳送訊息或管理群組成員資格的一或多個函式。

SignalRFunctionApp

SignalRFunctionApp 是一個函式應用程式,可建立Azure Functions實例,並使用 SignalR 的服務匯流排觸發程式。

Negotiate.cs

此函式是由 HTTP 要求所觸發。 用戶端應用程式會使用它從 SignalR 服務取得權杖,用戶端可用來訂閱中樞。 此函式應該命名為 negotiate 。 如需詳細資訊,請參閱使用 Azure SignalR Service Azure Functions開發和設定

Message.cs

此函式是由服務匯流排觸發程式所觸發。 其已與 SignalR 服務繫結。 可從佇列中提取訊息,並將訊息傳遞到 SignalR 中樞。

Instructions

開始之前:

  • 請確定您已在 Azure 上布建服務匯流排佇列。
  • 請確定您已在 Azure 上的無伺服器模式中布建 SignalR 服務。
  1. local.settings.json 檔案中,輸入您的連接字串 (服務匯流排和 SignalR) 。
  2. 在 CORS (跨原始來源資源分享) 中,輸入用戶端應用程式 (SignalR 用戶端) 的 URL。 如需最新的語法,請參閱使用 Azure SignalR Service 來Azure Functions開發和設定
  3. Message.cs 檔案中的服務匯流排觸發程式中,輸入您的服務匯流排佇列名稱。

現在,讓我們設定用戶端應用程式來測試它。 首先,從 解決方案架構 GitHub 頁面擷取範例來源。

SignalR 用戶端

這是簡單的 .NET Core Web 應用程式,可訂閱 SignalRFunctionApp 所建立的中樞。 它會顯示即時在服務匯流排佇列上收到的訊息。 雖然您可以使用 SignalRFunctionApp 來與行動用戶端搭配使用,但讓我們在此存放庫中使用此案例的 Web 用戶端。

指示

  1. 請確定 SignalRFunctionApp 正在執行。

  2. 複製交涉函式所產生的 URL。 看起來會像這樣: http://localhost:7071/api/

  3. chat.js 檔案 signalR.HubConnectionBuilder().withUrl("YOUR_URL_HERE").build(); 中貼上 URL。

  4. 執行應用程式。

    當 Web 用戶端成功訂閱 SignalR 中樞時,狀態會連線。

SendToQueue.js

此node.js腳本會將訊息推送至服務匯流排,以便測試您剛完成的部署。

Instructions

  1. 安裝節點 Azure 服務匯流排模組 (@azure/service-bus)。

  2. 在指令碼中輸入您的連接字串和佇列名稱。

  3. 執行指令碼。

後續步驟

您可以將此案例納入生產環境。 不過,請確定您的 Azure 服務已設定為調整規模。 例如,您的 Azure 服務匯流排應該設定為標準或進階方案。

您可以直接將程式碼從 Visual Studio 部署到 Azure Functions。 若要瞭解如何從 Visual Studio 將程式碼發佈至Azure Functions,請遵循您製作軟體指南的方式

請參閱如何在 Azure Functions 中使用Azure 服務匯流排系結。 Azure Functions支援服務匯流排佇列和主題的觸發程式和輸出系結。

瞭解如何使用 Azure Functions 中的SignalR Service系結,向連線至Azure SignalR Service的用戶端驗證和傳送即時訊息。 Azure Functions 支援 SignalR Service 的輸入和輸出繫結。