大型网站技术架构:核心原理与案例分析


大型网站技术架构:核心原理与案例分析

文章插图
大型网站技术架构:核心原理与案例分析【大型网站技术架构:核心原理与案例分析】《大型网站技术架构:核心原理与案例分析》是2013年电子工业出版社出版的图书,作者是李智慧 。
该书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型网际网路架构设计的核心原理 。
基本介绍书名:大型网站技术架构:核心原理与案例分析
作者:李智慧
ISBN:978-7-121-21200-0
页数:240
定价:59.00元
出版社:电子工业出版社
出版时间:2013年9月出版
装帧:平装
开本:16开
编辑推荐本书作者是阿里巴巴网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历程 。没有晦涩难懂的术语,没有诘屈聱牙的文句,没有故弄玄虚的观点……明明白白的语句,清清楚楚的文法,乾净利落的建议——让读者直接体会网站架构的紧要处,不容马虎的关键点——这恰好是一个优秀的网站架构所必备的要素 。如果说“水不在深,有龙则灵”,那幺对于想了解网站架构的读者而言,这本书恰好是“书不在多,有它则行!”还犹豫什幺呢?内容简介本书通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型网际网路架构设计的核心原理,并通过一组典型网站技术架构设计案例,为读者呈现一幅包括技术选型、架构设计、性能最佳化、Web 安全、系统发布、运维监控等在内的大型网站开发全景视图 。本书不仅适用于指导网站工程师、架构师进行网站技术架构设计,也可用于指导产品经理、项目经理、测试运维人员等了解网站技术架构的基础概念;还可供包括企业系统开发人员在内的各类软体开发从业人员借鉴,了解大型网站的解决方案和开发理念 。图书目录第1篇 概述1 大型网站架构演化 21.1 大型网站软体系统的特点 31.2 大型网站架构演化发展历程 41.2.1 初始阶段的网站架构 41.2.2 套用服务和数据服务分离 41.2.3 使用快取改善网站性能 51.2.4 使用套用伺服器集群改善网站的并发处理能力 61.2.5 资料库读写分离 71.2.6 使用反向代理和CDN加速网站回响 81.2.7 使用分散式档案系统和分散式资料库系统 91.2.8 使用NoSQL和搜寻引擎 101.2.9 业务拆分 111.2.10 分散式服务 111.3 大型网站架构演化的价值观 131.3.1 大型网站架构技术的核心价值是随网站所需灵活应对 131.3.2 驱动大型网站技术发展的主要力量是网站的业务发展 131.4 网站架构设计误区 141.4.1 一味追随大公司的解决方案 141.4.2 为了技术而技术 141.4.3 企图用技术解决所有问题 141.5 小结 152 大型网站架构模式 162.1 网站架构模式 162.1.1 分层 172.1.2 分割 182.1.3 分散式 182.1.4 集群 192.1.5 快取 202.1.6 异步 202.1.7 冗余 212.1.8 自动化 222.1.9 安全 232.2 架构模式在新浪微博的套用 232.3 小结 253 大型网站核心架构要素 263.1 性能 273.2 可用性 283.3 伸缩性 293.4 扩展性 303.5 安全性 303.6 小结 31第2篇 架构4 瞬时回响:网站的高性能架构 344.1 网站性能测试 354.1.1 不同视角下的网站性能 354.1.2 性能测试指标 364.1.3 性能测试方法 394.1.4 性能测试报告 414.1.5 性能最佳化策略 414.2 Web前端性能最佳化 424.2.1 浏览器访问最佳化 424.2.2 CDN加速 434.2.3 反向代理 444.3 套用伺服器性能最佳化 454.3.1 分散式快取 454.3.2 异步操作 524.3.3 使用集群 534.3.4 代码最佳化 544.4 存储性能最佳化 584.4.1 机械硬碟vs. 固态硬碟 584.4.2 B+树vs. LSM树 594.4.3 RAID vs. HDFS 614.5 小结 645 万无一失:网站的高可用架构 665.1 网站可用性的度量与考核 675.1.1 网站可用性度量 675.1.2 网站可用性考核 675.2 高可用的网站架构 695.3 高可用的套用 715.3.1 通过负载均衡进行无状态服务的失效转移 725.3.2 套用伺服器集群的Session管理 735.4 高可用的服务 765.5 高可用的数据 785.5.1 CAP原理 795.5.2 数据备份 825.5.3 失效转移 845.6 高可用网站的软体质量保证 855.6.1 网站发布 855.6.2 自动化测试 865.6.3 预发布验证 875.6.4 代码控制 885.6.5 自动化发布 905.6.6 灰度发布 915.7 网站运行监控 915.7.1 监控数据採集 925.7.2 监控管理 935.8 小结 946 永无止境:网站的伸缩性架构 956.1 网站架构的伸缩性设计 976.1.1 不同功能进行物理分离实现伸缩 976.1.2 单一功能通过集群规模实现伸缩 986.2 套用伺服器集群的伸缩性设计 996.2.1 HTTP重定向负载均衡 1006.2.2 DNS域名解析负载均衡 1016.2.3 反向代理负载均衡 1026.2.4 IP负载均衡 1036.2.5 数据链路层负载均衡 104 6.2.6 负载均衡算法 1056.3 分散式快取集群的伸缩性设计 1066.3.1 Memcached分散式快取集群的访问模型 1076.3.2 Memcached分散式快取集群的伸缩性挑战 1076.3.3 分散式快取的一致性Hash算法 1096.4 数据存储伺服器集群的伸缩性设计 1126.4.1 关係资料库集群的伸缩性设计 1136.4.2 NoSQL资料库的伸缩性设计 1176.5 小结 1197 随需应变:网站的可扩展架构 1217.1 构建可扩展的网站架构 1227.2 利用分散式讯息伫列降低系统耦合性 1237.2.1 事件驱动架构 1237.2.2 分散式讯息伫列 1247.3 利用分散式服务打造可复用的业务平台 1267.3.1 Web Service与企业级分散式服务 1287.3.2 大型网站分散式服务的需求与特点 1297.3.3 分散式服务框架设计 1307.4 可扩展的数据结构 1317.5 利用开放平台建设网站生态圈 1327.6 小结 1348 固若金汤:网站的安全架构 1358.1 道高一尺魔高一丈的网站套用攻击与防御 1368.1.1 XSS攻击 1368.1.2 注入攻击 1388.1.3 CSRF攻击 1398.1.4 其他攻击和漏洞 1408.1.5 Web套用防火墙 1418.1.6 网站安全漏洞扫描 1428.2 信息加密技术及密钥安全管理 1428.2.1 单向散列加密 1438.2.2 对称加密 1448.2.3 非对称加密 1448.2.4 密钥安全管理 1458.3 信息过滤与反垃圾 1468.3.1 文本匹配 1478.3.2 分类算法 1488.3.3 黑名单 1498.4 电子商务风险控制 1508.4.1 风险 1518.4.2 风控 1518.5 小结 153第3篇 案例9 淘宝网的架构演化案例分析 1569.1 淘宝网的业务发展历程 1579.2 淘宝网技术架构演化 1589.3 小结 16210 维基百科的高性能架构设计分析 16310.1 Wikipedia网站整体架构 16310.2 Wikipedia性能最佳化策略 16510.2.1 Wikipedia前端性能最佳化 16510.2.2 Wikipedia服务端性能最佳化 16610.2.3 Wikipedia后端性能最佳化 16711 海量分散式存储系统Doris的高可用架构设计分析 16911.1 分散式存储系统的高可用架构 17011.2 不同故障情况下的高可用解决方案 171 11.2.1 分散式存储系统的故障分类 17211.2.2 正常情况下系统访问结构 17211.2.3 瞬时故障的高可用解决方案 17311.2.4 临时故障的高可用解决方案 17411.2.5 永久故障的高可用解决方案 17512 网购秒杀系统架构设计案例分析 17612.1 秒杀活动的技术挑战 17712.2 秒杀系统的应对策略 17712.3 秒杀系统架构设计 17812.4 小结 18213 大型网站典型故障案例分析 18313.1 写日誌也会引发故障 18413.2 高并发访问资料库引发的故障 18413.3 高并发情况下锁引发的故障 18513.4 快取引发的故障 18513.5 套用启动不同步引发的故障 18613.6 大档案读写独占磁碟引发的故障 18613.7 滥用生产环境引发的故障 18713.8 不规範的流程引发的故障 18713.9 不好的编程习惯引发的故障 18813.10 小结 188第4篇 架构师14 架构师领导艺术 19014.1 关注人而不是产品 19114.2 发掘人的优秀 19114.3 共享美好蓝图 19214.4 共同参与架构 19314.5 学会妥协 19414.6 成就他人 19415 网站架构师职场攻略 19615.1 发现问题,寻找突破 19715.2 提出问题,寻求支持 19915.3 解决问题,达成绩效 20116 漫话网站架构师 20316.1 按作用划分架构师 20316.2 按效果划分架构师 20416.3 按职责角色划分架构师 20516.4 按关注层次划分架构师 20516.5 按口碑划分架构师 20616.6 非主流方式划分架构师 207附录A 大型网站架构技术一览 208附录B Web开发技术发展历程 215后记 218精彩节摘推荐序一传统的企业套用系统主要面对的技术挑战是处理複杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到 。IT系统套用于企业管理已有超过半个世纪的历史,人们在这方面积累了大量的知识和经验(架构模式,领域分析,项目管理),而真正意义上大型网站从出现至今不过短短十多年的时间,很多技术挑战还在摸索阶段 。市面上关于传统企业套用开发的书籍汗牛充栋,而真正能够深入全面地阐述大型网站技术架构的图书寥寥无几 。所以很多人就很困惑:为什幺很多看起来不是很複杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发呢? 值得庆幸的是,作者为我们带来了这本《大型网站技术架构:核心原理与案例分析》,比较全面地阐述了大型网站的主要技术挑战和解决方案 。巨观层面上,将网站架构的演化发展、架构模式、核心要素一一道来;微观层面上,将网站架构常用的分散式快取、负载均衡、讯息伫列、分散式服务、甚至网站如何发布运维都逐一进行了阐述 。大型网站的技术之道尽在于此 。作者在阿里巴巴工作期间,一方面参与基础技术平台产品开发,一方面参与网站架构设计,这些经历使作者能够比较全面地从理论和实践两个视角去看待和描述网站架构 。书中的技术内容基本都从为什幺(Why)要这幺做和如何去做(How)两个层面进行表述 。读者可知其然并知其所以然 。阅读本书也许不能使你就此掌握大型网站架构设计的屠龙之术,但至少使你对网站架构的方法和思维方式能有全面了解 。开卷有益,应该指的就是这样的书 。支付宝研究员 潘磊推荐序二这些年网际网路技术蓬勃发展,各种成熟的组件、工具、框架越来越丰富,各种理论逐渐发展成熟,各大公司公开的理论和实践资料也越来越多,在各个领域都有比较成熟的解决方案,但是研究领先网际网路公司的架构,无论是Google、Facebook、Amazon还是淘宝、支付宝、腾讯、百度,都各有其独特的地方 。各个环节都有成熟的产品或者方案,为什幺这幺多网际网路公司的架构还有如此明显的差异呢?是不是照着Google、Facebook、淘宝的架构做,就能做好一个“大型的网际网路套用”呢?正如本书中所言:“好的设计绝对不是模仿、不是生搬硬套某个模式,而是在对问题深刻理解之上的创造与创新,即使是‘微创新’,也是让人耳目一新的似曾相识 。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解与把握 。”这些大型的网际网路套用是设计出来的?还是演化出来的?在设计的过程中需要考虑哪些因素?演化过程中都会面临哪些问题,哪些挑战?本书从性能、可用性、伸缩性、扩展性、安全性几个网站核心架构要素切入,全面地介绍了这些核心要素麵临的问题域、理论基础及应对方案;对这几个方面进行系统地分析,结合成熟的解决方案,以及作者自己的工作经验,理论联繫实际,踏实细緻地提出合理的解决方案,非常值得我们学习和借鉴 。作者还通过对淘宝、Wikipedia、分散式存储系统、秒杀系统等案例的分析,仔细探讨了典型网际网路架构的演进过程,剖析了分散式系统设计和实现中的挑战和解决方案,并研究了极端情况下,秒杀给网站带来的难以预计的瞬间高并发冲击的应对策略和架构设计 。还通过一些实实在在发生过的故障案例分析,从另一个侧面来说明,我们在做技术架构时,需要考量的一些关键点,这些分享都是不可多得的血泪经验 。本书观点明确,涉及的问题域有针对性和全面性,对问题的分析过程清晰,提出的解决方案切实可行,充分结合了成功的网际网路公司的架构经验,结合了作者丰富的工作经验,是一本值得行业内人士学习和关注的好书 。作者李智慧在网际网路行业具有丰富的经验,在阿里巴巴工作的几年中担任架构师,参与过多个重要的项目和产品的架构设计,遇到和处理了很多複杂的问题,在这方面积累了大量的经验 。本书是作者多年的架构师经历,以及时刻的思考和积累的结晶,一词一句都是经验之谈,都是智慧的闪亮 。感谢作者耗费精力给我们带来如此精炼而又内容丰富的一本好书 。支付宝资深架构师 王定乾作者简介李智慧曾在阿里巴巴担任技术专家,参与阿里巴巴基础技术平台开发和阿里巴巴架构设计 。就职英特尔亚太研发中心从事云计算与大数据方面的研发工作 。媒体评论这是我看过的最接地气的一本介绍网际网路架构的书籍,深入阐述了大型网站所面临的各种架构问题及解决方案,内容通俗易懂,而且对架构师的领导艺术进行了介绍,很值得从事网际网路的技术人员学习和参考 。IBM谘询经理 种新华此书读来亲切,能用不到300页的篇幅将网站架构的过去及未来说得如此通俗易懂,与作者多年的亲身实践分不开,并由此想到一个问题:当此书人手一本的时候,阿里、腾讯、京东……的面试官们怎幺办呢?Oracle资深工程师 付银海智慧同学,人如其名,在阿里巴巴,人称“教授”,可见其博学多才 。《大型网站技术架构:核心原理与案例分析》一书更是其多年积澱厚积薄发之作,涵盖构建大型网际网路套用所需的关键技术,兼具实用性和前瞻性,无论是高并发、高性能还是海量数据处理、Web前端架构,都有针对性的解决之道 。尤其难得的是此书还对架构师的内涵及技术管理有比较深刻地阐述,实在是同类书籍中难得一见的 。作为网际网路套用的开发者、架构师和创业者的你,一定不要错过本书,本书足以解决你的技术之忧 。拓维信息平台研发总监 陈斌教授(本书作者在阿里巴巴的暱称)曾在知名的大型网际网路公司第一线浴血多年,经验不可谓不丰富,然而更难得的是他不仅博闻强记,更用行云流水的幽默文风,将现代大型网际网路的内部要害一一庖解 。也许各家细节略有不同,但大部分的大型网际网路站基本都可以用这样的视角去解读 。相信本书不仅对程式设计师,甚至对很多架构师也有参考价值,尤其值得关注的是教授在书中颇多技术之外的考量思索,我愿意称之为网际网路基因 。堆糖网技术合伙人 曹文炯有幸拜读了这本《大型网站技术架构:核心原理与案例分析》,本书从多个层面说明了如何构建一个高可用、高性能、高可扩展性的网站系统,并结合了阿里巴巴及其他网际网路企业先进的架构实践经验进行案例分析,讲述非常全面且具指导意义 。本书从网站的架构设计、快速开发、高效部署、业务监控、服务治理、运维管理等多个角度描述了架构设计的相关重点,涉及的核心技术包括前端最佳化、CDN、反向代理、快取、讯息伫列、分散式存储、分散式服务、NoSQL存储、搜寻、监控、安全等一系列保证大型网站安全可靠运行的关键技术点 。本书还提供了网站如何从小型网站伴随用户成长,逐步扩展到大型网站的架构演进思路,是网际网路架构师们不可多得的一本技术参考书 。中兴通讯总工程师 钱煜明设计和规划一个网站的总体架构涉及方方面面的东西,备选的方案也很多,如何在五花八门,纷繁複杂的技术中构建最适合用户的网站架构,变成了一件极具争议和挑战性的工作 。一个好的架构可以以最低的成本,在满足用户需求的同时,满足整个网站的架构灵活性;同样,一个糟糕的架构可能会让你的客户在花费了大量金钱后,得到一堆笨重、複杂且不切实际的东西,或是由于系统过于複杂,故障不断,或是由于架构不够灵活,阻碍业务的发展等等 。回顾网站架构的发展历程,我们可以发现任何大型网站架构的发展都非一蹴而就的,同自然界生物物竞天择的自然进化规律一样,大型网站的架构发展和演变也基本遵循着类似的规律 。我们可能无法想像几年后网站架构的样子,因为在网际网路行业快速变化的当下,你甚至很难準确地预测未来一年网站的产品演变方向,甚至网站流量规模 。于是,产品设计师和工程师们提得最多的是叠代和演变,这在一个网站系统架构设计过程中显得尤为重要,因为我们永远无法像传统行业一样,去精确地估算,并按预先精确设计好的图纸去完成我们的产品 。那是不是网站的架构设计和规划就毫无规律及章法可循了呢?答案显然不是,在网际网路快速发展的今天,随着搜寻引擎、电子商务、社交类等网际网路产品逐步套用到每个人的身边,大型网站的架构及很多关键技术的发展,在逐步走向成熟 。在构建一个大型网站过程中可能面临一些问题,人们正在尝试逐渐总结并积累出一些具有通用性的、经过验证的且成熟的局部解决方案,这也是本书将呈现给大家的内容 。本书中,作者以自己多年大型网际网路网站的架构经验,尝试总结当下这些网际网路行业中相对成熟且经过大量案例检验的技术和方案 。相信通过阅读本书,您可以一窥大型网站架构的全貌 。阿里巴巴技术专家 余俊循序渐进,娓娓道来,语言生动,举重若轻 。阿里云高级专家 李文兆