[大规模Web服务开发技术] 中文目录

本书介绍大规模Web服务开发的知识,涵盖从开发定位到实践技巧。内容包括数据处理、系统架构、数据库扩展策略、算法实用化等多个方面,旨在帮助读者掌握处理大规模数据和服务扩展的关键技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日本人 著 , 李剑 翻译

第1章 大规模Web服务的开发定位——掌握整体 20

第0课 本书的起源——本书讲述的范围 21
从事大规模Web服务开发——面向大学生的Hatena实习 21
本书讲述的内容 21
本书不讲述的内容 23
致今后从事大规模Web服务的人 23
第1课 大规模服务和小规模服务 24
Hatena的服务规模 24
Hatena是大规模,Google、Facebook是超大规模 26
小规模服务和大规模服务的区别 27
应对大规模数据量 29
第2课 持续增长的服务和大规模化的障碍 31
Web服务的困难 31
Hatena的成长经历 31
系统增长战略——最小化开端、预见变化的管理和设计 35
第3课 服务开发现场 36
Hatena的技术团队体制 36
Hatena的沟通方式 37
服务开发的实际状况 37
开发所用的工具 39
总结 41


第2章 大规模数据处理入门——内存和磁盘、Web应用程序和负载 42
第4课 Hatena Bookmark的数据规模 43
以Hatena Bookmark为例介绍大规模数据 43
Hatena Bookmark的数据规模 43
针对大规模数据的查询——处理大规模数据的感觉 44
第5课 大规模数据处理的难点——内存和磁盘 46
为何处理大规模数据如此困难——因为无法在内存中计算 46
内存和磁盘的速度差异——内存要快105~106倍 46
为何磁盘这么慢?——内存和磁盘 47
操作系统层的加速处理 49
传输速度和总线的速度差异 49
第6课 可扩展性的要点 55
扩展和可扩展性 55
可扩展性的要点——CPU负载和I/O负载 56
Web应用程序和负载的关系 56
数据库的可扩展性很难保证 57
第7课 处理大规模数据的基础知识 62
面向程序员的大规模数据的基础 62
处理大规模数据的三个重点——写程序的技巧 62
处理大规模数据之前的三大前提知识——程序开发的底层基础 63


第3章 操作系统的缓存和分布式——高效处理大规模数据的原理 68
第8课 操作系统的缓存机制 69
在理解操作系统缓存的基础上编写应用程序——页面缓存 69
虚拟内存机制 70
Linux页面缓存原理 72
VFS 74
Linux以页面为单位缓存磁盘 75
内存空闲时就缓存——通过sar确认 77
增加内存降低I/O负载 78
页面缓存是透明的 79
第9课 降低I/O负载的策略 85
以缓存为前提的降低I/O负载的策略 85
扩展到多台服务器——无法全部缓存的情况 86
单纯增加数量无法保证可扩展性 87
第10课 利用局部性的分布式 92
什么是利用局部性的分布式? 92
Partitioning——考虑局部性的分布式 93
根据访问模式分割成“岛”——考虑局部性的分布式 96
以页面缓存为前提的基本应用规则 97


第4章 数据库的横向扩展策略——以分布式为基础的MySQL应用 100
第11课 正确应用索引——分布式MySQL应用的大前提 101
分布式MySQL应用的三大要点 101
灵活应用操作系统缓存 101
索引的重点——B树 104
索引的效果 107
确认索引是否有效的方法——explain命令 110
第12课 MySQL的分布式——以扩展为前提的系统设计 113
MySQL的replication功能 113
master/slave的特征——对参照系进行扩展,更新类不扩展 114
第13课 MySQL的横向扩展和Partitioning 117
MySQL的横向扩展策略 117
关于Partitioning(表分割)的补充 117
以Partitioning为前提的设计 117
避免JOIN——利用where…in… 120
Partitioning的代价 121
第2~4章的小结 125


第5章 大规模数据处理“实践”入门——应用程序开发的重点 126
第14课 特殊用途索引——处理大规模数据 127
索引和系统架构——超过RDBMS的处理能力时 127
特殊用途索引——使用调优后的数据结构 129
第15课 理论联系实践 133
探寻必须的技术条件 133
第2~5章小结 135


第6章 压缩编程——考虑数据大小和I/O加速之间的关系 136
第16课 [课题]以紧凑、简洁方式保存整数数据 137
以紧凑方式保存整数数据 137
出题意图——解决该课题有什么好处? 137
课题所用文件的内容 139
第17课 可变字节码和速度的感觉 140
可变字节码——用紧凑格式保存整数数据 140
可变字节码的伪代码 141
用“差”存储已排序整数 144
(补充)压缩的基础 144
(补充)压缩对象是整数的情形——背景理论 145
第18课 课题详解及解答范例 147
课题详解 147
(参考)pack()函数——将Perl内部数据结构以二进制形式输出 149
(参考)二进制数据的read/write 151
(参考)性能分析 153
解答范例和思路 154


第7章 算法实用化——从身边的例子来看理论、研究的实践投入 160
第19课 算法和算法评测 161
数据规模和复杂度的差异 161
何谓算法? 162
学习算法的意义——计算机资源有限,工程师的通用语言 163
算法评测——复杂度记法 164
纸巾能折叠几次?——O(logn)和O(n)的差距 166
算法和数据结构——千丝万缕的联系 167
复杂度和常数项——评测很重要 168
应用算法的实际情况——简单就是美 169
灵活应用第三方实现——CPAN等 171
通过实例加深感受 173
第20课 Hatena Diary的关键字链接 174
什么是关键字链接? 174
最初的实现 174
出问题了!——关键字字典越来越大 175
用模式匹配实现关键字链接的问题 176
从正则表达式到Trie——改变匹配的实现方式 176
Aho-Corasick算法 178
换成Regexp::List 180
关键字链接的实现、变迁和考察 181
第21课 Hatena Bookmark的文章分类 182
什么是文章分类? 182
机器学习和大规模数据 183
大规模数据和Web服务——The Google Way of Science 184
贝叶斯过滤器的原理 185
算法实用化之路——Hatena Bookmark的实例 188
防守姿态和进攻姿态——从文档分类功能说开去 189


第8章 Hatena关键字链接的实现——理解通向应用之路 194
第22课 [课题]创建Hatena关键字链接 195
使用Aho-Corasick算法创建Hatena关键字链接 195
编写测试 198
第23课 解答范例和思路 200
解答范例 200


第9章 挑战全文搜索技术——各种各样的大规模数据处理经验技巧 202
第24课 全文搜索技术的应用范围 203
用Hatena的数据创建搜索引擎 203
Hatena Diray的全文搜索——搜索服务之外的搜索系统 203
Hatena Bookmark的全文搜索——满足细节要求的系统 205
第25课 搜索系统的架构 208
搜索系统所需的步骤 208
各种各样的搜索引擎 209
全文搜索的种类 211
第26课 搜索引擎的内部结构 216
逆向索引的结构——Dictionary+Postings 216
Dictionary的创建方法——逆向索引的创建方法 218
小结 228
Postings的创建方法——逆向索引的创建方法 229
关于评分的补充 231
参考文献 232


第10章 创建全文搜索引擎——基本部分、改进、速度和准确度的要求 234
第27课 [课题]创建Hatena Bookmark全文搜索 235
开发全文搜索引擎 235
课题内容 235
示例数据格式和数据大小 236
字典的组成——Dictionary、Postings 237
界面 238
基础部分+改进 238
以速度和准确度一决胜负 239
第28课 答案范例和思路 241
解答范例 241
indexer.pl的实现 241
searcher.pl的实现 243
可以改善的地方 245


第11章 支持大规模数据处理的服务器/基础设施入门—— Web服务的后台 248
第29课 企业软件vs. Web服务 249
企业软件vs. Web服务——应用范围上的差异 249
Web服务的基础设施——三个重点 251
第30课 云vs.自行构建基础设施 253
云计算 253
云的优缺点 253
Hatena应用的云服务 254
自行构筑基础设施的优点 255
自行构建基础设施和垂直结合模型 257
Hatena的服务规模 258
Hatena Bookmark的系统架构图 258


第12章 保证可扩展性的必要思路——规模扩大和系统扩展 260
第31课 层和可扩展性 261
对可扩展性的要求——一台服务器能处理的流量极限 261
各层的可扩展性 262
第32课 掌握负载进行调优 263
掌握负载——可视化的管理界面 263
测量负载的指标——平均负载、内存和CPU相关信息 265
根据用途进行调优——面向用户的服务器和面向爬虫的服务器 265
应用程序服务器、数据库服务器的调优策略和服务器数量 267
服务规模和调优 268
保证可扩展性 269


第13章 保证冗余性和系统的稳定化——实现100%在线率的原理 270
第33课 保证冗余性 271
保证冗余性——应用程序服务器 271
保证冗余性——数据库服务器 272
保证冗余性——存储服务器 275
第34课 系统稳定化 279
保持系统稳定的权衡 279
系统的不稳定因素 280
第35课 系统稳定对策 285
实际的系统稳定对策——维持适当余量,消灭不稳定因素 285


第14章 提高效率——提高硬件资源的使用率 288
第36课 虚拟化技术 289
引入虚拟化技术 289
虚拟化技术的效果 290
虚拟服务器的构建策略 291
总结虚拟化的优势 293
虚拟化和运营——通过服务器管理工具在运营上发挥虚拟化的优势 294
虚拟化的注意点 295
第37课 硬件和提高效率——实现低成本的关键技术 298
提高处理器性能 298
内存和硬盘成本下降 299
有效利用廉价硬件——以虚拟化为前提的硬件应用 300
SSD 302


第15章 Web服务和网络——通过网络看服务增长 306
第38课 网络的分界点 307
服务增长和网络的分界点 307
1Gbps的极限——PC路由器的极限 307
500台主机的极限——子网、ARP表的极限 308
网络架构的层次化 309
全球化 310
第39课 挑战更高的极限 313
超越10Gbps的世界 313
Hatena的基础设施——第11~15章的总结 314


第16章 特别篇 当前构建Web服务需要的实践技术——应对大规模Web服务须知 316
特别篇第1课 作业队列系统TheSchwartz、Gearman 317
Web服务和请求 317
作业队列系统入门 317
Hatena的作业队列系统 318
通过日志进行分析 320
特别篇第2课 存储方式的选择RDBMS还是key-value存储 321
如何保存不断增加的数据 321
选择存储系统的前提条件 322
存储系统的种类 323
RDBMS 323
分布式key-value存储 326
分布式文件系统 328
其他存储 330
存储系统的选择策略 332
特别篇第3课 缓存系统——Squid、Varnish 333
Web应用程序负载与代理/缓存系统 333
Squid——基本结构 335
Varnish 339
特别篇第4课 计算集群——Hadoop 341
大量日志数据的并行处理 341
MapReduce计算模型 341
Hadoop 343
索引 345
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值