收藏一本书: 《大规模Web服务开发技术》

http://product.china-pub.com/57048日本人写

目录回到顶部↑

《大规模web服务开发技术》

第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

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.