來源:互聯網
上載者:User
關鍵字
雲服務
Azure
Azure
RDBMS
編輯人員注釋:本文章由AzureCAT 雲與企業工程組的高級專案經理 Shaun Tinline-Jones 和 Chris Clayton 共同撰寫。
「雲服務基礎」應用程式也稱作「CSFundamentals」,展示如何構建資料庫支援的 Azure 服務。 這包括描述日誌記錄、配置和資料訪問的使用場景、實施體系結構及可複用元件。 代碼庫旨在用於根據 Windows Azure 客戶諮詢團隊進行的生產部署,深入挖掘在 Azure 上交付可伸縮的可用服務的最佳實踐。
目前大多數公司都在努力推進其雲計畫,但特定解決方案的業務驅策因素各不相同,例如降低成本以及大幅提高敏捷性和擴大規模。 當解決方案試圖實現「雲規模」時,「縱向可伸縮性」戰略已被「橫向可伸縮性」取代。 前者通過升級硬體來提高容量,後者可增加共同完成某個特定任務的電腦數量。 此權衡的一個絕佳示例是,選擇創建具有許多提供相同網站內容的伺服器的 Web 場,還是讓單台機體試圖處理負載。
大多數人從計算節點著手開始實施此橫向可伸縮性計畫,但忽略了更複雜且可能更重要的狀態層級,例如關係資料庫管理系統 (RDBMS) 和緩存。 這些服務通常為 IO 密集型,且只有單個實例。 在狀態層級中實施橫向可伸縮性的一個方法稱作分區,它是指從邏輯上將 RDBMS 資料分成多個資料庫,每個資料庫通常採用相同的表結構。 例如,一張員工資訊表可以拆分到三個不同的資料庫,每個資料庫存儲不同部門員工的資訊。
分區的優勢遠不止體現在與容量相關的場景中。 本文章將著重闡述在 Azure SQL 資料庫平臺中實施的且主要用於 OLTP 場景的 RDBMS 分區。 分區資料庫結構可帶來優勢的示例場景包括:
限制閥值或輸送量限制的命中頻率過高。 資料量太大(索引重新構建、備份等)。 一個資料庫不可用影響所有使用者(而單個分區則不會)。 資料庫難以按需求向上和向下伸縮。 某些業務模型,例如多租戶或軟體即服務方案。
使用多租戶資料庫(如 Windows Azure SQL 資料庫)作為服務解決方案時,通常會在各種條件下對用戶端進行限制的服務品質 (QOS) 控制。 限制通常會在資源壓力攀升時發生。 分區是一種説明降低資源壓力的關鍵戰略,它可以將通常影響單台伺服器的負載分散到多台伺服器上,每台伺服器均包含一個分區。 例如,假定負載均勻分配,那麼創建五個分區,就可以將每個資料庫上的負載降低為大約百分之二十。
但任何東西隨著功能變得更強大,也難免要做出一些犧牲。 分區可能會增加多個關鍵領域的複雜性,因此需要更完善的計畫。 這些關鍵領域包括:
所有分區的識別欄位應保持全域唯一性,以防將來的業務需求要求減少分區數。 如果所有分區的標識不唯一,兩個分區合併時會發生衝突。 參考完整性無法引用其他分區中的行或者強制與這些行建立關係,因為它們屬於獨立的資料庫。 應儘量避免跨分區查詢,因為這要求對每個分區進行查詢併合並結果。 跨分區「扇出」查詢不僅從性能角度來說成本極高,而且會增加為其提供支援的分區框架的複雜性。 如果必須進行跨分區查詢,則通常的策略是對每個分區進行非同步查詢。 但是,有時同步查詢方法可以對結果集大小進行更好的控制。
大多數情況下,分區是一個資料訪問層 (DAL) 概念,為更高級別的複雜應用程式邏輯抽象化複雜的資料結構。
如何定義「租戶」是您構建分區化體系結構時作出的最重要的決策之一。 租戶是必定位於相同分區上的最大唯一資料分類。 限制在單個租戶中執行的查詢通常速度更快,因為這種查詢無需在正常操作狀態下執行扇出操作。 影響對應租戶定義決策的部分因素如下:
對識別碼的更高級別應用程式代碼的瞭解程度。 在此級別上執行大多數核心業務事務的能力。 在租戶級別避免限制常規日常操作的能力。
為了更形象地說明這些概念和想法,Windows Azure 客戶諮詢團隊在雲服務基礎 (CSF) 資料包 (HTTP://code.msdn.microsoft.com/ Cloud-Service-Fundamentals-4ca72649) 中構建了一個基本分區資料訪問層 (DAL)。
CSF 中將租戶定義為單個使用者。 促使選擇此租戶的因素包括:
大多數核心業務需求都不要求跨多使用者查詢。 一個分區不可用只會影響某組使用者組,而其他使用者可繼續正常使用系統。 單個分區上的使用者數可以控制為企業可承受的數量。
對租戶的定義和實施可確保不需要執行跨資料庫事務。 在圖 1 中,我們將此資料集稱為 shardlet,即資料模型事務邊界。
圖 1 - 資料模型事務邊界
使用者首次在會話中連接到資料庫時,可以執行一系列簡單查詢,以瞭解是否有任何功能由於離線分區而不可用。
為了簡化 CSF 中演示的分區方法,我們決定創建一個分區集,這些分區擁有足以滿足可預見將來的容量需求的存儲空間。 通過選擇固定大小,就不再需要演示分區數量的增加和減少,也就無需執行租戶遷移之類的操作。 通過對租戶名稱執行雜湊演算法,可以生成一個整數,此 ID 可用來在「區域圖」中查詢匹配範圍。 CSF 使用基於範圍的機制,其中一個特定分區(在「區域圖」中捕獲)將被分配一個這些數位的範圍。
如果需要向分區集添加分區或從分區集中刪除分區,租戶需要在遷移到新分區之前變為不可用。 由於此嚴重限制,因此要求在首次創建分區集時對分區集進行大幅超額配置,以緩解或消除執行複雜分區管理的需要。
此解決方案要求資料訪問層 (DAL) 能檢測到租戶 ID,以確定租戶在分區集中的位置。 如果執行的查詢包括不可用的分區,整個查詢將失敗。 如果 DAL 不包括租戶 ID,則必須查詢所有分區,這會導致失敗概率提高並使性能降低。
目前正在進行一些預備工作,以提供可演示更高級分區方法的更多示例代碼。 這些示例可改進以下領域:
被動式和主動式分區管理。
全域唯一性和標識管理。 分區集內分區之間的租戶遷移。 分區集的擴展和收縮。 對無法檢測租戶的查詢的改進。
總而言之,雲服務基礎示例代碼是開始探討基本分區概念的一個絕佳途徑,而分區則是創建「雲規模」應用程式的一個重要方法。