基本信息
【插图】

编辑推荐
本书作者是www.alibaba.com网站构建的亲历者,拥有核心技术部门的一线工作经验,直接体验了大型网站构建与发展过程中的种种生与死,蜕与变,见证了一个网站架构从幼稚走向成熟稳定的历程。
没有晦涩难懂的术语,没有诘屈聱牙的文句,没有故弄玄虚的观点……
明明白白的语句,清清楚楚的文法,干净利落的建议——让读者直接体会网站架构的紧要处,不容马虎的关键点——这恰好是一个优秀的网站架构所必备的要素。
如果说“水不在深,有龙则灵”,那么对于想了解网站架构的读者而言,这本书恰好是“书不在多,有它则行!”
还犹豫什么呢?
任何建议与想法,请戳 http://weibo.com/u/2611548434 (@大型网站技术架构)
内容简介
作译者
目前就职英特尔亚太研发中心从事云计算与大数据方面的研发工作。
目录
第1篇 概述
1 大型网站架构演化 2
1.1 大型网站软件系统的特点 3
1.2 大型网站架构演化发展历程 4
1.2.1 初始阶段的网站架构 4
1.2.2 应用服务和数据服务分离 4
1.2.3 使用缓存改善网站性能 5
1.2.4 使用应用服务器集群改善网站的并发处理能力 6
1.2.5 数据库读写分离 7
1.2.6 使用反向代理和CDN加速网站响应 8
1.2.7 使用分布式文件系统和分布式数据库系统 9
1.2.8 使用NoSQL和搜索引擎 10
1.2.9 业务拆分 11
1.2.10 分布式服务 11
1.3 大型网站架构演化的价值观 13
1.3.1 大型网站架构技术的核心价值是随网站所需灵活应对 13
1.3.2 驱动大型网站技术发展的主要力量是网站的业务发展 13
1.4 网站架构设计误区 14
1.4.1 一味追随大公司的解决方案 14
前言
我想写一本关于网站架构方面的书源起于2011年年末至2012年年初发生的两件事。
2011年末,京东网图书促销,在打5折的基础上再满一百送一百,作为一个爱买书胜过爱读书的人,我对这种促销活动根本没有免疫力,于是兴致勃勃地在活动当天登录www.360buy.com,准备将收藏夹里的图书一网打尽。
往购物车里尽情地塞了一堆书后,点击“购买”按钮,但是浏览器迟迟没有响应,预感到京东的服务器可能因为并发访问量过高,超过了系统的最大负载能力,果然过了一会,浏览器页面显示“Service is too busy”。我不甘心,返回购物车页面继续点击“购买”按钮,浏览器继续显示“Service is too busy”。
于是我猜测:能够正常访问购物车,却不能成功购买,问题应该是出在订单系统,B2C网站生成一个订单需要经历扣减库存、扣减促销资源、更新用户账户等一系列操作,这些操作大多是数据库事务操作,没有办法通过缓存等手段来减轻数据库服务器负载压力,如果事前没有设计好数据库伸缩性架构,那么京东的技术团队将遇到一个大麻烦。
当天晚上,我登录新浪微博,看到京东的大老板刘强东发布了一条微博:“我已经紧急采购了10台服务器,增强网站后台,明天继续促销一天,一定让大家买到书”。即使在有成熟数据库伸缩性架构设计的前提下,进行一次数据库扩容也是件棘手的事,而京东只需要一个晚上就能搞定,让我对京东的技术实力刮目相看。
第二天一上班,我的第一件事就是登录点击“购买”按钮后悲剧地发现页面还是“Service is too busy”。当天晚上,刘强东又发布了一条微博:“请信息部的同事喝茶”。还配了一张照片:一张大桌子,只有一杯茶,旁边放了一把刀……
我想京东信息部的同事绝对不是有意要捉弄他们的老板和客户,很可能是他们错误地判断了系统的瓶颈及伸缩性架构的困难,对老板做出了过度承诺,而这背后折射出的是他们对网站架构的本质缺乏了解。
另一件事发生在2012年年初,当时的中国铁道部官方售票网站www.12306.cn在春运期间因为大量用户访问而崩溃,无法有效访问。12306作为一个运营不久的网站,缺乏大规模并发访问处理的经验,遇到一些问题其实不奇怪,不管花多少钱,经验教训都需要经历时间和挫折才能得到。奇怪的是,12306的架构师似乎对这种可能发生的大规模并发访问产生的问题完全没有一点概念,系统好像根本没有经过任何高并发场景下的性能评估和性能测试,就那么干脆利落地崩溃了,趴在那里长时间起不来。
这两件事情促使我想写一本关于网站架构的书,阐述网站技术架构最基本的驱动力,基础的架构设计原理,以及架构方案选择的价值观。希望软件工程师们在解决问题之前,能够认真思考自己面对的真正问题究竟是什么,有哪些技术方案可以选择,其基本原理是什么。所以这本书里没有高深的算法和聱牙诘屈的公式,也很少有程序代码。读者可以把本书当作网站架构设计的科普书,即使对网站架构没有什么了解,也能够比较轻松地阅读。
在本书的写作过程中(2012年下半年),没有再看到京东促销宕机的新闻,12306也逐渐稳定成熟。我们虽然无法猜测京东“信息部的同事”和12306网站的工程师们付出了多少努力,但能在相对比较短的时间里解决这些技术问题,也说明了网站架构其实并不难,真正能解决问题的技术一定是简单的。
本书致力于把这些简单的技术和道理呈现给读者。
如何阅读本书
我自己读书不求甚解,遇到看不懂的地方就跳过去,但是希望作者对难点和重点能换个角度和方式在后面章节再叙述,以帮助我重新思考和认识前面不能理解的重要知识。
机械制图的时候,通常使用三视图描述一个机械零件,从正视、侧视、俯视三个角度对一个零件绘图,从而全面描述一个零件的结构。软件架构设计中常用的4+1视图模型,也是一种多角度描述软件系统设计的手段。
本书中,重要的架构原理和技术方案都采用多角度描述的方法。
第1篇,从演化、模式、要素三个维度描述网站整体架构。
第2篇,从性能、可用性、伸缩性、扩展性、安全这五个要素方面详细描述网站架构核心原理,其中重要的负载均衡、异步处理、分布式缓存等技术方案又在不同章节从多角度进行描述。
第3篇,通过几个具体案例再一次从整体和局部描述网站架构方法。
第4篇,从架构师做事的角度回顾网站技术架构,读者在阅读前面技术章节感到枯燥的时候,也可以跳到本篇休闲放松下。
序言
传统的企业应用系统主要面对的技术挑战是处理复杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到。IT系统应用于企业管理已有超过半个世纪的历史,人们在这方面积累了大量的知识和经验(架构模式,领域分析,项目管理),而真正意义上大型网站从出现至今不过短短十多年的时间,很多技术挑战还在摸索阶段。市面上关于传统企业应用开发的书籍汗牛充栋,而真正能够深入全面地阐述大型网站技术架构的图书寥寥无几。所以很多人就很困惑:为什么很多看起来不是很复杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发呢?
值得庆幸的是,作者为我们带来了这本《大型网站技术架构:核心原理与案例分析》,比较全面地阐述了大型网站的主要技术挑战和解决方案。宏观层面上,将网站架构的演化发展、架构模式、核心要素一一道来;微观层面上,将网站架构常用的分布式缓存、负载均衡、消息队列、分布式服务、甚至网站如何发布运维都逐一进行了阐述。大型网站的技术之道尽在于此。
作者在阿里巴巴工作期间,一方面参与基础技术平台产品开发,一方面参与网站架构设计,这些经历使作者能够比较全面地从理论和实践两个视角去看待和描述网站架构。书中的技术内容基本都从为什么(Why)要这么做和如何去做(How)两个层面进行表述。读者可知其然并知其所以然。
阅读本书也许不能使你就此掌握大型网站架构设计的屠龙之术,但至少使你对网站架构的方法和思维方式能有全面了解。
开卷有益,应该指的就是这样的书。
支付宝研究员 潘磊
推荐序二
这些年互联网技术蓬勃发展,各种成熟的组件、工具、框架越来越丰富,各种理论逐渐发展成熟,各大公司公开的理论和实践资料也越来越多,在各个领域都有比较成熟的解决方案,但是研究领先互联网公司的架构,无论是Google、Facebook、Amazon还是淘宝、支付宝、腾讯、百度,都各有其独特的地方。
各个环节都有成熟的产品或者方案,为什么这么多互联网公司的架构还有如此明显的差异呢?是不是照着Google、Facebook、淘宝的架构做,就能做好一个“大型的互联网应用”呢?
正如本书中所言:“好的设计绝对不是模仿、不是生搬硬套某个模式,而是在对问题深刻理解之上的创造与创新,即使是‘微创新’,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解与把握。”
这些大型的互联网应用是设计出来的?还是演化出来的?在设计的过程中需要考虑哪些因素?演化过程中都会面临哪些问题,哪些挑战?
本书从性能、可用性、伸缩性、扩展性、安全性几个网站核心架构要素切入,全面地介绍了这些核心要素面临的问题域、理论基础及应对方案;对这几个方面进行系统地分析,结合目前成熟的解决方案,以及作者自己的工作经验,理论联系实际,踏实细致地提出合理的解决方案,非常值得我们学习和借鉴。
作者还通过对淘宝、Wikipedia、分布式存储系统、秒杀系统等案例的分析,仔细探讨了典型互联网架构的演进过程,剖析了分布式系统设计和实现中的挑战和解决方案,并研究了极端情况下,秒杀给网站带来的难以预计的瞬间高并发冲击的应对策略和架构设计。还通过一些实实在在发生过的故障案例分析,从另一个侧面来说明,我们在做技术架构时,需要考量的一些关键点,这些分享都是不可多得的血泪经验。
本书观点明确,涉及的问题域有针对性和全面性,对问题的分析过程清晰,提出的解决方案切实可行,充分结合了目前成功的互联网公司的架构经验,结合了作者丰富的工作经验,是一本值得行业内人士学习和关注的好书。
作者李智慧在互联网行业具有丰富的经验,在阿里巴巴工作的几年中担任架构师,参与过多个重要的项目和产品的架构设计,遇到和处理了很多复杂的问题,在这方面积累了大量的经验。本书是作者多年的架构师经历,以及时刻的思考和积累的结晶,一词一句都是经验之谈,都是智慧的闪亮。
感谢作者耗费精力给我们带来如此精炼而又内容丰富的一本好书。
支付宝资深架构师 王定乾
序
我为什么要写这本书
媒体评论
——IBM咨询经理 种新华
此书读来亲切,能用不到300页的篇幅将网站架构的过去及未来说得如此通俗易懂,与作者多年的亲身实践分不开,并由此想到一个问题:当此书人手一本的时候,阿里、腾讯、京东……的面试官们怎么办呢?
——Oracle资深工程师 付银海
智慧同学,人如其名,在阿里巴巴,人称“教授”,可见其博学多才。《大型网站技术架构:核心原理与案例分析》一书更是其多年积淀厚积薄发之作,涵盖构建大型互联网应用所需的关键技术,兼具实用性和前瞻性,无论是高并发、高性能还是海量数据处理、Web前端架构,都有针对性的解决之道。尤其难得的是此书还对架构师的内涵及技术管理有比较深刻地阐述,实在是同类书籍中难得一见的。作为互联网应用的开发者、架构师和创业者的你,一定不要错过本书,本书足以解决你的技术之忧。
——拓维信息平台研发总监 陈斌
教授(本书作者在阿里巴巴的昵称)曾在知名的大型互联网公司第一线浴血多年,经验不可谓不丰富,然而更难得的是他不仅博闻强记,更用行云流水的幽默文风,将现代大型互联网的内部要害一一庖解。也许各家细节略有不同,但大部分的大型互联网站基本都可以用这样的视角去解读。相信本书不仅对程序员,甚至对很多架构师也有参考价值,尤其值得关注的是教授在书中颇多技术之外的考量思索,我愿意称之为互联网基因。
——堆糖网技术合伙人 曹文炯
有幸拜读了这本《大型网站技术架构:核心原理与案例分析》,本书从多个层面说明了如何构建一个高可用、高性能、高可扩展性的网站系统,并结合了阿里巴巴及其他互联网企业先进的架构实践经验进行案例分析,讲述非常全面且具指导意义。本书从网站的架构设计、快速开发、高效部署、业务监控、服务治理、运维管理等多个角度描述了架构设计的相关重点,涉及的核心技术包括前端优化、CDN、反向代理、缓存、消息队列、分布式存储、分布式服务、NoSQL存储、搜索、监控、安全等一系列保证大型网站安全可靠运行的关键技术点。本书还提供了网站如何从小型网站伴随用户成长,逐步扩展到大型网站的架构演进思路,是互联网架构师们不可多得的一本技术参考书。
——中兴通讯总工程师 钱煜明
设计和规划一个网站的总体架构涉及方方面面的东西,备选的方案也很多,如何在五花八门,纷繁复杂的技术中构建最适合用户的网站架构,变成了一件极具争议和挑战性的工作。一个好的架构可以以最低的成本,在满足用户需求的同时,满足整个网站的架构灵活性;同样,一个糟糕的架构可能会让你的客户在花费了大量金钱后,得到一堆笨重、复杂且不切实际的东西,或是由于系统过于复杂,故障不断,或是由于架构不够灵活,阻碍业务的发展等等。
回顾网站架构的发展历程,我们可以发现任何大型网站架构的发展都非一蹴而就的,同自然界生物物竞天择的自然进化规律一样,大型网站的架构发展和演变也基本遵循着类似的规律。我们可能无法想象几年后网站架构的样子,因为在互联网行业快速变化的当下,你甚至很难准确地预测未来一年网站的产品演变方向,甚至网站流量规模。于是,产品设计师和工程师们提得最多的是迭代和演变,这在一个网站系统架构设计过程中显得尤为重要,因为我们永远无法像传统行业一样,去精确地估算,并按预先精确设计好的图纸去完成我们的产品。那是不是网站的架构设计和规划就毫无规律及章法可循了呢?答案显然不是,在互联网快速发展的今天,随着搜索引擎、电子商务、社交类等互联网产品逐步应用到每个人的身边,大型网站的架构及很多关键技术的发展,在逐步走向成熟。在构建一个大型网站过程中可能面临一些问题,人们正在尝试逐渐总结并积累出一些具有通用性的、经过验证的且成熟的局部解决方案,这也是本书将呈现给大家的内容。本书中,作者以自己多年大型互联网网站的架构经验,尝试总结当下这些互联网行业中相对成熟且经过大量案例检验的技术和方案。
相信通过阅读本书,您可以一窥大型网站架构的全貌。
——阿里巴巴技术专家 余俊
循序渐进,娓娓道来,语言生动,举重若轻。
——阿里云高级专家 李文兆
书摘
传统的企业应用系统主要面对的技术挑战是处理复杂凌乱、千变万化的所谓业务逻辑,而大型网站主要面对的技术挑战是处理超大量的用户访问和海量的数据处理;前者的挑战来自功能性需求,后者的挑战来自非功能性需求;功能性需求也许还有“人月神话”聊以自慰,通过增加人手解决问题,而非功能需求大多是实实在在的技术难题,无论有多少工程师,做不到就是做不到。IT系统应用于企业管理已有超过半个世纪的历史,人们在这方面积累了大量的知识和经验(架构模式,领域分析,项目管理),而真正意义上大型网站从出现至今不过短短十多年的时间,很多技术挑战还在摸索阶段。市面上关于传统企业应用开发的书籍汗牛充栋,而真正能够深入全面地阐述大型网站技术架构的图书寥寥无几。所以很多人就很困惑:为什么很多看起来不是很复杂的网站,比如 Facebook、淘宝,都需要大量顶尖高手来开发呢?
值得庆幸的是,作者为我们带来了这本《大型网站技术架构:核心原理与案例分析》,比较全面地阐述了大型网站的主要技术挑战和解决方案。宏观层面上,将网站架构的演化发展、架构模式、核心要素一一道来;微观层面上,将网站架构常用的分布式缓存、负载均衡、消息队列、分布式服务、甚至网站如何发布运维都逐一进行了阐述。大型网站的技术之道尽在于此。
作者在阿里巴巴工作期间,一方面参与基础技术平台产品开发,一方面参与网站架构设计,这些经历使作者能够比较全面地从理论和实践两个视角去看待和描述网站架构。书中的技术内容基本都从为什么(Why)要这么做和如何去做(How)两个层面进行表述。读者可知其然并知其所以然。
阅读本书也许不能使你就此掌握大型网站架构设计的屠龙之术,但至少使你对网站架构的方法和思维方式能有全面了解。
开卷有益,应该指的就是这样的书。
支付宝研究员 潘磊
推荐序二
这些年互联网技术蓬勃发展,各种成熟的组件、工具、框架越来越丰富,各种理论逐渐发展成熟,各大公司公开的理论和实践资料也越来越多,在各个领域都有比较成熟的解决方案,但是研究领先互联网公司的架构,无论是Google、Facebook、Amazon还是淘宝、支付宝、腾讯、百度,都各有其独特的地方。
各个环节都有成熟的产品或者方案,为什么这么多互联网公司的架构还有如此明显的差异呢?是不是照着Google、Facebook、淘宝的架构做,就能做好一个“大型的互联网应用”呢?
正如本书中所言:“好的设计绝对不是模仿、不是生搬硬套某个模式,而是在对问题深刻理解之上的创造与创新,即使是‘微创新’,也是让人耳目一新的似曾相识。山寨与创新的最大区别不在于是否抄袭、是否模仿,而在于对问题和需求是否真正理解与把握。”
这些大型的互联网应用是设计出来的?还是演化出来的?在设计的过程中需要考虑哪些因素?演化过程中都会面临哪些问题,哪些挑战?
本书从性能、可用性、伸缩性、扩展性、安全性几个网站核心架构要素切入,全面地介绍了这些核心要素面临的问题域、理论基础及应对方案;对这几个方面进行系统地分析,结合目前成熟的解决方案,以及作者自己的工作经验,理论联系实际,踏实细致地提出合理的解决方案,非常值得我们学习和借鉴。
作者还通过对淘宝、Wikipedia、分布式存储系统、秒杀系统等案例的分析,仔细探讨了典型互联网架构的演进过程,剖析了分布式系统设计和实现中的挑战和解决方案,并研究了极端情况下,秒杀给网站带来的难以预计的瞬间高并发冲击的应对策略和架构设计。还通过一些实实在在发生过的故障案例分析,从另一个侧面来说明,我们在做技术架构时,需要考量的一些关键点,这些分享都是不可多得的血泪经验。
本书观点明确,涉及的问题域有针对性和全面性,对问题的分析过程清晰,提出的解决方案切实可行,充分结合了目前成功的互联网公司的架构经验,结合了作者丰富的工作经验,是一本值得行业内人士学习和关注的好书。
作者李智慧在互联网行业具有丰富的经验,在阿里巴巴工作的几年中担任架构师,参与过多个重要的项目和产品的架构设计,遇到和处理了很多复杂的问题,在这方面积累了大量的经验。本书是作者多年的架构师经历,以及时刻的思考和积累的结晶,一词一句都是经验之谈,都是智慧的闪亮。
感谢作者耗费精力给我们带来如此精炼而又内容丰富的一本好书。
支付宝资深架构师 王定乾