本文提供一個高可用性解決方案,適用於處理需要在特定時間範圍內存取大量數據的 Web 應用程式。 解決方案牽涉到使用 Azure Cosmos DB 作為主要資料存放區,並使用 Azure Cosmos DB 變更摘要將數據復寫到低成本的次要記憶體。 當指定的時間週期到期時,會使用 Azure Functions 從 Azure Cosmos DB 刪除數據。 次要記憶體中的數據會保留較長的時間,以啟用其他解決方案以進行稽核和分析。 解決方案也會藉由將數據復寫至不同的數據服務,以提供高持久性。
架構
下載此架構的 Visio 檔案。
資料流程
- 用戶端會使用 Microsoft Entra 識別碼進行驗證,並獲授與裝載於 Azure App 服務 上的 Web 應用程式的存取權。
- Azure Front Door 是防火牆和第 7 層負載平衡器,會在發生區域性中斷時,將使用者流量切換至待命區域。
- App Service 會裝載網站和 RESTful Web API。 瀏覽器客戶端會執行使用 API 的異步 JavaScript 和 XML (AJAX) 應用程式。
- Web API 會將責任委派給函式所裝載的程式代碼,以處理背景工作。 工作會排入 Azure 佇列記憶體佇列。
- 佇列訊息會觸發函式,以執行背景工作。
- Azure Cache for Redis 會快取函式的資料庫數據。 藉由使用快取,解決方案會卸除資料庫活動,並加速函式應用程式和 Web 應用程式。
- Azure Cosmos DB 會保存最近產生的數據。
- Azure Cosmos DB 會發出可用來復寫變更的變更摘要。
- 函式應用程式會讀取變更摘要,並將變更複寫至 Azure 資料表記憶體數據表。 另一個函式應用程式會定期從 Azure Cosmos DB 移除過期的數據。
- 數據表記憶體提供低成本的記憶體。
元件
- Azure Microsoft Entra ID 是可與內部部署目錄同步處理的身分識別和存取管理服務。
- Azure DNS 是 DNS 網域的高可用性裝載服務,可為應用程式提供快速 DNS 查詢和 DNS 記錄的快速更新。 管理 Azure DNS 就像管理其他 Azure 服務,並使用相同的認證、API、工具和計費。
- Azure Front Door 是具有立即故障轉移的安全內容傳遞網路 (CDN) 和負載平衡器。 它會在接近使用者的邊緣運作,加速內容傳遞,同時保護應用程式、API 和網站免於網路威脅。
- App Service 是完全受控的服務,可用於建置、部署及調整 Web 應用程式。 您可以使用 .NET、.NET Core、Node.js、Java、Python 或 PHP 建置應用程式。 應用程式可以在容器中或在 Windows 或 Linux 上執行。 在大型主機移轉中,前端畫面或Web介面可以編碼為 HTTP 型 REST API。 它們可以隔離,而且可以無狀態來協調微服務型系統。 如需 Web API 的詳細資訊,請參閱 RESTful Web API 設計。
- 函式 提供一個環境,可用來執行稱為函式的小型程序代碼,而不需要建立應用程式基礎結構。 您可以使用它來處理大量數據、整合系統、使用物聯網 (IoT) 裝置,以及建置簡單的 API 和微服務。 使用微服務,您可以建立連線至 Azure 服務且一律為最新狀態的伺服器。
- Azure 儲存體是一套適用於資料、應用程式和工作負載的大規模擴展且安全性高的雲端服務。 它包含 Azure 檔案儲存體、數據表記憶體和佇列記憶體。 Azure 檔案儲存體 通常是移轉大型主機工作負載的有效工具。
- 佇列記憶體 為大型工作負載提供簡單、符合成本效益且持久的消息佇列。
- 數據表記憶體 是 NoSQL 索引鍵/值存放區,可用於快速開發,其使用大量半結構化數據集。 數據表是無架構的,而且會隨著需求變更而隨時調整。 對於許多類型的應用程式來說,存取是快速且符合成本效益的,而且通常成本低於其他類型的密鑰記憶體。
- Azure Cache for Redis 是完全受控的記憶體內部快取服務和訊息代理程式,可用於在計算資源之間共用數據和狀態。 它同時包含開放原始碼 Redis 和 Redis Labs 的商業產品作為受控服務。 您可以藉由設計高輸送量在線事務處理應用程式,藉此改善高輸送量在線事務處理應用程式的效能,並利用記憶體內部數據存放區,例如 Azure Cache for Redis。
- Azure Cosmos DB 是全域散發的多模型資料庫,來自 Microsoft,可讓您的解決方案彈性且獨立地跨任意數目的地理區域調整輸送量和記憶體。 它提供輸送量、延遲、可用性和一致性保證,並提供完整的服務等級協定(SLA)。
替代項目
- Azure 流量管理員 會根據您選擇的流量路由方法,將傳入 DNS 要求導向到全球 Azure 區域。 它也提供自動故障轉移和效能路由。
- Azure 內容傳遞網路 快取邊緣伺服器中的靜態內容以進行快速回應,並使用網路優化來改善動態內容的回應。 當使用者基底是全域時,內容傳遞網路 特別有用。
- Azure Container Apps 是完全受控、無伺服器容器服務,可用來大規模建置及部署新式應用程式。
- Azure Kubernetes Service (AKS) 是完全受控 Kubernetes 服務,可用來部署和管理容器化應用程式。 您可以使用它來實作微服務架構,其元件會視需要獨立調整。
- Azure 容器執行個體 提供快速且簡單的方法來執行工作,而不需要管理基礎結構。 在開發期間,或用於執行未排程的工作。
- Azure 服務匯流排 是一種可靠的雲端傳訊服務,可用於簡單的混合式整合。 此架構中可以使用它,而不是佇列記憶體。 如需詳細資訊,請參閱記憶體佇列 服務匯流排 - 比較和對比。
案例詳細資料
此解決方案會使用 Azure Cosmos DB 來儲存 Web 應用程式所使用的大量數據。 處理大量數據的 Web 應用程式受益於 Azure Cosmos DB 彈性且獨立調整輸送量和記憶體的能力。
另一個主要解決方案元件是 Azure Cosmos DB 變更摘要。 對資料庫進行變更時,變更摘要數據流會傳送至事件驅動函式觸發程式。 然後,函式會執行並復寫數據表記憶體數據表的變更,以提供低成本的記憶體解決方案。
Web 應用程式只需要有限的時間數據。 解決方案會利用這個事實來進一步降低成本。 具體而言,另一個函式會定期執行並刪除 Azure Cosmos DB 的過期數據。 除了觸發之外,函式也可以排程在設定時間執行。
潛在使用案例
此架構適用於下列任何應用程式:
- 使用大量數據。
- 需要數據一律可供使用。
- 使用過期的數據。
範例包括下列應用程式:
- 透過實體位置的實時數據摘要和感測器,個人化客戶體驗並推動參與。
- 追蹤客戶消費習慣和購物行為。
- 收集車輛位置、效能和駕駛行為的數據,以提高效率和安全性,以追蹤車輛車隊。
- 預測天氣。
- 提供智慧流量系統或實作智慧流量系統,或使用智慧技術來監視流量。
- 分析製造IoT數據。
- 顯示智慧型手機資料或使用智慧型技術來監視計量數據。
考量
這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構。
- 當您實作和維護此解決方案時,會產生額外的成本。
- 針對複寫使用變更摘要需要比在核心應用程式中執行複寫更少的程式代碼維護。
- 您需要移轉現有的數據。 移轉程式需要臨機操作腳本或例程,才能將舊數據複製到記憶體帳戶。 當您移轉資料時,請確定您使用時間戳和複製旗標來追蹤移轉進度。
- 若要避免從 Azure 資料表次要記憶體刪除專案,請忽略函式從 Azure Cosmos DB 刪除專案時所產生的刪除摘要。
參與者
本文由 Microsoft 維護。 原始投稿人如下。
主要作者:
- Nabil Siddiqui |雲端解決方案架構師 - 數位與應用程式創新
下一步
- Web-Queue-Worker 架構樣式
- 設計異地分散式應用程式
- 使用 Azure Cosmos DB 來全域散發資料
- 選擇適用於 Azure Cosmos DB 的適當 API
- 使用適用於數據表的 Azure Cosmos DB 來儲存及存取 NoSQL 數據
- 在 Azure Cosmos DB 中使用 NoSQL 數據
- 如何使用真實範例在 Azure Cosmos DB 上將資料模型化和分割
- 用來將內部部署或雲端資料移轉至 Azure Cosmos DB 的選項
- 將數百 TB 的資料遷移至 Azure Cosmos DB
- 變更 Azure Cosmos DB 中的摘要設計模式
- 使用 Azure Cosmos DB 和 Azure Functions 的無伺服器事件架構
- Azure Data Factory 簡介
- 在 Azure Data Factory 或 Azure Synapse Pipeline 中協調數據移動和轉換