第 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——考慮局部性的分布式X.............................. 75
根據訪問模式分割成“島”——考慮局部性的分布式Y... 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 的創建方法——逆向索引的創建方法1 .........200
小結......................................................................................210
Postings 的創建方法——逆向索引的創建方法2 ............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