《大型网站技术架构:核心原理与案例分析》作者李智慧的翻译力作!
读透一本好书,少走十年弯路。
对于创业人来说,在瞬息万变的移动互联网世界求生存,寸秒就是寸金!如何在创业之初,就构建好适合业务长远发展的技术架构:以不变应万变、以可伸缩性对抗变化莫测的业务需求,为自己的发展赢得时间、为产品创造优秀的用户体验?本书针对此痛点,给出了适切中肯的建议。
作者深入阐述了设计原则、前端层、Web服务、数据存储层、缓存、异步处理等核心概念与技术,针对可能发生的问题一一剖析,为读者勾勒出了简明清晰的技术框架图。相信《互联网创业核心技术:构建可伸缩的Web应用》 可以成为开启读者可伸缩架构设计之旅的一个里程碑。
阅读本书并不需要拥有任何特定的编程技能,诸如Java、PHP、JavaScript、C#或者Ruby,因为伸缩性是Web应用开发中一个通用的挑战,与具体语言无关。
互联网创业热,技术人才不足的问题凸显出来,其中*稀缺的,是能够构建可伸缩系统的工程师,在机会来临时不掉链子。但是,大部分程序员在职业生涯中并没有太多机会有这样的实战经验,这方面的技术文档也比较稀缺、零散。本书弥补了这一空白,面向创业公司技术人员,系统、全面且有针对性地总结可伸缩方面的原则和实践,兼顾开发、运维和团队等主题,有很多接地气的建议,语言风格明快,因此原著获得了很好的口碑。更为难得的是,译者本身也是这一领域的专家,在业界有"教授"的美誉,有力保证了本书成为一部经得起考验的佳作。
--美团点评技术学院院长 刘江
互联网创业从0开始,之后迈出的每一步都是困难的。从0到1的过程不是瞬间完成,而是从0.01到0.02,直到1的蜕变。公司在不断发展与迭代的过程中,各种各样的技术问题也随之"野蛮"生长。如何解决系统的稳定性、可伸缩性等技术难题?本书或许能给你想要的答案。李智慧老师作为极客邦科技/InfoQ中国的专家讲师,长期致力于技术社区的发展。我愿推荐此书,和技术人共同成长。
--极客邦科技/InfoQ中国创始人兼CEO 霍泰稳
构建一个"能用的"应用系统与构建一个能够随着业务发展而扩展的系统完全是两回事。要想在用户量和业务量快速增长的环境下保持系统的扩展性,需要工程师熟悉互联网业务中"扩展"与"伸缩"的常用招数,并能够根据情况选择*合适的方案。本书系统地描述了互联网应用中的扩展性,在系统设计原则、前后端设计、存储设计方面进行了全面的描述,并详尽讨论了"异步"与"缓存"这两个扩展性法宝的各种使用场景。希望在本书的帮助下,工程师能够快速掌握解决伸缩性问题的钥匙,早日成为可信赖的技术达人。
--宜信宜人贷首席技术官 段念
2008年认识李智慧,从那时起,智慧参与阿里巴巴互联网基础技术平台的建设,并成为关键产品的代码贡献者。2014年智慧送了我一本他写的《大型网站技术架构:核心原理与案例分析》。翻看后,感觉智慧经历了这几年在大型网站的实践后,多了一份坚持总结和分享的能力。这是很多当时参与基础技术平台建设的同事所不具备的特质。近期,智慧告诉我他和另一位优秀的架构师何坤,一起翻译了本书。我翻看之下,很佩服他俩在工作之余还能坚持翻译此书。书中内容涉及前端、服务、数据库、缓存、异步消息和搜索,非常全面。全世界的大型网站并不多,能参与其中建设的只是小部分工程师,希望他们解决问题的思路能给各位读者一些启发。
--平安好医生 CTO 王齐
和智慧在阿里共事多年,一起经历了阿里巴巴技术平台化战略的关键时期。互联网技术与传统软件技术相比,*大的不同可能就是如何处理大并发大数据的挑战,而主要应对措施就是可伸缩的架构技术,期待本书成为互联网创业公司工程师的手边书,通过本书深入理解可伸缩系统架构的原理与设计。
--同盾创始人 蒋韬
目 录
1 核心概念 1
什么是伸缩性 ................................................................................................ 2
从单一服务器到全球用户的Web 架构演化 ............................................... 4
单一服务器 ............................................................................................ 5
使用更强的服务器:垂直伸缩 ............................................................ 6
服务分离 .............................................................................................. 10
内容分发网络:静态内容的伸缩性 .................................................. 12
分散访问流量:水平伸缩 .................................................................. 13
服务全球用户的伸缩性架构 .............................................................. 16
数据中心基础设施架构概览 ...................................................................... 18
前端 ...................................................................................................... 19
Web 应用层 .......................................................................................... 20
Web 服务层 .......................................................................................... 20
附加组件 .............................................................................................. 21
数据持久层 .......................................................................................... 21
数据中心基础架构 .............................................................................. 22
应用架构概览 .............................................................................................. 23
前端 ...................................................................................................... 24
Web 服务 .............................................................................................. 25
支撑技术 .............................................................................................. 29
小结 .............................................................................................................. 30
2 软件设计原则 31
简单 .............................................................................................................. 31
隐藏复杂与构建抽象 .......................................................................... 32
避免过度设计 ...................................................................................... 33
尝试测试驱动开发 .............................................................................. 34
从软件设计的简化范例中学习 .......................................................... 35
低耦合 .......................................................................................................... 36
促进低耦合 .......................................................................................... 37
避免不必要的耦合 .............................................................................. 39
低耦合范式 .......................................................................................... 40
不要重复自己(DRY) .............................................................................. 41
复制粘贴代码 ...................................................................................... 42
基于约定编程 .............................................................................................. 43
画架构图 ...................................................................................................... 46
用例图 .................................................................................................. 49
类图 ...................................................................................................... 50
模块图 .................................................................................................. 51
单一职责 ...................................................................................................... 52
改善单一职责 ...................................................................................... 52
单一职责的例子 .................................................................................. 53
开闭原则 ...................................................................................................... 53
依赖注入 ...................................................................................................... 55
控制反转(IOC) .............
任何大型网站都不是一蹴而就的,一定需要经过多年的技术磨练和沉淀。本书针对Web应用程序每一层的可伸缩性展开了全面细致的讨论,对互联网创业者的系统架构设计有莫大的帮助。
——UCloud CEO 季昕华
互联网创业热,技术人才不足的问题凸显出来,其中稀缺的,是能够构建可伸缩系统的工程师,在机会来临时不掉链子。但是,大部分程序员在职业生涯中并没有太多机会有这样的实战经验,这方面的技术文档也比较稀缺、零散。本书弥补了这一空白,面向创业公司技术人员,系统、全面且有针对性地总结可伸缩方面的原则和实践,兼顾开发、运维和团队等主题,有很多接地气的建议,语言风格明快,因此原著获得了很好的口碑。更为难得的是,译者本身也是这一领域的专家,在业界有“教授”的美誉,有力保证了本书成为一部经得起考验的佳作。
——美团点评技术学院院长 刘江
互联网创业从0开始,之后迈出的每一步都是困难的。从0到1的过程不是瞬间完成,而是从0.01到0.02,直到1的蜕变。公司在不断发展与迭代的过程中,各种各样的技术问题也随之“野蛮”生长。如何解决系统的稳定性、可伸缩性等技术难题?本书或许能给你想要的答案。李智慧老师作为极客邦科技/InfoQ中国的专家讲师,长期致力于技术社区的发展。我愿推荐此书,和技术人共同成长。
——极客邦科技/InfoQ中国创始人兼CEO 霍泰稳
构建一个“能用的”应用系统与构建一个能够随着业务发展而扩展的系统完全是两回事。要想在用户量和业务量快速增长的环境下保持系统的扩展性,需要工程师熟悉互联网业务中“扩展”与“伸缩”的常用招数,并能够根据情况选择合适的方案。本书系统地描述了互联网应用中的扩展性,在系统设计原则、前后端设计、存储设计方面进行了全面的描述,并详尽讨论了“异步”与“缓存”这两个扩展性法宝的各种使用场景。希望在本书的帮助下,工程师能够快速掌握解决伸缩性问题的钥匙,早日成为可信赖的技术达人。
——宜信宜人贷首席技术官 段念
2008年认识李智慧,从那时起,智慧参与阿里巴巴互联网基础技术平台的建设,并成为关键产品的代码贡献者。2014年智慧送了我一本他写的《大型网站技术架构:核心原理与案例分析》。翻看后,感觉智慧经历了这几年在大型网站的实践后,多了一份坚持总结和分享的能力。这是很多当时参与基础技术平台建设的同事所不具备的特质。近期,智慧告诉我他和另一位优秀的架构师何坤,一起翻译了本书。我翻看之下,很佩服他俩在工作之余还能坚持翻译此书。书中内容涉及前端、服务、数据库、缓存、异步消息和搜索,非常全面。全世界的大型网站并不多,能参与其中建设的只是小部分工程师,希望他们解决问题的思路能给各位读者一些启发。
——平安好医生 CTO 王齐
和智慧在阿里共事多年,一起经历了阿里巴巴技术平台化战略的关键时期。互联网技术与传统软件技术相比,不同可能就是如何处理大并发大数据的挑战,而主要应对措施就是可伸缩的架构技术,期待本书成为互联网创业公司工程师的手边书,通过本书深入理解可伸缩系统架构的原理与设计。
——同盾创始人 蒋韬