描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121315169
第1章 互联网系统架构的挑战 2
1.1 云应用架构技术发展 4
1.2 云平台下架构的不同点 5
1.2.1 开发模式的区别 6
1.2.2 交付模式的区别 7
1.2.3 架构设计的区别 8
1.3 云原生应用架构 10
1.4 架构演化发展历程 21
1.4.1 初创期架构 22
1.4.2 快速成长期架构 24
1.4.3 分布式服务架构 26
1.5 云计算服务介绍 29
1.6 云计算解决方案 31
1.7 案例概述 34
1.7.1 背景介绍 34
1.7.2 环境要求 36
1.7.3 项目构建 36
1.7.4 项目运行 36
1.7.5 相关技术介绍 37
小结 40
第2章 从0到1工程实践 41
2.1 工程化 41
2.1.1 工程模板 41
2.1.2 模块化 45
2.1.3 工程化构建 50
2.1.4 代码规范及检查 53
2.1.5 代码版本管理 54
2.1.6 环境划分 61
2.2 基于容器工程化 62
2.2.1 Docker及作用 63
2.2.2 Docker镜像及操作 66
2.2.3 Docker容器及操作 73
2.2.4 基于容器工程化 77
2.3 实战示例 78
小结 84
第3章 初创期应用架构实践 85
3.1 技术选型 85
3.1.1 业务框架选型 85
3.1.2 结构化数据存储 92
3.1.3 缓存选型 102
3.1.4 静态资源存储 106
3.2 架构实践 109
3.2.1 快速迭代 109
3.2.2 高可用与负载均衡 111
3.2.3 交付与部署 117
3.2.4 Web应用安全 119
3.3 应用监控 127
3.3.1 应用监控指标 127
3.3.2 应用进程监控 128
3.3.3 操作系统监控 129
小结 136
第4章 快速成长期应用架构实践 137
4.1 关键业务需求 137
4.1.1 计数与排序 137
4.1.2 秒杀 146
4.1.3 全文检索 149
4.1.4 日志收集 154
4.2 架构实践 156
4.2.1 前端系统扩展 157
4.2.2 无状态服务设计 157
4.2.3 在线水平扩展 160
4.2.4 后端系统扩展 163
4.2.5 系统通信 173
4.2.6 消息中间件 176
4.3 系统优化 181
4.3.1 静态资源分离 182
4.3.2 数据库调优 185
4.3.3 系统高可用 193
4.4 应用诊断 200
4.4.1 应用健康检查 200
4.4.2 性能问题诊断 204
4.4.3 基于日志的故障诊断 210
4.5 数据库诊断 214
4.6 DevOps 223
4.6.1 持续集成 224
4.6.2 持续交付 227
4.6.3 灰度发布 229
4.6.4 大应用编排 231
4.7 安全设计 246
4.7.1 入侵检测 247
4.7.2 防劫持攻击 249
小结 255
第5章 稳定期服务化应用架构实践 256
5.1 业务拆分 256
5.2 统一配置中心 259
5.3 分布式定时任务 261
5.3.1 分布式定时任务设计 262
5.3.2 业界流行的开源框架 264
5.4 分布式锁系统 274
5.5 微服务化架构 277
5.5.1 服务发现 279
5.5.2 服务治理 302
5.5.3 微服务框架 307
5.5.4 服务编排 313
5.5.5 微服务测试 321
5.6 分布式数据一致性 333
5.6.1 CAP和BASE理论 333
5.6.2 一致性模型 336
5.6.3 典型的解决方案 337
5.7 同城多活 344
5.7.1 应用同城多活 345
5.7.2 跨AZ负载均衡 347
5.8 故障诊断 348
小结 353
参考文献 354
技术术语 356
前 言
从互联网、移动互联网到云计算、大数据、人工智能,再到虚拟现实/增强现实,十多年来,信息技术的日新月异催生了不断涌现的互联网新业态,也推动了传统行业投身于数字化创新的浪潮。此时此刻,机器取代人类的说法固然夸张,却也真实地反映了新技术应用对产业带来的冲击。
全球商业机构都是能够把握技术创新成果的企业;而对技术运用不当的企业,即便起点与前者一致,或许也曾风光一时,但终还是步履维艰,甚至烟消云散。决定能否与技术趋势同行的一个核心因素就是技术架构。如果说商业模式是商业组织的灵魂,那么架构就是灵魂的根基。典型的例子就是电商618、双11大促,流量爆发之下如何保障整个商品交易流程的体验,对系统设计和运维保障都是巨大的考验,这也推动了技术的进步。当前的大促活动依然让电商企业如履如临,然而挑战难度已经不如七八年前,这就是架构演进趋于成熟的表现,充分利用云计算理念的“互联网架构”由此为业界所推崇。
综合考虑IT资产、业务规模、发展阶段、人才储备及投资成本,不同企业需要的互联网架构并不完全一样,譬如初创公司考虑百万级并发可能不合时宜,然而为长远计,想跟上发展迅速、爆发力惊人的互联网业务,架构设计需要既能满足当前业务需求,又具备快速升级支撑下一个发展阶段的能力。企业如何正确驾驭架构的设计和演进?有哪些通用的成熟经验可供借鉴?业界对此不乏零星的讨论,但企业仍缺乏系统的、可指导实践的参考资料。
本书是网易云基础服务架构团队根据网易集团的十余年实践,结合社区优秀案例总结而成的互联网架构演进指南。2006年,怀着储备互联网技术和孵化新业务的初衷,网易杭州研究院扬帆起航,及至今日在两个方向上都有不俗的成绩,一端是分布式、云计算、大数据、人工智能、增强现实,一端是教育、电商、金融、游戏,这一切都是构建在千锤百炼的互联网架构之上的,这就是同时满足功能性需求、非功能性需求和产品快速迭代需求的云原生架构。网易云希望把这些经验分享给业界,与各行各业一起践行中国云计算。
全书共5章,以商业组织的互联网业务成长为主线,着眼于业务需求,清晰地剖析互联网架构的挑战,云原生架构的特征、构成和解决的问题,以及架构演进的路径,并通过案例对设计原则和实践加以诠释。通过阅读本书,架构师能够借鉴网易十余年的经验结晶,无须反复试验,即可快速设计符合互联网业务场景需求的架构,而有一定基础的读者朋友也能更加透彻地理解和规划未来的方向。
全书由尧飘海统筹构思,网易云基础服务架构团队成员参与写作,书中部分图片脱胎于社区文档或官方宣传资料。第1章以宏观视角简明地解析互联网业务挑战及架构演进要点;第2章介绍开始搭建业务系统时需要的项目版本管理工具、以Docker为代表的容器技术,以及常见语言的工程化构建方式,并结合实战示例给予完整展现;第3章针对访问流量不是很大的业务起步阶段,讲述如何做好技术选型,实现一个支持快速迭代、高可用、安全的应用服务端;第4章介绍如何解决业务高速成长阶段的可扩展性、性能、系统集成与交互、数据可靠性等挑战;第5章以分布式定时任务和分布式锁系统的实现为例,介绍分布式服务应用挑战和架构方法,重点解析了微服务架构、分布式数据一致性和同城多活的实践。
全书内容分别由尧飘海、焦智慧、王新勇、张小刚和冯常健主笔,黄庆兵、郭忆、乔安然、何李夫、孙建良、刘发明、沈明星、崔晓晴、易庭、祝剑锋、姜政冬、朱凌墨等网易云架构师和工程师参与了写作,插图由李倩倩和纪桂莲支持完成。
本书的付梓要特别感谢电子工业出版社的符隆美编辑,她帮助我们及时地解决了遇到的各种问题。
限于作者的精力与能力,书中难免出现一些疏漏之处,请广大读者不吝指正,并予以包涵,我们会在再版中修正。
推荐序一
不知不觉,网易公司已经走到第20个年头。网易的业务从邮箱、门户和游戏业务,拓展到电商、文娱、教育和农业板块,并在云计算、大数据、人工智能、增强现实等领域进行了战略布局。每一项业务的健康发展,从“道”的层面而言是在于与用户共同成长,从“术”的层面则是不断打磨产品,使之更好地满足用户需求。
互联网信奉“快”,但网易更尊重“匠心”,产品每一个特性的更新,都需要经过反复的验证。这也意味着,网易业务多元化背后需要大量的产品研发和迭代工作,因此,与之匹配的应用架构至关重要。网易架构在业务成长中不断演进,形成了当下的云原生架构,让95%的互联网业务真正运行于云端,业务团队只需要努力为业务编码。由此,“快”和“匠心”在产品端得到了平衡。我相信,云原生是互联网业务的解。
云原生与传统云计算的区别在于,传统云计算关注的是如何提供性价比的计算、存储、网络资源,而云原生关注的是如何让产品能够支持快速验证业务模式,如何简化复杂的开发流程、提升研发效率,如何保障产品的高可用性让业务无需承受成长之痛,如何实现大规模弹性伸缩轻松应对业务爆发,等等。也正因如此,“云原生架构”虽然只有短短的五个字,其落地却隐藏了无数的变量与陷阱。
介于此,本书系统梳理了网易云原生架构的演进经验,对不同的挑战分别给出相应答案。网易架构仍在演进,我不能说这些答案已经很成熟,但我相信,书中一定会有一些章节正好击中不同企业的痛点,帮助企业在互联网业务创新过程中少走一些弯路。网易希望借此与大家共同交流探讨。
陈 刚
网易杭州研究院院长
推荐序二
作为一家诞生于中国互联网萌芽期的互联网公司,网易具有丰富的产品线。长久在网易任职,一个很大的好处是能够真切地经历波澜壮阔的互联网发展史,而对于技术人来说,更重要的是能够学习和实践各项支撑互联网爆炸式发展的技术,能够在这段经历中获得不同于纸上得来的知识和思想:能切实体会到许多技术为何产生、为何沉寂或者兴起,从而能够在实践中避免因循守旧或一味求新逐异;更懂得如何根据功能、非功能性需求进行取舍,选择更有生命力的技术;更加理解架构的本质。
我和我的团队从十多年前的博客时代开始接触互联网技术,当时Web2.0概念刚刚兴起,网易博客一上线,用户量、访问量就呈爆发式增长,我们的困难并不在于如何编写代码,而是怎样支持产品的高速迭代。以往我们并未经历业务几乎每天都在更新迭代的情况,此时通宵更新版本成了家常便饭,为此我们优化了版本控制策略,研发并集成了自动化构建和发布工具,将其总结为“项目工程化”,在之后的项目中尤为重视。
然而,当时博客业务也在变得日益复杂。更新版本时,团队间的协调成为拖慢迭代节奏的重要因素,因此我们开始把一些业务模块独立出来,以远程接口方式提供服务,或是在负载均衡入口直接按业务模块分流,后台的缓存、数据库也做了相应的拆分,服务化进程就这样自然地开始了,团队曾考虑借鉴当时业界流行的SOA(面向服务架构)理念,想引入企业服务总线等重量级设施,但由于2C业务和性能意味着用户量的支持及实际的用户体验,基于对更轻量、更高性能的渴望,我们终选择了类似微服务的架构形态。
服务化一旦开展,过程就变得更加复杂。随着发布的频度再次提升,服务单独升级带来了版本问题,以及维护、故障期间的雪崩等一系列棘手的问题,代码质量也开始下降,由于各种方式的RPC调用、服务发现封装方式大量地充斥在代码中,我们意识到必须要有统一的框架支持服务化进程,于是近十年前我们有了自己的微服务框架,逐步解决雪崩、版本、服务发现、降级等问题。
后博客时代,我们将工程化、服务化等工具、框架应用于新的业务,又发现了新的问题。服务化带来了业务计算节点种类和数量的大幅增长,运维部署变得非常困难,在资源层面,服务化后的节点无法充分利用服务器资源,众多的服务被混合部署在同一台服务器上,从而服务间资源争抢,故障恢复时与各产品、各模块的协调成了麻烦的问题,我们意识到单台服务器的负载在短短几年内已发生了极大的改变,要解决资源管理问题,云计算势在必行。
很幸运的是我与团队能受公司之托来负责云计算平台的研发工作,2012年秋,网易云计算平台正式开始支持公司业务,得益于SDN技术与公司原内网环境的较好融合,云平台很快得到了广泛使用。相比物理机节点数量的线性增长,虚拟机的数量指数级增长在很大程度上解决了原本遇到的资源管理问题;虚拟主机做到专机专用按需配置,使用数据库、缓存等基础服务再也不用等待运维团队部署维护,系统运维效率也得到了极大的提升。
获取资源容易了,产品自然而然规划出众多的测试环境,如开发环境、集成环境、预发布环境等,于是搭建测试环境,持续集成与交付很快成了新瓶颈,更麻烦的是业务服务化架构日渐成型,应用运维的复杂度指数级提升。为此,我们又打造了自动化部署平台,解决集群的编排、版本更新、回滚等问题,平台上线后每月的部署次数直线上升,达到数万次之多。没有云计算时,我们觉得两套测试环境共用就行,每天集成部署一两次就行,有了云计算后,原本被压抑的资源、迭代频度的需求被瞬间释放,反应到产品中的便是功能开发并行度和迭代速度的大幅提升,迭代风险的大幅下降。上云的收益由此可见一斑,先行拥抱云计算的企业在产品竞争中可获得巨大的优势。
可以说在网易这样的成熟互联网公司,是原本的软件架构、技术体系的进化推动了云计算的实施,塑造了云计算平台的形态,我们的业务技术架构是与云计算伴随生长的,并且经历了漫长的迭代过程,而对于后来者,基于云来设计软件架构、实现工程化、建设运维体系,则可以选择一条前人已充分实践并总结和提炼的路径,一开始便可以从云而生,这也就是我们所说的云原生的技术体系。我们在开放网易云计算能力的过程中遇到过不少用户,他们不知道网易这样的互联网企业如何基于云高速迭代产品、支撑海量用户,不知道如何在架构设计、技术选型阶段迈出步,如何为未来的发展打下基础,或是业务增长后如何应对。有初创企业虽然灵活快速却控制不了迭代质量、刹不住车的,也有传统企业提不了速的。正是看到这些问题,我认为,作为互联网技术的实践者,我们不仅应当将我们的平台、工具链开放出来,同时也应将我们的云端架构实践梳理成知识体系分享出来,在这“大
从十余年前的各种分布式系统研发到现在的容器云,从支撑原有业务到孵化各个新业务,网易的发展离不开统一的、与时俱进的技术架构。网易云厚积薄发,对外开放内部的技术积累和知识经验,本书是网易架构演进经验的集大成者,希望能够帮助整个产业更好地利用云计算技术推动业务更上一层楼。
汪源,网易杭州研究院执行院长
处在互联网 浪潮中的技术从业者,需要理解基础架构的前沿,把宝贵的时间和精力集中在业务逻辑和交互实现上。新时代互联网的服务架构已经衍生出全面的技术生态,不仅改变了基础服务的利用方式,也在深刻地改变着应用的开发流程和模式。本书是网易十多年来在多个成功产品上的经验总结,是难得一见的技术分享。愿大家都能从中有所受益。
翁恺,浙江大学计算机教授
网易博客的流行,网易新闻客户端、网易云音乐、网易云课堂从同类产品中脱颖而出,以及网易考拉海购、网易严选的逐渐崛起,都离不开网易杭州研究院的基础技术与架构,尤其是网易云的支撑。本书作者都是战斗在网易云平台开发一线的主力,这是他们*近几年“云原生应用”开发的*总结,相信能让读者收获良多。
谢骋超,网易考拉海购首席架构师
本书系统讲解在初创期、成长期、稳定期等不同时间,互联网应用在云上的*架构实践,技术人一定能找到自己感兴趣的章节,推荐!
沈剑,58同城的技术委员会执行主席
本书基于价值、原则、实践、工具等层次,立体化地诠释云原生,在讨论“12要素应用”、“DevOps”、“持续集成”、“持续交付”等原则、实践层面内容的同时,还介绍了针对不同设计目标场景的工具对比选型和使用方法。本书是网易云基础服务架构团队对多年云计算实践经验的完整总结,也是当前云计算行业对云原生理念和实践进行深入探讨的有益尝试。
丁轶群,浙大SEL实验室创始人,杭州谐云科技CTO
网易云架构团队倾其所有、毫无保留地分享他们基于开放技术打造云原生应用架构的经验和心得,阅读此书就象探寻网易内部云原生架构一样,相信读者必受益匪浅。
王庆,OpenStack基金会个人独立董事,英特尔开源技术中心开发经理
DevOps以业务价值为导向,以持续交付为核心工程实践,力求流水线式、又快又稳地交付有用的价值,而云原生架构使得基础设施等真正变成透明式的“背景”,成为持续交付的基石。网易云团队汇聚多年功力,在本书中阐述了从零到千万并发规模云原生应用的方方面面,您值得拥有。
萧田国
,高效运维社区发起人, DevOpsDays中国联合发起人
推荐序一
不知不觉,网易公司已经走到第20个年头。网易的业务从邮箱、门户和游戏业务,拓展到电商、文娱、教育和农业板块,并在云计算、大数据、人工智能、增强现实等领域进行了战略布局。每一项业务的健康发展,从“道”的层面而言是在于与用户共同成长,从“术”的层面则是不断打磨产品,使之更好地满足用户需求。
互联网信奉“快”,但网易更尊重“匠心”,产品每一个特性的更新,都需要经过反复的验证。这也意味着,网易业务多元化背后需要大量的产品研发和迭代工作,因此,与之匹配的应用架构至关重要。网易架构在业务成长中不断演进,形成了当下的云原生架构,让95%的互联网业务真正运行于云端,业务团队只需要努力为业务编码。由此,“快”和“匠心”在产品端得到了平衡。我相信,云原生是互联网业务的解。
云原生与传统云计算的区别在于,传统云计算关注的是如何提供性价比的计算、存储、网络资源,而云原生关注的是如何让产品能够支持快速验证业务模式,如何简化复杂的开发流程、提升研发效率,如何保障产品的高可用性让业务无需承受成长之痛,如何实现大规模弹性伸缩轻松应对业务爆发,等等。也正因如此,“云原生架构”虽然只有短短的五个字,其落地却隐藏了无数的变量与陷阱。
介于此,本书系统梳理了网易云原生架构的演进经验,对不同的挑战分别给出相应答案。网易架构仍在演进,我不能说这些答案已经很成熟,但我相信,书中一定会有一些章节正好击中不同企业的痛点,帮助企业在互联网业务创新过程中少走一些弯路。网易希望借此与大家共同交流探讨。
陈 刚
网易杭州研究院院长
推荐序二
作为一家诞生于中国互联网萌芽期的互联网公司,网易具有丰富的产品线。长久在网易任职,一个很大的好处是能够真切地经历波澜壮阔的互联网发展史,而对于技术人来说,更重要的是能够学习和实践各项支撑互联网爆炸式发展的技术,能够在这段经历中获得不同于纸上得来的知识和思想:能切实体会到许多技术为何产生、为何沉寂或者兴起,从而能够在实践中避免因循守旧或一味求新逐异;更懂得如何根据功能、非功能性需求进行取舍,选择更有生命力的技术;更加理解架构的本质。
我和我的团队从十多年前的博客时代开始接触互联网技术,当时Web2.0概念刚刚兴起,网易博客一上线,用户量、访问量就呈爆发式增长,我们的困难并不在于如何编写代码,而是怎样支持产品的高速迭代。以往我们并未经历业务几乎每天都在更新迭代的情况,此时通宵更新版本成了家常便饭,为此我们优化了版本控制策略,研发并集成了自动化构建和发布工具,将其总结为“项目工程化”,在之后的项目中尤为重视。
然而,当时博客业务也在变得日益复杂。更新版本时,团队间的协调成为拖慢迭代节奏的重要因素,因此我们开始把一些业务模块独立出来,以远程接口方式提供服务,或是在负载均衡入口直接按业务模块分流,后台的缓存、数据库也做了相应的拆分,服务化进程就这样自然地开始了,团队曾考虑借鉴当时业界流行的SOA(面向服务架构)理念,想引入企业服务总线等重量级设施,但由于2C业务和性能意味着用户量的支持及实际的用户体验,基于对更轻量、更高性能的渴望,我们终选择了类似微服务的架构形态。
服务化一旦开展,过程就变得更加复杂。随着发布的频度再次提升,服务单独升级带来了版本问题,以及维护、故障期间的雪崩等一系列棘手的问题,代码质量也开始下降,由于各种方式的RPC调用、服务发现封装方式大量地充斥在代码中,我们意识到必须要有统一的框架支持服务化进程,于是近十年前我们有了自己的微服务框架,逐步解决雪崩、版本、服务发现、降级等问题。
后博客时代,我们将工程化、服务化等工具、框架应用于新的业务,又发现了新的问题。服务化带来了业务计算节点种类和数量的大幅增长,运维部署变得非常困难,在资源层面,服务化后的节点无法充分利用服务器资源,众多的服务被混合部署在同一台服务器上,从而服务间资源争抢,故障恢复时与各产品、各模块的协调成了麻烦的问题,我们意识到单台服务器的负载在短短几年内已发生了极大的改变,要解决资源管理问题,云计算势在必行。
很幸运的是我与团队能受公司之托来负责云计算平台的研发工作,2012年秋,网易云计算平台正式开始支持公司业务,得益于SDN技术与公司原内网环境的较好融合,云平台很快得到了广泛使用。相比物理机节点数量的线性增长,虚拟机的数量指数级增长在很大程度上解决了原本遇到的资源管理问题;虚拟主机做到专机专用按需配置,使用数据库、缓存等基础服务再也不用等待运维团队部署维护,系统运维效率也得到了极大的提升。
获取资源容易了,产品自然而然规划出众多的测试环境,如开发环境、集成环境、预发布环境等,于是搭建测试环境,持续集成与交付很快成了新瓶颈,更麻烦的是业务服务化架构日渐成型,应用运维的复杂度指数级提升。为此,我们又打造了自动化部署平台,解决集群的编排、版本更新、回滚等问题,平台上线后每月的部署次数直线上升,达到数万次之多。没有云计算时,我们觉得两套测试环境共用就行,每天集成部署一两次就行,有了云计算后,原本被压抑的资源、迭代频度的需求被瞬间释放,反应到产品中的便是功能开发并行度和迭代速度的大幅提升,迭代风险的大幅下降。上云的收益由此可见一斑,先行拥抱云计算的企业在产品竞争中可获得巨大的优势。
可以说在网易这样的成熟互联网公司,是原本的软件架构、技术体系的进化推动了云计算的实施,塑造了云计算平台的形态,我们的业务技术架构是与云计算伴随生长的,并且经历了漫长的迭代过程,而对于后来者,基于云来设计软件架构、实现工程化、建设运维体系,则可以选择一条前人已充分实践并总结和提炼的路径,一开始便可以从云而生,这也就是我们所说的云原生的技术体系。我们在开放网易云计算能力的过程中遇到过不少用户,他们不知道网易这样的互联网企业如何基于云高速迭代产品、支撑海量用户,不知道如何在架构设计、技术选型阶段迈出步,如何为未来的发展打下基础,或是业务增长后如何应对。有初创企业虽然灵活快速却控制不了迭代质量、刹不住车的,也有传统企业提不了速的。正是看到这些问题,我认为,作为互联网技术的实践者,我们不仅应当将我们的平台、工具链开放出来,同时也应将我们的云端架构实践梳理成知识体系分享出来,在这“大众创业,万众创新”的互联网 时代为企业健康发展作出力所能及的贡献。
陈 谔
网易杭州研究院云计算技术部总监
评论
还没有评论。