大规模Web服务开发技术


大规模Web服务开发技术

文章插图
大规模Web服务开发技术【大规模Web服务开发技术】《大规模Web服务开发技术》是电子工业出版社2011年7月出版的图书,作者是伊藤直也、田中慎司 。该书讲述了Web服务开发技术方面的知识 。
基本介绍书名:大规模Web服务开发技术
作者: [日]伊藤直也, 田中慎司
译者:李剑
ISBN:978-7-121-13884-3
页数:356页
定价:59.00元
开本:16开
内容简介Hatena 是日本最大的Web 服务提供商之一,它提供的服务包括关键字(类似于维基百科)、部落格、相册等 。本书的内容主要来自Hatena 为学生们举行的暑期实习的课程,内容涵盖广泛,介绍了性能最佳化、分散式、算法、系统架构等各个方面,甚至还介绍了硬体的经济成本,是运维工程师们必不可少的参考书 。该书中包括几个算法实习课题,介绍了压缩算法、全文搜寻等算法的实现方法,对于打算靠Web 创业的人不失为一本很不错的参考书 。译者序去年 8 月份,fcicq 向我推荐了《大规模Web 服务开发技术》这本书 。当时这本书刚刚出版,在日本着实火了一段时间 。后来到网上一查,发现我以前在日本的同事也写了一篇部落格推荐这本书,看样子这本书已成为Web 技术人员人手必备的参考读物了 。后来博文视点的策划编辑张春雨找到我,希望我翻译这本书 。我在日本工作期间,就对日本的IT 技术十分佩服,尤其是Web 相关技术,很多知名的技术大牛,如伊藤直也、小饲弹等都写过许多深入研究技术的文章,见解也相当独到 。而在日本的书店里,Web 技术的书籍也是琳琅满目,其中不乏珍品 。因此我很想找个机会把日本的技术书籍带到中国来 。于是,与张编辑一拍即合,当即接下了这本书的翻译任务 。正如这本书的前言里所说,这本书的内容主要来自Hatena株式会为学生们举行的暑期实习课程,因此其形式也是以讲义为主,风格和一般的技术读物略有不同 。其内容涵盖範围也很广,从性能最佳化、分散式,到算法、系统架构,甚至还介绍了硬体的经济成本 。最吸引人的就是书中的几个实习课题,介绍了压缩算法、全文搜寻等算法的实现方法 。在翻译该书时,我想到了以前做网站开发时的几件事 。第一件就是性能最佳化的重要性 。当时我们开发了一个类似于RSS 阅读器的网站,其中有个推荐功能,可以根据访问量、收藏人数等对文章进行社会化推荐 。由于计算量很大,因此只能写成批处理放到夜间执行,但执行效率实在不堪忍受——40 万的数据量,计算一次就要3 个小时 。后来我们对SQL 语句进行了最佳化,使得计算时间从3 小时一下子减少到了20 分钟 。第二件就是维护工作的辛苦程度 。网站对 Web 伺服器採用了分散式,将请求分散到32 台伺服器上 。每次版本更新,都要制定严密的更新计画,先改变负载均衡器设定,然后停掉一半伺服器,更新代码,再然后逐台测试;之后再切换负载均衡器以更新另一半伺服器并测试 。更新都是在深夜进行的,每次更新都会持续到凌晨3 点多才能下班 。第三件就是不可知事件的应对策略 。这本书里提到了Yahoo!攻击,这正是我们当年亲身经历过的 。当时晚上9 点多,我们突然收到了大量报警邮件,报告相册服务的负载过高 。一看伺服器已经几乎无法访问了 。调查之后发现,一名博主引用了相册中的图片,而这篇文章又被Yahoo!上的一篇新闻引用 。于是来自Yahoo!的巨大流量涌入我们的相册伺服器,导致服务中止 。后来,我们改变了相册服务的架构,并增加了快取机制,以避免这类事件再次发生 。对于运维高手来说,解决这些问题应该是轻车熟路了,但当时我们的团队没有类似的经验,只能自己慢慢摸索解决方法 。而Hatena 株式会的技术专家们将他们的运维经验写成了书,使我们有幸分享这些宝贵的经验和知识 。如果当时我们有这样一本书,这几个问题也就迎刃而解了 。愿这本书能对广大网站运维人员(特别是初涉该领域的新手们)有所帮助 。李 剑2011 年2 月27 日前言自己开发的 Web 服务,以后规模增大时系统能否承受得起?从事Web 开发的诸位中很多人都有这个顾虑吧,或者是系统每天都会陷入困境,如何才能打破这种状况?面对成长起来的Web 服务,整日愁眉苦脸的人一定存在吧 。我也有过完全相同的经历 。Hatena 网站,月访问人次1500 万,而我们参与了规模如此庞大的系统的开发和运营 。1000 台伺服器分担负载,100 多万用户不停地发表部落格或收藏社会化书籤,数据量每天都在激增,伺服器资源频频告急 。技术人员为了上GB、上TB 的数据量绞尽脑汁 。即便如此,流量的波涛也从未平息过 。曾几何时,Hatena 的团队尚未成熟,面对规模日益增大的系统束手无策 。庞大的数据和巨大的流量涌来,伺服器宕机、服务停止 。赶紧深夜跑过去重启伺服器,觉得总算能稳定了,清晨回家之后,发现伺服器又宕机了,这种事情也曾面对过 。怎样才能制服大规模服务这头野兽?本书凝聚了 Hatena 的技术人员在反覆试验中得到的技术和诀窍——即大规模服务技术的地图和指南 。本书是开发、运营大规模服务的技术者的入门书 。Web 服务在不断成长,当它的数据规模变大,处理起来也就不再易如反掌了,此时,怎样做才是正确的?为了避免系统宕机,写代码时应该注意什幺?设计高可扩展性(scalability)的系统时应该记住哪些要点?这些都是本书的内容 。Hatena 每年夏天都举办面向学生的、以就业体验为目的的实习活动(Hatena Summer Intern) 。这些实习活动会让学生参与到Hatena 的系统开发中 。我们把开发经验很少的学生们与正式员工同样看待,让他们获得大规模系统开发的成功经验,这就是Hatena 之道 。那幺,我们希望学生们在开发之前知道什幺呢?正是我们历经坎坷学到的大规模服务的开发和运维的知识 。通过实习计画,Hatena 的大规模服务技术的培训方法也有了体系 。本书就是以实习课程为基础,试图来说明大规模服务技术 。本书的内容从作业系统和计算机的原理开始,介绍资料库的分散式方法、实用算法在系统中的套用、能支撑海量数据的搜寻引擎的原理,以及统观系统全局的基础设施设计的知识等多个方面 。这是拥有 1500 万用户的Hatena 才能传达的真实的、实践性的技术和现场感 。缺乏经验的学生们在短短几天的培训中学到大规模服务开发所需的知识,在本书中得以系统化 。本书融汇了这些知识,努力做到妙趣横生、百读不厌,并让读者学到真正的知识 。希望本书能成为从事 Web 服务开发的所有工程师们的得力助手和工具 。2010 年6 月Hatena 株式会CTO 伊藤直也作品目录第 1 章大规模 Web 服务的开发定位——掌握整体..............2第0 课本书的起源——本书讲述的範围................................... 3从事大规模Web 服务开发——面向大学生的Hatena 实习... 3本书讲述的内容........................................................................ 3 本书不讲述的内容.................................................................... 5致今后从事大规模Web 服务的人........................................... 5第1 课大规模服务和小规模服务................................................. 6Hatena 的服务规模................................................................... 6Hatena 是大规模,Google、Facebook 是超大规模................ 8小规模服务和大规模服务的区别............................................ 9应对大规模数据量.................................................................. 11第2 课持续增长的服务和大规模化的障碍............................ 13Web 服务的困难...................................................................... 13Hatena 的成长经历................................................................. 13系统增长战略——最小化开端、预见变化的管理和设计... 17第3 课服务开发现场...................................................................... 18Hatena 的技术团队体制.......................................................... 18Hatena 的沟通方式................................................................. 19服务开发的实际状况.............................................................. 19开发所用的工具...................................................................... 21总结......................................................................................... 23第2 章大规模数据处理入门——记忆体和磁碟、Web 应用程式和负载..................24 第4 课 Hatena Bookmark 的数据规模....................................... 25以Hatena Bookmark 为例介绍大规模数据........................... 25Hatena Bookmark 的数据规模................................................ 25针对大规模数据的查询——处理大规模数据的感觉........... 26第5 课大规模数据处理的难点——记忆体和磁碟....................28为何处理大规模数据如此困难——因为无法在记忆体中计算 ..........................................................................................28记忆体和磁碟的速度差异——记忆体要快105~106 倍...............28为何磁碟这幺慢?——记忆体和磁碟.......................................29作业系统层的加速处理..........................................................31传输速度和汇流排的速度差异...................................................31第6 课可扩展性的要点..................................................................37扩展和可扩展性......................................................................37可扩展性的要点——CPU 负载和I/O 负载...........................38Web 应用程式和负载的关係..................................................38资料库的可扩展性很难保证...................................................39第7 课处理大规模数据的基础知识...........................................44面向程式设计师的大规模数据的基础...........................................44处理大规模数据的三个重点——写程式的技巧...................44处理大规模数据之前的三大前提知识——程式开发的底层基础 ..................................................................................45第3 章作业系统的快取和分散式 ——高效处理大规模数据的原理.................................50第8 课作业系统的快取机制........................................................51在理解作业系统快取的基础上编写应用程式——页面快取 ..........................................................................................51虚拟记忆体机制..........................................................................52Linux 页面快取原理................................................................54VFS...........................................................................................56Linux 以页面为单位快取磁碟................................................57记忆体空闲时就快取——通过sar 确认.....................................59增加记忆体降低I/O 负载...........................................................60页面快取是透明的..................................................................61第9 课降低 I/O 负载的策略.........................................................67以快取为前提的降低I/O 负载的策略...................................67扩展到多台伺服器——无法全部快取的情况.......................68单纯增加数量无法保证可扩展性...........................................69第10 课利用局部性的分散式...................................................... 74什幺是利用局部性的分散式?............................................ 74Partitioning——考虑局部性的分散式X.............................. 75根据访问模式分割成“岛”——考虑局部性的分散式Y... 78以页面快取为前提的基本套用规则.................................... 79 第4 章资料库的横向扩展策略——以分散式为基础的MySQL 套用.........................82第11 课正确套用索引——分散式MySQL 套用的大前提............................ 83分散式MySQL 套用的三大要点........................................ 83