阿里P8大佬,由原理和實戰出發,帶你深入大規模分佈式存儲系統 寫在前面 基礎篇 範型篇 實踐篇 專題篇 讀者對象

寫在前面

隨着社交網絡、移動互聯網、電子商務等技術的不斷髮展,互聯網的使用者貢獻了越來越多的內容。爲了處理這些內容,每個互聯網公司在後端都有一套成熟的分佈式系統用於數據的存儲、計算以及價值提取。Google 是全球最大的互聯網公司,也是在分佈式技術上相對成熟的公司,其公佈的Google分佈式文件系統GFS、分佈式計算系統MapReduce、分佈式表格系統Bigtable都成爲業界競相模仿的對象,最近公佈的全球數據庫Spanner更是能夠支持分佈在世界各地上百個數據中心的上百萬臺服務器。Google的核心技術正是後端這些處理海量數據的分佈式系統。和Google類似,國外的亞馬遜、微軟以及國內互聯網三巨頭阿里巴巴、百度和騰訊的核心技術也是其後端的海量數據處理系統。

分佈式存儲和當今同樣備受關注的雲存儲和大數據又是什麼關係呢?分佈式存儲是基礎,雲存儲和大數據是構建在分佈式存儲之上的應用。移動終端的計算能力和存儲空間有限,而且有在多個設備之間共享資源的強烈的需求,這就使得網盤、相冊等雲存儲應用很快流行起來。然而,萬變不離其宗,雲存儲的核心還是後端的大規模分佈式存儲系統。大數據則更近一步,不僅需要存儲海量數據,還需要通過合適的計算框架或者工具對這些數據進行分析,抽取其中有價值的部分。如果沒有分佈式存儲,便談不上對大數據進行分析。仔細分析還會發現,分佈式存儲技術是互聯網後端架構的“九陽神功”,掌握了這項技能,以後理解其他技術的本質會變得非常容易。

在這裏,小編爲大家推薦一篇前阿里高級技術專家整理撰寫的,系統講解構建大規模存儲系統的核心技術和原理,詳細分析Google、Amazon、Microsoft和阿里巴巴的大規模分佈式存儲系統的原理的學習祕籍。

本書的目標是介紹互聯網公司的大規模分佈式存儲系統,共分爲四篇:

基礎篇

基礎知識包含兩個部分:單機存儲系統以及分佈式系統。其中,單機存儲系統的理論基礎是數據庫技術,包括數據模型、事務與併發控制、故障恢復、存儲引擎、數據壓縮等;分佈式系統涉及數據分佈、複製、一致性、容錯、可擴展性等分佈式技術。另外,分佈式存儲系統工程師還需要一項基礎訓練, 即性能預估,因此,基礎篇也會順帶介紹硬件基礎知識以及性能預估方法。

本章首先介紹CPU、I0、網絡等硬件基礎知識及性能參數,接着介紹主流的單機存儲引擎。其中,哈希存儲引擎是哈希表的持久化實現,B樹存儲引擎是B樹的持久化實現,而LSM樹(LogStructureMergeTree)存儲引擎採用批量轉儲技術來避免磁盤隨機寫人。最後,介紹關係數據庫理論基礎,包括事務、併發控制、故障恢復、數據壓縮等。

分佈式系統中有兩個重要的協議,包括Paxos選舉協議以及兩階段提交協議。Paxos協議用於多個節點之間達成一致,往往用於實現總控節點選舉。兩階段提交協議用於保證跨多個節點操作的原子性,這些操作要麼全部成功,要麼全部失敗。理解了這兩個分佈式協議之後,學習其他分佈式協議會變得相當容易。

範型篇

這部分內容將介紹Google、亞馬遜、微軟、阿里巴巴等各大互聯網公司的大規模分佈式存儲系統,分爲四章:分佈式文件系統、分佈式鍵值系統、分佈式表格系統以及分佈式數據庫。

本章首先重點介紹GFS的內部實現機制,接着介紹TFS和Face book Haystack的內部實現。最後,本章還會簡單介紹內容分發網絡( Content Delivery Network, CDN )技術,這種技術能夠將圖像、視頻之類的數據緩存在離用戶“最近”的網絡節點上,從而降低訪問延時,節省帶寬。

分佈式鍵值模型可以看成是分佈式表格模型的一種特例。然而,由於它只支持針對單個key-value的增、刪、查、改操作,因此,適用之前提到的哈希分佈算法。

Amazon Dynamo是分佈式鍵值系統,最初用於支持購物車應用。Dynamo將很多分佈式技術融合到一個系統內,學習Dynamo的設計對理解分佈式系統的理論很有幫助。當然,這個系統的主要價值在於學術層面,從工程的角度看,Dynamo 犧牲了一致性,卻沒有換來什麼好處,不適合直接模仿。

關係數據庫理論彙集了計算機科學家幾十年的智慧,Oracle、 Microsoft SQL Server、MySQL 等關係數據庫系統廣泛應用在各行各業中。可以說,沒有關係數據庫,就沒有今天的IT或者互聯網行業。然而,關係數據庫設計之初並沒有預見到IT行業發展如此之快,總是假設系統運行在單機這一封閉系統上。

本章首先介紹數據庫中間層架構,接着介紹MicrosoftSQLAzure,最後介紹Google Spanner。

實踐篇

這部分內容將以筆者在阿里巴巴開發的分佈式數據庫OceanBase爲例詳細介紹分佈式數據庫內部實現以及實踐過程中的經驗總結。

從模塊劃分的角度看,OceanBase 可以劃分爲四個模塊:主控服務器RootServer、更新服務器UpdateServer、基線數據服務器ChunkServer以及合併服務器MergeServer。OceanBase系統內部按照時間線將數據劃分爲基線數據和增量數據,基線數據是隻讀的,所有的修改更新到增量數據中,系統內部通過合併操作定期將增量數據融合到基線數據中。本章介紹OceanBase系統的設計思路和整體架構。

分佈式存儲引擎層包含三個模塊: RootServer、 UpdateServer 以及ChunkServer。其中,RootServer 用於整體控制,實現子表分佈、副本複製、負載均衡、機器管理以及Schema管理; UpdateServer 用於存儲增量數據,數據結構爲一個內存B樹,並通過主備實時同步實現高可用,另外,UpdateServer的網絡框架也經過專門的優化;ChunkServer用於存儲基線數據,基線數據按照主鍵有序劃分爲一個個子表,每個子表在ChunkServer上存儲了一個或者多個SSTable,另外,定期合併和數據分發的主要邏輯也由ChunkServer實現。

數據庫功能層構建在分佈式存儲引擎層之上,實現完整的關係數據庫功能。對於使用者來說,OceanBase與MySQL數據庫並沒有什麼區別,可以通過MySQL客戶端連接OceanBase,也可以在程序中通過JDBC/ODBC操作OceanBase。

OceanBase的MergeServer模塊支持MySQL協議,能夠將其中的SQL請求解析出來,並轉化爲OceanBase系統的內部調用。

OceanBase系統一直在不斷演化,需要在代碼不斷變化的過程中保持系統的穩定性。因此,合理的質量保證體系關乎系統的成敗。爲了保證系統質量,OceanBase 做了大量工作,在RD (指開發工程師)開發、QA (指測試工程師)測試、上線試運行各個階段對系統質量把關。

專題篇

雲存儲和大數據是近年來興起的兩大熱門領域,其底層都依賴分佈式存儲技術,這部分將簡單介紹這兩方面的基礎知識。

雲存儲是雲計算的存儲部分,並且可以作爲一種服務提供給用戶,任何經過授權的合法用戶都可以通過網絡訪問雲存儲,享受雲存儲帶來的便利。雲存儲是隨着互聯網和雲計算逐步發展起來的,從大規模系統軟件架構的角度看,雲計算後端架構的難點集中在雲存儲。本章首先對雲存儲做-個初步的介紹,接着介紹Amazon、Google 以及Microsoft 的雲平臺整體架構。

隨着雲時代的來臨,大數據(Big Data)也吸引了越來越多的關注。2012年7月,阿里巴巴數據公司成立並設立了一個全新的崗位:首席數據官( Chief Data Oficer,CDO),由此可見數據在未來的價值。這也意味着與“大數據存儲、計算和價值提取"相關的技術崗位將會得更加重要。

本章首先介紹大數據的概念以及大數據計算平臺,接着介紹MapReduce離線處理系統,最後,介紹流式計算系統和實時分析系統。

讀者對象

本書適合互聯網行業或者其他從事分佈式系統實踐的工程人員,也適合大學高年級本科生和研究生作爲分佈式系統或者雲計算相關課程的參考書籍。閱讀本書之前,建議首先理解分佈式系統和數據庫相關基礎理論,接着閱讀第一篇。 如果對各個互聯網公司的系統架構感興趣,可以選擇閱讀第二篇的某些章節;如果對阿里巴巴OceanBase的架構設計和實現感興趣,可以順序閱讀第三篇。最後,如果對雲存儲或者大數據感興趣,可以選擇閱讀第四篇的某個章節。

怎麼樣,如此一篇實戰性強,通過對阿里巴巴的分佈式數據庫OceanBase的實現細節進行深入分析,全面講解了大規模分佈式存儲系統的架構方法與應用實踐的神書就在這裏,有需要深度學習的朋友,請幫忙轉發文章,並關注小編,再私信回覆【學習】即可哦~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章