目 錄
第1章 大規模Web服務的開發定位——掌握整體 2
第0課 本書的起源——本書講述的範圍 3
從事大規模Web服務開發——麵嚮大學生的Hatena實習 3
本書講述的內容 3
本書不講述的內容 5
緻今後從事大規模Web服務的人 5
第1課 大規模服務和小規模服務 6
Hatena的服務規模 6
Hatena是大規模,Google、Facebook是超大規模 8
小規模服務和大規模服務的區彆 9
應對大規模數據量 11
第2課 持續增長的服務和大規模化的障礙 13
Web服務的睏難 13
Hatena的成長經曆 13
係統增長戰略——最小化開端、預見變化的管理和設計 17
第3課 服務開發現場 18
Hatena的技術團隊體製 18
Hatena的溝通方式 19
服務開發的實際狀況 19
開發所用的工具 21
總結 23
第2章 大規模數據處理入門
——內存和磁盤、Web應用程序和負載 24
第4課 Hatena Bookmark的數據規模 25
以Hatena Bookmark為例介紹大規模數據 25
Hatena Bookmark的數據規模 25
針對大規模數據的查詢——處理大規模數據的感覺 26
第5課 大規模數據處理的難點——內存和磁盤 28
為何處理大規模數據如此睏難——因為無法在內存中
計算 28
內存和磁盤的速度差異——內存要快105~106倍 28
為何磁盤這麼慢?——內存和磁盤 29
操作係統層的加速處理 31
傳輸速度和總綫的速度差異 31
第6課 可擴展性的要點 37
擴展和可擴展性 37
可擴展性的要點——CPU負載和I/O負載 38
Web應用程序和負載的關係 38
數據庫的可擴展性很難保證 39
第7課 處理大規模數據的基礎知識 44
麵嚮程序員的大規模數據的基礎 44
處理大規模數據的三個重點——寫程序的技巧 44
處理大規模數據之前的三大前提知識——程序開發的
底層基礎 45
第3章 操作係統的緩存和分布式
——高效處理大規模數據的原理 50
第8課 操作係統的緩存機製 51
在理解操作係統緩存的基礎上編寫應用程序——頁麵
緩存 51
虛擬內存機製 52
Linux頁麵緩存原理 54
VFS 56
Linux以頁麵為單位緩存磁盤 57
內存空閑時就緩存——通過sar確認 59
增加內存降低I/O負載 60
頁麵緩存是透明的 61
第9課 降低I/O負載的策略 67
以緩存為前提的降低I/O負載的策略 67
擴展到多颱服務器——無法全部緩存的情況 68
單純增加數量無法保證可擴展性 69
第10課 利用局部性的分布式 74
什麼是利用局部性的分布式? 74
Partitioning——考慮局部性的分布式 75
根據訪問模式分割成“島”——考慮局部性的分布式 78
以頁麵緩存為前提的基本應用規則 79
第4章 數據庫的橫嚮擴展策略
——以分布式為基礎的MySQL應用 82
第11課 正確應用索引
——分布式MySQL應用的大前提 83
分布式MySQL應用的三大要點 83
靈活應用操作係統緩存 83
索引的重點——B樹 86
索引的效果 89
確認索引是否有效的方法——explain命令 92
第12課 MySQL的分布式
——以擴展為前提的係統設計 95
MySQL的replication功能 95
master/slave的特徵——對參照係進行擴展,更新類
不擴展 96
第13課 MySQL的橫嚮擴展和Partitioning 99
MySQL的橫嚮擴展策略 99
關於Partitioning(錶分割)的補充 99
以Partitioning為前提的設計 99
避免JOIN——利用where…in… 102
Partitioning的代價 103
第2~4章的小結 107
第5章 大規模數據處理“實踐”入門
——應用程序開發的重點 108
第14課 特殊用途索引——處理大規模數據 109
索引和係統架構——超過RDBMS的處理能力時 109
特殊用途索引——使用調優後的數據結構 111
第15課 理論聯係實踐 115
探尋必須的技術條件 115
第2~5章小結 117
第6章 壓縮編程
——考慮數據大小和I/O加速之間的關係 118
第16課 [課題]以緊湊、簡潔方式保存整數數據 119
以緊湊方式保存整數數據 119
齣題意圖——解決該課題有什麼好處? 119
課題所用文件的內容 121
第17課 可變字節碼和速度的感覺 122
可變字節碼——用緊湊格式保存整數數據 122
可變字節碼的僞代碼 123
用“差”存儲已排序整數 126
(補充)壓縮的基礎 126
(補充)壓縮對象是整數的情形——背景理論 127
第18課 課題詳解及解答範例 129
課題詳解 129
(參考)pack()函數——將Perl內部數據結構以
二進製形式輸齣 131
(參考)二進製數據的read/write 133
(參考)性能分析 135
解答範例和思路 136
第7章 算法實用化
——從身邊的例子來看理論、研究的實踐投入 142
第19課 算法和算法評測 143
數據規模和復雜度的差異 143
何謂算法? 144
學習算法的意義——計算機資源有限,工程師的通用
語言 145
算法評測——復雜度記法 146
紙巾能摺疊幾次?——O(logn)和O(n)的差距 148
算法和數據結構——韆絲萬縷的聯係 149
復雜度和常數項——評測很重要 150
應用算法的實際情況——簡單就是美 151
靈活應用第三方實現——CPAN等 153
通過實例加深感受 155
第20課 Hatena Diary的關鍵字鏈接 156
什麼是關鍵字鏈接? 156
最初的實現 156
齣問題瞭!——關鍵字字典越來越大 157
用模式匹配實現關鍵字鏈接的問題 158
從正則錶達式到Trie——改變匹配的實現方式 158
Aho-Corasick算法 160
換成Regexp::List 162
關鍵字鏈接的實現、變遷和考察 163
第21課 Hatena Bookmark的文章分類 164
什麼是文章分類? 164
機器學習和大規模數據 165
大規模數據和Web服務——The Google Way of Science 166
貝葉斯過濾器的原理 167
算法實用化之路——Hatena Bookmark的實例 170
防守姿態和進攻姿態——從文檔分類功能說開去 171
第8章 Hatena關鍵字鏈接的實現
——理解通嚮應用之路 176
第22課 [課題]創建Hatena關鍵字鏈接 177
使用Aho-Corasick算法創建Hatena關鍵字鏈接 177
編寫測試 180
第23課 解答範例和思路 182
解答範例 182
第9章 挑戰全文搜索技術
——各種各樣的大規模數據處理經驗技巧 184
第24課 全文搜索技術的應用範圍 185
用Hatena的數據創建搜索引擎 185
Hatena Diray的全文搜索——搜索服務之外的搜索
係統 185
Hatena Bookmark的全文搜索——滿足細節要求的係統 187
第25課 搜索係統的架構 190
搜索係統所需的步驟 190
各種各樣的搜索引擎 191
全文搜索的種類 193
第26課 搜索引擎的內部結構 198
逆嚮索引的結構——Dictionary+Postings 198
Dictionary的創建方法——逆嚮索引的創建方法 200
小結 210
Postings的創建方法——逆嚮索引的創建方法 211
關於評分的補充 213
參考文獻 214
第10章 創建全文搜索引擎
——基本部分、改進、速度和準確度的要求 216
第27課 [課題]創建Hatena Bookmark全文搜索 217
開發全文搜索引擎 217
課題內容 217
示例數據格式和數據大小 218
字典的組成——Dictionary、Postings 219
界麵 220
基礎部分+改進 220
以速度和準確度一決勝負 221
第28課 答案範例和思路 223
解答範例 223
indexer.pl的實現 223
searcher.pl的實現 225
可以改善的地方 227
第11章 支持大規模數據處理的服務器/基礎設施入門
—— Web服務的後颱 230
第29課 企業軟件vs. Web服務 231
企業軟件vs. Web服務——應用範圍上的差異 231
Web服務的基礎設施——三個重點 233
第30課 雲vs.自行構建基礎設施 235
雲計算 235
雲的優缺點 235
Hatena應用的雲服務 236
自行構築基礎設施的優點 237
自行構建基礎設施和垂直結閤模型 239
Hatena的服務規模 240
Hatena Bookmark的係統架構圖 240
第12章 保證可擴展性的必要思路
——規模擴大和係統擴展 242
第31課 層和可擴展性 243
對可擴展性的要求——一颱服務器能處理的流量極限 243
各層的可擴展性 244
第32課 掌握負載進行調優 245
掌握負載——可視化的管理界麵 245
測量負載的指標——平均負載、內存和CPU相關信息 247
根據用途進行調優——麵嚮用戶的服務器和麵嚮爬蟲
的服務器 247
應用程序服務器、數據庫服務器的調優策略和服務器
數量 249
服務規模和調優 250
保證可擴展性 251
第13章 保證冗餘性和係統的穩定化
——實現100%在綫率的原理 252
第33課 保證冗餘性 253
保證冗餘性——應用程序服務器 253
保證冗餘性——數據庫服務器 254
保證冗餘性——存儲服務器 257
第34課 係統穩定化 261
保持係統穩定的權衡 261
係統的不穩定因素 262
第35課 係統穩定對策 267
實際的係統穩定對策——維持適當餘量,消滅不穩定
因素 267
第14章 提高效率
——提高硬件資源的使用率 270
第36課 虛擬化技術 271
引入虛擬化技術 271
虛擬化技術的效果 272
虛擬服務器的構建策略 273
總結虛擬化的優勢 275
虛擬化和運營——通過服務器管理工具在運營上發揮
虛擬化的優勢 276
虛擬化的注意點 277
第37課 硬件和提高效率
——實現低成本的關鍵技術 280
提高處理器性能 280
內存和硬盤成本下降 281
有效利用廉價硬件——以虛擬化為前提的硬件應用 282
SSD 284
第15章 Web服務和網絡
——通過網絡看服務增長 288
第38課 網絡的分界點 289
服務增長和網絡的分界點 289
1Gbps的極限——PC路由器的極限 289
500颱主機的極限——子網、ARP錶的極限 290
網絡架構的層次化 291
全球化 292
第39課 挑戰更高的極限 295
超越10Gbps的世界 295
Hatena的基礎設施——第11~15章的總結 296
第16章 特彆篇 當前構建Web服務需要的實踐技術
——應對大規模Web服務須知 298
特彆篇第1課 作業隊列係統TheSchwartz、Gearman 299
Web服務和請求 299
作業隊列係統入門 299
Hatena的作業隊列係統 300
通過日誌進行分析 302
特彆篇第2課 存儲方式的選擇RDBMS還是
key-value存儲 303
如何保存不斷增加的數據 303
選擇存儲係統的前提條件 304
存儲係統的種類 305
RDBMS 305
分布式key-value存儲 308
分布式文件係統 310
其他存儲 312
存儲係統的選擇策略 314
特彆篇第3課 緩存係統——Squid、Varnish 315
Web應用程序負載與代理/緩存係統 315
Squid——基本結構 317
Varnish 321
特彆篇第4課 計算集群——Hadoop 323
大量日誌數據的並行處理 323
MapReduce計算模型 323
Hadoop 325
索引 327
· · · · · · (
收起)