新書推薦:
《
跟着渤海小吏读历史:大唐气象(全三册)
》
售價:NT$
989.0
《
心智的构建:大脑如何创造我们的精神世界
》
售價:NT$
352.0
《
美国小史(揭秘“美国何以成为美国”,理解美国的经典入门读物)
》
售價:NT$
352.0
《
中国古代北方民族史丛书——东胡史
》
售價:NT$
576.0
《
巨人传(插图珍藏本)
》
售價:NT$
3289.0
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:NT$
332.0
《
偿还:债务与财富的阴暗面
》
售價:NT$
347.0
《
清华大学藏战国竹简校释(壹):《命训》诸篇
》
售價:NT$
408.0
|
編輯推薦: |
《大型网站技术架构:核心原理与案例分析》作者李智慧的翻译力作!
读透一本好书,少走十年弯路。
对于创业人来说,在瞬息万变的移动互联网世界求生存,寸秒就是寸金!如何在创业之初,就构建好适合业务长远发展的技术架构:以不变应万变、以可伸缩性对抗变化莫测的业务需求,为自己的发展赢得时间、为产品创造优秀的用户体验?本书针对此痛点,给出了适切中肯的建议。
作者深入阐述了设计原则、前端层、Web服务、数据存储层、缓存、异步处理等核心概念与技术,针对可能发生的问题一一剖析,为读者勾勒出了简明清晰的技术框架图。相信《互联网创业核心技术:构建可伸缩的Web应用》 可以成为开启读者可伸缩架构设计之旅的一个里程碑。
阅读本书并不需要拥有任何特定的编程技能,诸如Java、PHP、JavaScript、C#或者Ruby,因为伸缩性是Web应用开发中一个通用的挑战,与具体语言无关。
|
內容簡介: |
《大型网站技术架构:核心原理与案例分析》作者李智慧的翻译力作!读透一本好书,少走十年弯路。对于创业人来说,在瞬息万变的移动互联网世界求生存,寸秒就是寸金!如何在创业之初,就构建好适合业务长远发展的技术架构:以不变应万变、以可伸缩性对抗变化莫测的业务需求,为自己的发展赢得时间、为产品创造优秀的用户体验?本书针对此痛点,给出了适切中肯的建议。作者深入阐述了设计原则、前端层、Web服务、数据存储层、缓存、异步处理等核心概念与技术,针对可能发生的问题一一剖析,为读者勾勒出了简明清晰的技术框架图。相信《互联网创业核心技术:构建可伸缩的Web应用》 可以成为开启读者可伸缩架构设计之旅的一个里程碑。阅读本书并不需要拥有任何特定的编程技能,诸如Java、PHP、JavaScript、C#或者Ruby,因为伸缩性是Web应用开发中一个通用的挑战,与具体语言无关。
|
關於作者: |
ArturEjsmont 是一位充满激情的软件工程师及敏捷领导者,目前就职于雅虎悉尼。Artur 从事 Web 应用方面的开发工作已经超过十年,同时也大量关注敏捷及创业公司管理,热爱精益创业模型。Artur 开发的网站每小时 PV 数超过一百万,为欧洲及澳洲两个大洲的用户提供服务。他还在大学开设课程,分享他的技术与知识。作为一名科技作家、博客写手、技术演讲者,Artur 对技术社区有许多积极的贡献。
李智慧,曾供职阿里巴巴及英特尔亚太研发中心,从事分布式系统与大数据方面的开发。《大型网站技术架构:核心原理与案例分析》作者。目前正在互联网方面创业。
何坤,宅米首席架构师,前阿里巴巴平台架构师。曾参与阿里中文站架构建设,以及WebX 框架、云计算存储平台 Doris 等核心系统研发。曾就职丰联金融证券期货部任首席架构师。对大型互联网站架构有深刻理解,对中间件、分布式系统及新技术研发始终保持热情。目前关注自然语言处理、机器理解等新课题。
Artur 从事Web 应用方面的开发工作已经超过十年,同时也大量关注敏捷及创业公司管理,
热爱精益创业模型。Artur开发过的网站每小时PV数超过一百万,为欧洲及澳洲两个大
洲的用户提供服务。他还在大学开设课程,分享他的技术与知识。作为一名科技作家、博Artur Ejsmont 是一位充满激情的软件工程师及敏捷领导者,目前就职于雅虎悉尼。Artur 从事 Web 应用方面的开发工作已经超过十年,同时也大量关注敏捷及创业公司管理,热爱精益创业模型。Artur 开发的网站每小时 PV 数超过一百万,为欧洲及澳洲两个大洲的用户提供服务。他还在大学开设课程,分享他的技术与知识。作为一名科技作家、博客写手、技术演讲者,Artur 对技术社区有许多积极的贡献。
译者
李智慧,曾供职阿里巴巴及英特尔亚太研发中心,从事分布式系统与大数据方面的开发。《大型网站技术架构:核心原理与案例分析》作者。目前正在互联网方面创业。
何坤,宅米首席架构师,前阿里巴巴平台架构师。曾参与阿里中文站架构建设,以及WebX 框架、云计算存储平台 Doris 等核心系统研发。曾就职丰联金融证券期货部任首席架构师。对大型互联网站架构有深刻理解,对中间件、分布式系统及新技术研发始终保持热情。目前关注自然语言处理、机器理解等新课题。
李智慧(微博、LinkedIn),目前任职宅米网CTO,曾供职阿里巴巴与英特尔亚太研发中心,从事大型网站、分布式系统、大数据平台方面的研发工作。著有《大型网站技术架构 核心原理与案例分析》一书。 Artur Ejsmont 是一位充满激情的软件工程师及敏捷领导者,目前就职于雅虎悉尼。
Artur 从事Web 应用方面的开发工作已经超过十年,同时也大量关注敏捷及创业公司管理,
热爱精益创业模型。Artur开发过的网站每小时PV数超过一百万,为欧洲及澳洲两个大
洲的用户提供服务。他还在大学开设课程,分享他的技术与知识。作为一名科技作家、博
客写手、技术演讲者,Artur对技术社区有过许多积极的贡献。
|
目錄:
|
目 录
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) ....................................................................................... 57
为伸缩而设计 .............................................................................................. 59
增加副本 .............................................................................................. 60
功能分割 .............................................................................................. 62
数据分片 .............................................................................................. 63
自愈设计 ...................................................................................................... 65
小结 .............................................................................................................. 67
3 构建前端层 69
状态管理 ...................................................................................................... 70
管理HTTP 会话 .................................................................................. 73
管理文件 .............................................................................................. 77
管理其他类型的状态 .......................................................................... 80
可伸缩的前端组件 ...................................................................................... 83
DNS ...................................................................................................... 84
负载均衡器 .......................................................................................... 85
Web 服务器 .......................................................................................... 92
缓存 ...................................................................................................... 93
自动伸缩 .............................................................................................. 94
部署案例 ...................................................................................................... 96
AWS 场景 ............................................................................................ 97
私有数据中心 ...................................................................................... 98
小结 ............................................................................................................ 101
4 Web 服务 102
Web 服务设计............................................................................................ 102
Web 服务作为一种备用表示层 ........................................................ 103
API 优先方式 .................................................................................... 105
务实的方式 ........................................................................................ 107
Web 服务类型............................................................................................ 108
以功能为中心的服务 ........................................................................ 109
以资源为中心的服务 ........................................................................ 111
伸缩REST Web 服务 ................................................................................ 115
保持服务无状态 ................................................................................ 115
缓存服务响应 .................................................................................... 121
功能分割 ............................................................................................ 124
小结 .
|
內容試閱:
|
推荐序
这是一个最好的时代,我们赶上了互联网的大潮;这也是一个最坏的时代,我们习惯的旧秩序被互联网打破了;这是一个创新的时代,任何奇思妙想都有被广大人民接受成为现实的可能;这还是一个变革的时代,在互联网 的春风中,线下的思维转换为线上的思维。
这一切的推手,就是互联网。互联网催生了一种新型的生活方式,也催生了适应于互联网的一种新的人群。连接人群和线上生活的纽带就是一个一个的互联网及移动互联网的应用。作为应用的典型IT 形态,互联网应用经历了独占型应用,SOA 应用,在云时代就是云原生(Cloud Native)的应用。构建一个良好的可伸缩的应用,不仅仅是一个优秀工程师的职责,同时也代表了对一种生活方式的认可。在这种应用里,我们看到了电商应用的身影:任何一个电商购物狂欢节,背后是工程师制作的良好的弹性应用面对使用量波峰波谷的挑战。
除了电商应用,任何一个To C 的APP 都会面临同样的挑战,要承载捉摸不定的业务量及快速推进版本的演进。作为引来的昂贵的流量,需要良好的后台承接并及时处理,推动良好的客户体验及带来真实的业务发展,从而帮助C 端的创业者快速验证自己的商业模式并快速迭代。
本书就是这样一本很好的最佳实践。本书作者将自己的成功经验总结归纳出来,对弹性架构的概念,软件设计的原则,以及如何构建一个优质的互联网应用,进行了深入讲解。
作为一位互联网电商的资深从业者,书中很多概念与电商行业的最佳实践不谋而合,有些观点对电商网站的构建是非常好的建设性意见。
本书的译者李智慧作为互联网老兵,对互联网应用网站的架构设计有丰富的经验;同时作为大数据行业的资深从业者,对数据运营的观念理解得精准到位,结合互联网网站设计及数据运营的思路,推动了本书翻译的成稿,不仅对原著内容的理解到位,同时对原著细节的拔高有神来之笔。
本书适合互联网技术从业人员阅读,是电商行业、移动互联网行业中不可多得的好书。
杨海明
京东云平台事业部总经理
译者序
每个互联网创业者的心中都有一个独角兽或者纳斯达克的梦想,不过不论梦想有多么远大,都需要从第一行代码开始,一步一步地构建系统。那么,第一行代码和最后服务数亿用户的系统之间是什么关系呢?一个最初由两三个工程师开发的产品雏形,如何经过逐渐地重构、演化、迭代、伸缩,最终成为一个巨无霸的系统?
本书面向互联网创业公司工程师,讲述构建可伸缩Web 系统的核心概念、关键原则和主要方法。本书第1~5 章和第9 章由李智慧翻译,第6~8 章由何坤翻译。第1 章和第2章讲述可伸缩系统的核心概念与软件基本设计原则。我强烈建议你认真阅读这两章,这部分内容包含了开发一个可伸缩的Web 系统甚至开发一个良好软件的基本原理和设计原则,是其他一切技巧和方法的元规则。第3~8 章讲述了构建可伸缩Web 应用的主要方法和工具,这几章的内容相对比较独立,你可以挑选自己感兴趣的章节阅读,也可以在工作中遇到问题时快速浏览,寻找方法和灵感。第9 章讲述可伸缩的系统运维及可伸缩的个人和团队,如果你正处在一个高速发展的创业团队中,如果你对从技术走向管理感兴趣,我相信你可以从本章的内容中收获多多。
诚如书中一再强调,可伸缩系统的设计是一种权衡的艺术,必须对每一种方案的优缺点都了如指掌,才能在面对实际问题时做出最合适的选择。高并发可伸缩系统的设计看似纷繁复杂庞大无比,实际上关键的核心技术也就那么几样,如果深入掌握了这些关键技术,就抓住了可伸缩系统设计的核心。这几样关键技术,可能需要在不同场景,从不同视角反复思考琢磨,才能真正掌握。我曾经在《大型网站技术架构:核心原理与案例分析》一书中表达过这个观点,如果读过《大型网站技术架构:核心原理与案例分析》,那么推荐你阅读本书,从创业公司工程师的视角再次审视分布式网站设计的方方面面,掌握可伸缩Web 应用设计权衡的艺术。
虽然罗马不是一天建成的,但是一名优秀的工程师,在放下建设罗马的第一块砖的时候,心中就已经有了整个罗马建成后辉煌的场景,以及整个建造历程。他运筹帷幄、胸有成竹,每一次的快速发展他都已经提前做好准备,每一次的剧烈变化他都有应对的方案。因为对艰难困苦了然于心,所以倍加从容。
本书就是这样一本书,它描述了一个愿景,当你的公司成为独角兽公司的时候,你的系统会长什么样子;它展现了一个历程,你该如何一步一步地将你的系统伸缩成一个巨无霸系统;它提供了一组工具和方法,你如何利用这些工具方法改造你的系统实现你的梦想。
星空就在你的头顶,路就在你的脚下,梦想就在你的前方,带上这本书,我们出发吧!
李智慧
引言
近些年来,伴随着技术的进步,越来越多的Web 应用系统需要存储、转化、处理越来越多的数据,而这必将要求工程师们掌握构建可伸缩的Web 系统的能力。
当我了解到大多数工程师都缺乏这种构建可伸缩Web 系统的能力时,我觉得有必要写一本与此有关的书。一方面,目前市面上缺乏相关的著作;另一方面,那些在小公司工作的工程师们也缺乏必要的环境去学习可伸缩架构的设计方法。因此,本书致力于讲解软件架构与基础设施如何协同工作,并最终实现系统的可伸缩性。
希望本书可以成为开启读者可伸缩架构设计之旅的一个里程碑。书中既给出了可伸缩架构设计的整体概览视图,同时也深入探讨了一些重要的技术点并给出了一些最佳实践建议。然而,书中并没有对每一个技术细节都深入阐述,而是尽可能地为读者呈现那些必要的概念、基本的规则,以及有意义的实例。
第1 章:核心概念
作为本书第1 章,本章主要介绍可伸缩性架构的一些核心概念及关于本书的一个概览性描述。本章通过描述可伸缩Web 系统演化的不同阶段介绍相关的概念,同时,也会涉及一些基础设施与可伸缩Web 系统架构方面的整体描述。
第2 章:软件设计原则
本章主要探讨一些构建弹性可伸缩系统的设计原则。首先是那些最基础的概念,比如简化与解耦;其次是一些面向对象的设计原则,比如单一职责原则和依赖注入原则;最后是那些与可伸缩性直接相关的设计概念,比如功能分割、数据分区,以及自我恢复。
第3 章:构建前端层
本章内容主要集中在直接与客户端软件(比如Web 浏览器及移动APP)交互的那部分基础设施上。本章会深入解释前端管理状态的几种方式,以及构建可伸缩前端的几种重要组件,比如负载均衡、代理、内容分发网络(CDN);之后会探讨自动化伸缩及几种部署场景。
第4 章:Web 服务
本章主要探讨几种不同的Web 服务架构的优缺点。解释Web 服务设计原则并深入细节讲解基于REST-ful API 的伸缩性技术。
第5 章:数据存储层
本章会解释数据层伸缩性技术的若干核心要点。除了涉及MySQL 这一类关系数据库相关的技术外,还会花大量篇幅探讨Cassandra 这类NoSQL 数据存储技术。本章会穿插讲解一些技术细节,比如数据分区(也常称作分片技术)、数据复制,以及最终一致性。比较几种不同的数据存储层拓扑结构及与此有关的技术挑战。
第6 章:缓存
本章内容主要着眼于缓存,缓存是一种改善Web 系统伸缩性和性能的关键性手段。主要讲解基于HTTP 的几种不同的缓存技术,以及HTTP 缓存的伸缩性技术。此外,还会阐述对象缓存技术及其常用的伸缩性技术。最后,花一些篇幅探讨缓存最佳实践,以帮助读者在使用缓存时做出更好的决策。
第7 章:异步处理
本章会讲解有关消息与事件驱动架构方面的主题。首先,探讨异步处理的概念与优点及如何利用消息代理改善Web 应用的可伸缩性;其次,重点论述异步系统的挑战与使用中可能出现的陷阱;最后,简要比较几种主流的消息平台以帮助读者在具体工作中做出最佳选择。
第8 章:数据搜索
本章主要讨论数据搜索方面的有关问题。数据搜索与数据存储密切相关,随着数据集的快速增长,优化数据搜索与访问方面的技术变得越来越重要。首先,会讲解不同类型的索引是如何工作的;其次,会花一些篇幅描述数据建模如何有助于改善伸缩性,以及如何在诸如Cassandra 之类的NoSQL 数据存储系统中考虑数据建模。最后,做一些搜索引擎方面的介绍及讲述相关技术如何应用于Web 应用系统。
第9 章:伸缩性的其他维度
这是本书的最后一章,阐述一些扩展读者自身工作效率的有关概念,以方便读者更好地实现自我管理与团队成长。首先,强调自动化作为一项关键技术在提高工程效率方面的重要作用,探讨有关自动化测试、部署、监控与报警方面的话题。其次,分享一些项目管理方面的个人经验与观察,这些技能将帮助读者在创业中更好地生存下来。最后,对成长中的敏捷团队可能遇到的挑战做一些反思。
目标读者
本书的主要目标读者是软件工程师、技术经理、DevOps,以及系统工程师。对于在校学生而言也许会有一定难度,不过对于中等水平甚至是初级工程师而言,绝大多数内容都是比较容易理解的。
本书假设读者对于如何利用相关技术构建一个Web 应用系统有一个基本的了解。不过阅读本书不需要拥有任何特定的编程技能,诸如Java、PHP、JavaScript、C#或者Ruby,因为伸缩性是Web 应用开发中一个通用的挑战,与具体语言无关。另外,本书也假设读者了解HTTP 协议是如何工作的,以及对IP 网络、HTML、CS(客户端服务器)软件开发等有一个基本的概念。
|
|