科技>计算机>网络与互联网
互联网创业核心技术:构建可伸缩的web应用

互联网创业核心技术:构建可伸缩的web应用"

作者:李智慧,何坤
ISBN:9787121301124
定价:¥89.0
字数:370千字
页数:324
出版时间:2016-10
开本:16开
版次:01-01
装帧:
出版社:电子工业出版社
简介

《大型网站技术架构:核心原理与案例分析》作者李智慧的翻译力作!读透一本好书,少走十年弯路。对于创业人来说,在瞬息万变的移动互联网世界求生存,寸秒就是寸金!如何在创业之初,就构建好适合业务长远发展的技术架构:以不变应万变、以可伸缩性对抗变化莫测的业务需求,为自己的发展赢得时间、为产品创造优秀的用户体验?本书针对此痛点,给出了适切中肯的建议。作者深入阐述了设计原则、前端层、Web服务、数据存储层、缓存、异步处理等核心概念与技术,针对可能发生的问题一一剖析,为读者勾勒出了简明清晰的技术框架图。相信《互联网创业核心技术:构建可伸缩的Web应用》 可以成为开启读者可伸缩架构设计之旅的一个里程碑。阅读本书并不需要拥有任何特定的编程技能,诸如Java、PHP、JavaScript、C#或者Ruby,因为伸缩性是Web应用开发中一个通用的挑战,与具体语言无关。

前言

推荐序 这是一个最好的时代,我们赶上了互联网的大潮;这也是一个最坏的时代,我们习惯的旧秩序被互联网打破了;这是一个创新的时代,任何奇思妙想都有被广大人民接受成为现实的可能;这还是一个变革的时代,在“互联网+”的春风中,线下的思维转换为线上的思维。 这一切的推手,就是互联网。互联网催生了一种新型的生活方式,也催生了适应于互联网的一种新的人群。连接人群和线上生活的纽带就是一个一个的互联网及移动互联网的应用。作为应用的典型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、C/S(客户端/服务器)软件开发等有一个基本的概念。

目录

目 录 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 小结 ............................................................................................................ 127 5 数据存储层 129 MySQL 伸缩性 .......................................................................................... 130 复制 .................................................................................................... 130 数据分区(分片) ............................................................................ 142 NoSQL 伸缩性 .......................................................................................... 157 最终一致性 ........................................................................................ 160 快速恢复增加可用性 ........................................................................ 164 Cassandra 拓扑结构 .......................................................................... 166 小结 ............................................................................................................ 170 6 缓存 171 缓存命中率 ................................................................................................ 171 基于HTTP 的缓存 .................................................................................... 173 HTTP 缓存头 ..................................................................................... 174 HTTP 缓存技术类型 ......................................................................... 179 伸缩HTTP 缓存 ................................................................................ 185 缓存应用对象 ............................................................................................ 188 对象缓存的一般类型 ........................................................................ 189 伸缩对象缓存 .................................................................................... 194 缓存的经验法则 ........................................................................................ 198 缓存整个调用栈 ................................................................................ 198 用户间缓存重用 ................................................................................ 199 从哪儿开始使用缓存? .................................................................... 201 缓存失效的困难 ................................................................................ 201 小结 ............................................................................................................ 203 7 异步处理 204 核心概念 .................................................................................................... 204 同步处理的例子 ................................................................................ 205 异步处理的例子 ................................................................................ 208 购物类比 ............................................................................................ 211 消息队列 .................................................................................................... 213 消息生产者 ........................................................................................ 214 消息代理 ............................................................................................ 215 消息消费者 ........................................................................................ 216 消息协议 ............................................................................................ 220 消息基础设施 .................................................................................... 221 消息队列的好处 ........................................................................................ 224 实现异步处理 .................................................................................... 225 更好的伸缩性 .................................................................................... 226 平衡流量峰值 .................................................................................... 227 失败隔离和自我修复 ........................................................................ 228 解耦 .................................................................................................... 229 消息队列相关的挑战 ................................................................................ 230 消息无序 ............................................................................................ 230 消息重新入队列 ................................................................................ 233 竞态条件可能性增大 ........................................................................ 233 复杂度风险 ........................................................................................ 234 消息队列有关的反模式 ............................................................................ 235 将消息队列当作TCP 套接字 ........................................................... 235 将消息队列当作数据库 .................................................................... 235 耦合消息生产者和消费者 ................................................................ 235 缺少坏消息处理 ................................................................................ 236 消息平台快速比较与选择 ........................................................................ 237 亚马逊简单队列服务 ........................................................................ 237 RabbitMQ ........................................................................................... 240 ActiveMQ ........................................................................................... 242 最后的比较说明 ................................................................................ 243 事件驱动架构介绍 .................................................................................... 245 请求/响应交互 ................................................................................... 246 直接队列交互 .................................................................................... 247 事件驱动交互 .................................................................................... 247 小结 ............................................................................................................ 250 8 数据搜索 252 索引介绍 .................................................................................................... 252 数据建模 .................................................................................................... 260 NoSQL 数据建模 .............................................................................. 260 宽列数据存储的例子 ........................................................................ 264 搜索引擎 .................................................................................................... 271 搜索引擎介绍 .................................................................................... 272 使用专用搜索引擎 ............................................................................ 274 小结 ............................................................................................................ 275 9 伸缩性的其他维度 277 自动化实现生产力可伸缩 ........................................................................ 278 测试 .................................................................................................... 278 构建与部署 ........................................................................................ 280 监控与报警 ........................................................................................ 285 日志聚合 ............................................................................................ 289 个人可伸缩 ................................................................................................ 291 加班不是一种伸缩性方案 ................................................................ 291 自我管理 ............................................................................................ 293 伸缩敏捷团队 ............................................................................................ 300 增加人手 ............................................................................................ 300 流程与创新 ........................................................................................ 301 团结的文化 ........................................................................................ 302 小结 ............................................................................................................ 303 A 推荐阅读 304

作者简介

李智慧,曾供职阿里巴巴及英特尔亚太研发中心,从事分布式系统与大数据方面的开发。《大型网站技术架构 核心原理与案例分析》作者。目前正在互联网方面创业。__eol__何坤,宅米首席架构师,前阿里巴巴平台架构师。曾参与阿里中文站架构建设,及WebX框架、云计算存储平台Doris等核心系统研发。还曾就职丰联金融证券期货部首席架构师。对大型互联网站架构有深刻理解,对中间件、分布式系统及新技术研发始终保持热情。目前关注自然语言处理、机器理解等新课题。

编辑推荐

作者寄语

电子资料

www.luweidong.cn

下一个