帶你揭秘Azure Blob存儲(上)

來源: 企業(yè)上云直升機
作者:周博洋
時間:2021-06-19
17234
Azure Blob存儲是一個云對象存儲系統(tǒng),它為客戶提供了在任何時間段內存儲無限量的數(shù)據(jù)的能力??蛻艨梢噪S時從任何地方訪問他們的數(shù)據(jù),并且只為他們使用和存儲的數(shù)據(jù)付費。在Azure Blob中,數(shù)據(jù)可以選擇本地和地理復制進行持久存儲,以便于災難恢復。在本文中,我們描述了Azure Blob存儲的體系結構、全局名稱空間和數(shù)據(jù)模型,以及它的資源調配、負載平衡和復制系統(tǒng)。

概述

Azure Blob存儲是一個云對象存儲系統(tǒng),它為客戶提供了在任何時間段內存儲無限量的數(shù)據(jù)的能力??蛻艨梢噪S時從任何地方訪問他們的數(shù)據(jù),并且只為他們使用和存儲的數(shù)據(jù)付費。在Azure Blob中,數(shù)據(jù)可以選擇本地和地理復制進行持久存儲,以便于災難恢復。在本文中,我們描述了Azure Blob存儲的體系結構、全局名稱空間和數(shù)據(jù)模型,以及它的資源調配、負載平衡和復制系統(tǒng)。

01、簡介

Azure Blob 存儲是一個可擴展的云存儲系統(tǒng),自2008年11月開始發(fā)布以來。它在Microsoft內部用于社交網(wǎng)絡搜索、提供視頻、音樂和游戲內容、管理醫(yī)療記錄等應用程序。此外,有成千上萬的微軟以外的客戶在使用 Azure Blob 存儲,任何人都可以通過互聯(lián)網(wǎng)注冊使用該系統(tǒng)。在 Azure Blob的構建過程中,來自潛在內部和外部客戶的反饋推動了許多設計決策。這些反饋產生的一些關鍵設計特性包括:

強一致性

許多客戶需要強一致性:尤其是企業(yè)客戶將其業(yè)務線應用程序移動到云端。他們還希望能夠對強一致性數(shù)據(jù)執(zhí)行條件讀、寫和刪除,以實現(xiàn)樂觀并發(fā)控制。為此,Azure Blob 盡可能提供了CAP定理聲稱難以同時實現(xiàn)的三個屬性:強一致性、高可用性和分區(qū)容限。

全局和可擴展的命名空間

為便于使用,Azure Blob存儲實現(xiàn)了一個全局命名空間,允許從世界上任何位置以一致的方式存儲和訪問數(shù)據(jù)。由于Blob的一個主要目標是支持存儲大量數(shù)據(jù),因此這個全局名稱空間必須能夠處理超過EB的數(shù)據(jù)。

容災

Blob跨相距數(shù)百英里的多個數(shù)據(jù)中心存儲客戶數(shù)據(jù)。這種冗余為災難(如地震、野火、龍卷風等)提供了必要的數(shù)據(jù)恢復保護。

多租戶和存儲成本

為降低存儲成本,許多客戶都使用相同的共享存儲基礎架構。Blob將具有不同資源需求的許多不同客戶的工作負載組合在一起,因此在任何一個時間點所需的存儲量都比在其專用硬件上運行的服務要少得多。

02、全局分區(qū)名稱空間

我們存儲系統(tǒng)的一個關鍵目標是提供一個單一的全局名稱空間,允許客戶端尋址云中的所有存儲,并隨時間擴展到所需的任意數(shù)量的存儲。為了提供這一功能,我們利用DNS作為存儲名稱空間的一部分,并將存儲名稱空間分為三個部分:帳戶名、分區(qū)名和對象名。因此,所有數(shù)據(jù)都可以通過入以下URI進行訪問:http(s): //AccountName. blob.core.chinacloudapi.cn/PartitionName/ObjectName (國外的Azure Blob的domian name 略有區(qū)別)。

AccountName

是客戶選擇的用于訪問存儲的帳戶名,是DNS主機名的一部分。AccountName DNS轉換用于定位存儲數(shù)據(jù)的主存儲群集和數(shù)據(jù)中心。此主要位置是所有請求到達該帳戶數(shù)據(jù)的位置。應用程序可以使用多個帳戶名跨不同位置存儲其數(shù)據(jù)。當請求到達存儲集群時,

PartitionName(對于Blob存儲來講就是Container name)

與AccountName一起定位數(shù)據(jù)。PartitionName用于當數(shù)據(jù)需要跨存儲節(jié)點擴展對數(shù)據(jù)的訪問。

ObjectName

標識該分區(qū)中的各個對象。系統(tǒng)支持跨具有相同PartitionName值的對象的原子事務。

03、高層體系結構

Azure云平臺

Azure云該平臺跨不同的數(shù)據(jù)中心和不同的地理區(qū)域運行許多云服務。Azure Fabric 控制器是一個資源調配和管理層,它為Azure平臺上的云服務提供資源分配、部署/升級和管理。Azure存儲服務就是這樣一個在Fabric控制器上運行的服務。Fabric控制器為Azure 存儲系統(tǒng)提供節(jié)點管理、網(wǎng)絡配置、運行狀況監(jiān)視、服務實例的啟動/停止以及服務部署。此外,Azure 存儲從Fabric控制器檢索網(wǎng)絡拓撲信息、群集的物理布局以及存儲節(jié)點的硬件配置。Azure存儲服務負責管理跨磁盤的復制和數(shù)據(jù)放置,并在存儲群集中對數(shù)據(jù)和應用程序通信進行負載平衡。

Azure Blob 存儲體系結構及其組件

Azure Blob存儲的一個重要特性是能夠存儲和提供對大量存儲(EB及以上)的訪問。Azure Blob存儲生產系統(tǒng)由存儲stamp和位置服務組成(如下圖所示)。

640 (2).png

存儲stamp

存儲stamp是由N個存儲節(jié)點機架組成的群集,其中每個機架構建為具有冗余網(wǎng)絡和電源的獨立容錯域。集群通常在20以上個機架之間,每個機架有N個磁盤密集型存儲節(jié)點。為了提供低成本的云存儲,我們需要使生產中配置的存儲盡可能高利用率。我們的目標是使存儲stamp在容量、事務和帶寬方面的利用率保持在70%左右。我們盡量避免超過80%,因為我們希望保留20%的備用空間,以便支持(1)磁盤短行程,通過利用磁盤的外部磁道通過利用磁盤的外部磁道獲得更好的尋道時間和更高的吞吐量,以及(2)在內存中出現(xiàn)機架故障時繼續(xù)提供存儲容量和可用性。當存儲戳記的利用率達到70%時,位置服務使用戳記間復制將帳戶遷移到不同的stamp。

位置服務(LS)

位置服務管理所有存儲stamp。它還負責跨所有stamp管理帳戶命名空間。LS將帳戶分配給存儲stamp,并跨存儲stamp對其進行管理,以實現(xiàn)災難恢復和負載平衡。一般來講位置服務本身分布在兩個地理位置上,用于自己的災難恢復。Azure存儲從多個地理區(qū)域(如中國的北一,北二,東一,東二,北美、歐洲和其他亞洲非洲國家)的多個位置提供存儲。每個位置都是多個數(shù)據(jù)中心,在其中任意一個DC位置有一個或多個建筑物,每個位置都有多個存儲stamp。為了提供額外的容量,LS能夠輕松地向區(qū)域添加新區(qū)域、新位置或向位置添加新標記。因此,為了增加存儲量,我們在所需位置的數(shù)據(jù)中心部署一個或多個存儲stamp,并將它們添加到LS中。然后,LS可以為客戶將新的存儲帳戶分配給這些新的stamp,并將現(xiàn)有存儲帳戶從舊的stamp負載平衡(遷移)到新的stamp。對于具有兩個存儲stmap的位置服務和存儲stamp中的邏輯層,LS跨所有位置跟蹤生產中每個存儲stamp使用的資源。當應用程序請求一個新帳戶來存儲數(shù)據(jù)時,它會指定存儲的位置相關性(例如,中國北二)。然后,LS使用基于所有stamp的負載信息的啟發(fā)式算法(該算法考慮戳的完整性和其他度量,例如網(wǎng)絡,事務利用率)選擇該位置內的存儲stamp作為帳戶的主stamp。LS然后將帳戶元數(shù)據(jù)信息存儲在所選的存儲stamp中,更新DNS以允許請求從https://. blob.core.chinacloudapi.cn /到該存儲stamp的虛擬IP(VIP,存儲stamp為外部通信公開的IP地址)。

存儲stamp中的三層結構

自下而上,這些分別是:

1、stream層

這一層對于Blob存儲的操作主要位在磁盤上,也相當于存儲的最底層,并負責分布和復制跨許多服務器的數(shù)據(jù),以保持數(shù)據(jù)持久性。stream層可以被認為是stamp中的分布式文件系統(tǒng)層。它是被稱為“流”(即稱為“擴展數(shù)據(jù)塊”的大型存儲塊的有序列表)的文件、如何存儲它們、如何復制它們等等,這一層他都理解,但它不理解更高級別的對象構造或它們的語義。數(shù)據(jù)存儲在stream層,但可以從Partition層訪問。事實上,Partition服務器(分區(qū)層中的守護進程)和stream服務器在一個stamp中共同位于每個存儲節(jié)點上。

2、Partition層

Partition層用于(1)管理和理解更高級別的數(shù)據(jù)抽象,如Blob對象,(2)提供可伸縮的對象名稱空間,(3)為對象提供事務排序和強一致性,(4)在stream層上存儲對象數(shù)據(jù),以及(5)緩存對象數(shù)據(jù)以減少磁盤I/O。該層的另一個職責是通過在一個stamp中劃分所有數(shù)據(jù)對象來實現(xiàn)可伸縮性。

如前所述,所有對象都有一個PartitionName;基于PartitionName值,它們被分解為不相交的范圍,并由不同的分區(qū)服務器提供服務。該層管理哪個分區(qū)服務器為blob的 PartitionName范圍提供服務。此外,它還提供跨分區(qū)服務器的分區(qū)名稱的自動負載平衡,以滿足對象的流量需求。

3、前端(Front-End)層

前端(FE)層由一組接收傳入請求的無狀態(tài)服務器組成。在接收到請求后,F(xiàn)E查找AccountName,對請求進行身份驗證和授權,然后將請求路由到分區(qū)層中的分區(qū)服務器(基于PartitionName)。系統(tǒng)維護一個分區(qū)映射,該映射跟蹤分區(qū)名稱范圍以及哪個分區(qū)服務器為哪個分區(qū)名稱提供服務。FE服務器緩存分區(qū)映射,并使用它來確定將每個請求轉發(fā)到哪個分區(qū)服務器。FE服務器還直接從stream層stream化大型對象,并緩存頻繁訪問的數(shù)據(jù)以提高效率。

兩個復制引擎

在詳細描述Stream流和Partition層之前,我們首先簡要概述系統(tǒng)中的兩個復制引擎及其各自的職責。

1、內部stamp復制(stream層)

此系統(tǒng)提供同步復制,并側重于確保寫入stamp的所有數(shù)據(jù)在該stamp中保持持久性。它在不同故障域中的不同節(jié)點之間保留足夠的數(shù)據(jù)副本,以便在磁盤、節(jié)點和機架出現(xiàn)故障時保持數(shù)據(jù)在stamp的持久性。stamp內復制完全由stream層完成,位于客戶寫請求的關鍵路徑上。一旦通過內部stamp復制成功復制了事務,就可以將成功返回給客戶。

2、Stamp間復制(Partition層)

此系統(tǒng)提供異步復制,重點是跨stamp復制數(shù)據(jù)。stamp間復制是在后臺完成的,不在客戶請求的關鍵路徑上。此復制是在對象級別進行的,在該級別上,可以復制整個對象,也可以復制給定帳戶的最近增量更改。stamp間復制用于(1)在兩個位置保留帳戶數(shù)據(jù)的副本以進行災難恢復,以及(2)在stamp之間遷移帳戶數(shù)據(jù)。stamp間復制由位置服務為帳戶配置,并由Partition層執(zhí)行。stamp間復制的重點是復制對象和應用于這些對象的事務,而stamp內復制的重點是復制用于組成對象的磁盤存儲塊。


stamp內復制提供了對硬件故障的持久性,這種故障在大規(guī)模系統(tǒng)中經(jīng)常發(fā)生,而stamp間復制提供了對地理災害的地理冗余,這種情況很少見。提供低延遲的stamp內復制是至關重要的,因為這是在用戶請求的關鍵路徑上;而stamp間復制的重點是在達到可接受的復制延遲水平的同時,優(yōu)化利用stamp間的網(wǎng)絡帶寬。這兩種復制方案解決的問題不同。創(chuàng)建這兩個獨立復制層的另一個原因是這兩個層中的每個層都必須維護的名稱空間。在stream層執(zhí)行stamp內復制允許將需要維護的信息量限定為單個存儲stamp的大小。


這一重點允許將所有stamp內復制的元狀態(tài)緩存在內存中以提高性能, 從而使Azure Blob存儲系統(tǒng)能夠通過在單個stamp內快速提交事務以滿足客戶請求,從而提供具有強一致性的快速復制。與此相反,Partition層與位置服務相結合,控制并理解跨stamp的全局對象名稱空間,從而允許它跨數(shù)據(jù)中心高效地復制和維護對象狀態(tài)。

(未完待續(xù))

立即登錄,閱讀全文
版權說明:
本文內容來自于企業(yè)上云直升機,本站不擁有所有權,不承擔相關法律責任。文章內容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質服務商推薦
更多
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家