分布式存儲系統(tǒng):核心技術(shù)、系統(tǒng)實(shí)現(xiàn)與Go項(xiàng)目實(shí)戰(zhàn) 李慶
定 價(jià):119 元
- 作者:李慶
- 出版時(shí)間:2024/8/1
- ISBN:9787111758020
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP333.2
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
全書分為3篇。第1篇存儲基本原理和分布式基本原理。特別針對 Linux OS 的 IO 知識進(jìn)行講解,并且還會結(jié)合 Go 的存儲編程實(shí)現(xiàn)。第二篇剖析現(xiàn)有的存儲系統(tǒng)實(shí)現(xiàn),對它們使用的設(shè)計(jì),概念,實(shí)現(xiàn)進(jìn)行深入的剖析。以此來借鑒。第三篇進(jìn)行編程實(shí)戰(zhàn),將編寫數(shù)個(gè)極具實(shí)踐價(jià)值的應(yīng)用程序,并且形成一個(gè)完備的分布式存儲系統(tǒng)。
1)大廠資深工程師撰寫,串聯(lián)紛繁復(fù)雜的分布式存儲知識,通俗易懂、好學(xué)易用,一本書學(xué)透,進(jìn)階存儲資深工程師2)以Go和Linux存儲為“地基”,以分布式系統(tǒng)核心技術(shù)與實(shí)現(xiàn)“主框架”,以分布式文件系統(tǒng)為“梁柱”,利用多種業(yè)務(wù)場景和案例進(jìn)行可用性夯實(shí),打造存儲知識體系“樣板間”
Preface 前 言
為什么要寫這本書
在這個(gè)信息技術(shù)飛速發(fā)展的時(shí)代,數(shù)據(jù)已成為一種重要的資產(chǎn)。隨著互聯(lián)網(wǎng)技術(shù)突飛猛進(jìn)的發(fā)展,海量數(shù)據(jù)的生成、存儲、處理以及分析逐漸成為常態(tài)。在這種背景下,分布式存儲系統(tǒng)以其高可靠性、可伸縮性和高性能,成為支撐大數(shù)據(jù)時(shí)代的堅(jiān)固基石。
本書的編寫基于我對當(dāng)代分布式存儲技術(shù)的深刻理解,以及對Go語言在此領(lǐng)域的潛力的深刻認(rèn)識。Go語言因其簡潔的語法、強(qiáng)大的并發(fā)處理能力和優(yōu)異的性能,成為構(gòu)建大規(guī)模分布式系統(tǒng)的首選語言之一。
存儲是底層的技術(shù),涉及的知識廣泛而復(fù)雜,經(jīng)常讓初學(xué)者望而卻步。很多存儲技術(shù)開發(fā)的人員都是在實(shí)際工作中逐步摸索,積累的知識往往是零散且碎片化的,難以形成系統(tǒng)化的思維框架。當(dāng)遇到問題時(shí),他們往往難以迅速找到解決方案。因此,目前缺少的不僅是一本能夠引導(dǎo)讀者入門存儲領(lǐng)域的書籍,更是一本能幫助讀者構(gòu)建起存儲知識體系,并將理論應(yīng)用到實(shí)踐中去的指導(dǎo)書。
本書旨在全面深入地解讀分布式存儲系統(tǒng)的基礎(chǔ)原理,并借助Go語言去實(shí)踐這些原理。從基礎(chǔ)知識到知識體系構(gòu)建,從代碼演示到典型項(xiàng)目分析,再到項(xiàng)目實(shí)戰(zhàn),本書將逐步引導(dǎo)讀者深入理解并實(shí)際運(yùn)用分布式存儲技術(shù),幫助讀者構(gòu)建起完整的存儲知識體系,以便快速進(jìn)入存儲開發(fā)領(lǐng)域。
本書特色
Go存儲編程的技巧:深入淺出地講解Go語言的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)、存儲I/O框架、并發(fā)編程等關(guān)鍵技術(shù)點(diǎn)。
Linux存儲體系:構(gòu)建起完整的Linux存儲體系,幫助讀者從根本上理解存儲技術(shù)的內(nèi)在邏輯。
理論與實(shí)踐相結(jié)合:通過豐富的代碼示例與測試手段分析關(guān)鍵存儲技術(shù)的實(shí)現(xiàn)過程,并展示如何使用Go語言打造真實(shí)運(yùn)行的分布式存儲系統(tǒng)。
經(jīng)典項(xiàng)目深度解讀:詳細(xì)講解了Minix、FUSE、LevelDB等經(jīng)典存儲項(xiàng)目,以便讀者深刻理解它們的核心原理,并快速掌握存儲技術(shù)的開發(fā)與實(shí)踐。
分布式存儲的項(xiàng)目實(shí)踐:實(shí)現(xiàn)了一個(gè)真實(shí)的分布式存儲項(xiàng)目,以便讀者從實(shí)踐中深入理解分布式存儲的原理。
讀者對象
本書適合具備一定Go語言開發(fā)經(jīng)驗(yàn),并對Linux基礎(chǔ)知識有了解的讀者閱讀。具體來說,本書適用于以下讀者:
Go語言開發(fā)工程師。
分布式存儲領(lǐng)域的初學(xué)者。
希望通過Go語言優(yōu)化現(xiàn)有存儲解決方案的資深開發(fā)者。
如何閱讀本書
本書共16章,分為四部分。讀者可以按照章節(jié)順序閱讀,也可以根據(jù)需求挑選感興趣的章節(jié)進(jìn)行專項(xiàng)學(xué)習(xí)。
第一部分(第1~3章) Go語言基礎(chǔ),涵蓋以下內(nèi)容。
第1章闡述了存儲的重要性,并特別討論了Go語言在存儲領(lǐng)域的重要性。
第2章介紹了Go語言在存儲編程中常用的數(shù)據(jù)結(jié)構(gòu),以方便讀者了解底層的數(shù)據(jù)存儲細(xì)節(jié)。
第3章深入介紹了Go語言的I/O框架,系統(tǒng)梳理了Go語言存儲編程的知識體系。
第二部分(第4~9章) 存儲基礎(chǔ),涵蓋以下內(nèi)容。
第4章詳細(xì)探討了Linux的存儲架構(gòu)以及文件和文件系統(tǒng)的核心概念。
第5章展示了常見的存儲編程案例,探討了讀寫優(yōu)化的策略以及數(shù)據(jù)安全性的保障方法。
第6章深入剖析了多種I/O模式,以及Linux上的典型I/O模式的實(shí)現(xiàn)。
第7章詳細(xì)介紹了多種I/O并發(fā)模型,包括多進(jìn)程、多線程、協(xié)程模型,并深入討論了I/O多路復(fù)用的原理和實(shí)現(xiàn)。
第8章解讀了多種緩存模式,包括旁路緩存、讀寫穿透、異步回寫模式等。
第9章闡述了數(shù)據(jù)校驗(yàn)技術(shù)及其在實(shí)際中的應(yīng)用場景。
第三部分(第10~12章) 分布式系統(tǒng)基礎(chǔ),涵蓋以下內(nèi)容。
第10章闡釋了分布式系統(tǒng)的基礎(chǔ)理論,如CAP和BASE等,并分析了2PC、3PC、Paxos、Raft等分布式協(xié)議。
第11章講述了常見的高可用模式和關(guān)鍵技術(shù)。
第12章探討了數(shù)據(jù)分布策略和數(shù)據(jù)冗余策略。
第四部分(第13~16章) 存儲系統(tǒng)實(shí)戰(zhàn),涵蓋以下內(nèi)容。
第13章介紹了Linux上經(jīng)典磁盤文件系統(tǒng)Minix的原理和實(shí)現(xiàn)。
第14章介紹了存儲引擎LevelDB的原理和實(shí)現(xiàn)。
第15章介紹了用戶態(tài)文件系統(tǒng)的原理和實(shí)現(xiàn),并演示了一個(gè)簡易用戶態(tài)文件系統(tǒng)HelloFS的構(gòu)建過程。
第16章基于HelloFS,指導(dǎo)讀者逐步搭建一個(gè)分布式的存儲系統(tǒng)。
勘誤和支持
由于編寫時(shí)間倉促,書中難免有疏漏或不夠精確之處,懇請讀者批評指正。如果讀者有更多寶貴意見,歡迎訪問微信公眾號“奇伢云存儲”進(jìn)行討論,我會盡力在線上為讀者答疑解惑。同時(shí),也可以通過郵箱liqingqiya@163.com聯(lián)系我。期待得到讀者的反饋,讓我們在技術(shù)之路上互勉共進(jìn)。
致謝
感謝我的妻子,她的耐心和理解為我提供了一個(gè)寧靜且充滿愛的創(chuàng)作環(huán)境。同時(shí),感謝我的家人,他們是我堅(jiān)實(shí)的后盾,給予了我必要的支持和鼓勵(lì)。
本書也是獻(xiàn)給我心愛的女兒的特殊禮物,祝愿她健康成長。
李慶
李慶:資深存儲系統(tǒng)工程師,擁有近十年存儲研發(fā)與落地經(jīng)驗(yàn)。曾參與設(shè)計(jì)和運(yùn)維多個(gè)EiB級別(百億兆字節(jié)規(guī)模)的存儲系統(tǒng),這些系統(tǒng)應(yīng)用于全球領(lǐng)先的科技企業(yè),支撐著關(guān)鍵業(yè)務(wù)的數(shù)據(jù)處理和存儲需求。
目 錄 Contents
前言
第一部分 Go語言基礎(chǔ)
第1章 存儲概述2
1.1 Go語言與存儲應(yīng)用2
1.2 存儲:云變革的基石3
1.3 存儲技術(shù)的發(fā)展3
1.3.1 提升速度4
1.3.2 擴(kuò)大容量4
1.4 本章小結(jié)4
第2章 Go語言的數(shù)據(jù)結(jié)構(gòu)5
2.1 字節(jié)5
2.1.1 字節(jié)的定義5
2.1.2 字節(jié)的序列6
2.2 數(shù)組和切片10
2.2.1 數(shù)組10
2.2.2 切片11
2.3 字符串13
2.3.1 變量的定義14
2.3.2 內(nèi)存的分配15
2.3.3 字符串的操作16
2.3.4 類型轉(zhuǎn)換20
2.4 map類型21
2.4.1 創(chuàng)建與初始化21
2.4.2 讀取、寫入和刪除24
2.4.3 元素遍歷29
2.5 Channel類型32
2.5.1 創(chuàng)建與初始化32
2.5.2 入隊(duì)和出隊(duì)34
2.5.3 select和Channel結(jié)合41
2.5.4 for-range和Channel結(jié)合44
2.6 接口類型45
2.6.1 變量的定義45
2.6.2 實(shí)現(xiàn)原理47
2.6.3 接口nil賦值和判斷54
2.7 本章小結(jié)55
第3章 Go語言的I/O框架56
3.1 I/O的定義56
3.1.1 基礎(chǔ)類型56
3.1.2 組合類型60
3.1.3 進(jìn)階類型63
3.2 通用I/O函數(shù)68
3.2.1 面向I/O接口的操作68
3.2.2 文件I/O的操作函數(shù)70
3.3 文件系統(tǒng)71
3.3.1 FS接口的定義72
3.3.2 FS接口的實(shí)現(xiàn)和擴(kuò)展74
3.4 I/O標(biāo)準(zhǔn)庫拓?fù)?8
3.4.1 字節(jié)I/O78
3.4.2 字符串I/O79
3.4.3 網(wǎng)絡(luò)I/O80
3.4.4 文件I/O82
3.4.5 緩沖I/O83
3.5 文件I/O和網(wǎng)絡(luò)I/O85
3.5.1 文件I/O86
3.5.2 網(wǎng)絡(luò)I/O89
3.6 本章小結(jié)98
第二部分 存儲基礎(chǔ)
第4章 Linux 存儲基礎(chǔ)102
4.1 存儲架構(gòu)102
4.1.1 系統(tǒng)調(diào)用103
4.1.2 VFS層106
4.1.3 文件系統(tǒng)層122
4.1.4 塊層123
4.1.5 設(shè)備驅(qū)動層123
4.2 文件的定義124
4.2.1 文件的類型124
4.2.2 一切皆文件127
4.2.3 文件句柄130
4.3 文件系統(tǒng)131
4.3.1 文件系統(tǒng)的掛載要素132
4.3.2 文件系統(tǒng)的開發(fā)要素132
4.4 文件I/O函數(shù)134
4.4.1 打開文件135
4.4.2 寫文件137
4.4.3 讀文件138
4.4.4 文件偏移操作139
4.4.5 數(shù)據(jù)刷盤141
4.4.6 關(guān)閉文件141
4.5 本章小結(jié)142
第5章 存儲I/O實(shí)踐143
5.1 文件的讀寫143
5.1.1 順序I/O143
5.1.2 隨機(jī)I/O146
5.2 數(shù)據(jù)安全落盤的方式148
5.2.1 Sync刷盤方式148
5.2.2 Direct I/O方式149
5.3 讀寫優(yōu)化思路153
5.3.1 寫操作的優(yōu)化154
5.3.2 讀操作的優(yōu)化 159
5.4 本章小結(jié)162
第6章 高級I/O模式163
6.1 阻塞和非阻塞I/O163
6.2 同步和異步I/O164
6.3 I/O 接口的模式165
6.3.1 同步阻塞I/O165
6.3.2 同步非阻塞I/O166
6.3.3 異步阻塞I/O167
6.3.4 異步非阻塞I/O167
6.4 Linux的I/O模式實(shí)現(xiàn)168
6.4.1 信號驅(qū)動I/O168
6.4.2 Linux的異步I/O169
6.4.3 I/O多路復(fù)用171
6.5 本章小結(jié)172
第7章 并發(fā)I/O模型173
7.1 多進(jìn)程模型173
7.2 多線程模型174
7.3 協(xié)程模型175
7.3.1 基本原理175
7.3.2 Go語言的Goroutine178
7.4 I/O多路復(fù)用179
7.4.1 select181
7.4.2 poll183
7.4.3 epoll184
7.5 本章小結(jié)200
第8章 緩存模式201
8.1 旁路緩存模式202
8.1.1 讀操作流程202
8.1.2 寫操作流程203
8.2 讀寫穿透模式205
8.2.1 讀穿透模式205
8.2.2 寫穿透模式206
8.3 異步回寫模式206
8.4 本章小結(jié)207
第9章 數(shù)據(jù)校驗(yàn)技術(shù)208
9.1 數(shù)據(jù)校驗(yàn)的概念與原理208
9.2 數(shù)據(jù)校驗(yàn)的應(yīng)用場景209
9.3 常見數(shù)據(jù)校驗(yàn)技術(shù)210
9.3.1 奇偶校驗(yàn)210
9.3.2 循環(huán)冗余校驗(yàn)211
9.3.3 摘要算法212
9.4 本章小結(jié)215
第三部分 分布式系統(tǒng)基礎(chǔ)
第10章 分布式存儲理論218
10.1 分布式系統(tǒng)的特征218
10.2 分布式系統(tǒng)的問題220
10.2.1 無全局時(shí)鐘220
10.2.2 網(wǎng)絡(luò)異常220
10.2.3 結(jié)果的三態(tài)221
10.3 數(shù)據(jù)一致性222
10.3.1 狀態(tài)一致性222
10.3.2 操作一致性222
10.4 分布式理論225
10.4.1 CAP 理論225
10.4.2 BASE 理論226
10.5 分布式協(xié)議227
10.5.1 2PC協(xié)議227
10.5.2 3PC協(xié)議228
10.5.3 Paxos協(xié)議230
10.5.4 Raft協(xié)議233
10.6 本章小結(jié)236
第11章 高可用系統(tǒng)237
11.1 高可用的概念與原理237
11.2 高可用的關(guān)鍵技術(shù)238
11.3 高可用的架構(gòu)模式240
11.3.1 雙機(jī)架構(gòu)的模式240
11.3.2 集群模式242
11.4 本章小結(jié)245
第12章 數(shù)據(jù)策略246
12.1 數(shù)據(jù)分布設(shè)計(jì)原則246<