新書推薦:
《
西班牙内战:秩序崩溃与激荡的世界格局:1936-1939
》
售價:NT$
990.0
《
基于鲲鹏的分布式图分析算法实战
》
售價:NT$
495.0
《
夺回大脑 如何靠自己走出强迫
》
售價:NT$
299.0
《
图解机械工程入门
》
售價:NT$
440.0
《
中文版SOLIDWORKS 2024机械设计从入门到精通(实战案例版)
》
售價:NT$
450.0
《
旷野人生:吉姆·罗杰斯的全球投资探险
》
售價:NT$
345.0
《
希腊人(伊恩·莫里斯文明史系列)
》
售價:NT$
845.0
《
世界巨变:严复的角色(王中江著作系列)
》
售價:NT$
500.0
編輯推薦:
在许多系统中,随着用户群的增长,可扩展性成为发展的主要驱动力。有吸引力和高度实用的功能带来了成功,同时也带来了更多需要处理的请求和更多需要管理的数据。但是,当在轻负载下有意义的设计决策突然变成技术债务时,企业就会达到一个临界点。本书涵盖了可以快速、经济、高效地扩展应用程序的设计方法和技术。作者Ian Gorton带领软件架构师和开发人员学习分布式系统设计的基本原则。你将探索可扩展解决方案的基本要素,包括复制、状态管理、负载均衡和缓存。本书还会重点介绍可扩展性对数据库、微服务和基于事件的流系统的影响。通过学习本书,你将能够:? 学习可扩展系统的基础知识:可扩展性的基本设计原则、成本、并发性和架构权衡。? 设计可扩展的服务:深入探讨服务设计、缓存、异步消息传递、无服务器处理和微服务。? 设计可扩展的数据系统:学习数据系统基础知识、NoSQL 数据库以及最终一致性与强一致性。? 设计可扩展的流系统:探索流处理系统和可扩展的事件驱动处理机制。
內容簡介:
本书介绍了一系列可用于构建可扩展系统的软件架构方法和分布式技术。本书内容分为四部分:第一部分是基础知识,包括实现可扩展系统的基本机制、分布式系统的基本特征以及并发编程的简介;第二部分重点介绍如何扩展处理请求的能力,涵盖通过诸多架构方法(更多的计算资源、负载均衡、分布式缓存、异步消息以及基于微服务的架构)来扩展系统;第三部分介绍扩展数据层的相关知识,这是分布式系统理论最突出的地方;第四部分介绍用于大规模处理流式事件的架构和技术。
關於作者:
Ian Gorton作为软件架构师、作家、计算机科学教授和顾问,在该领域拥有30年的从业经验。从研究生开始,他就专注于分布式技术,并在银行、电信、政府、医疗保健行业以及科学建模和仿真等领域从事大型软件系统的工作。Ian撰写了3本书,并发表了200多篇关于软件架构和软件工程的文章。在卡内基梅隆大学软件工程学院,他领导了大数据和大规模可扩展系统的研发项目。2015年,他加入美国东北大学,成为计算机科学教授,自此一直致力于相关主题的工作、写作和演讲。他还拥有英国谢菲尔德哈勒姆大学的博士学位,是IEEE计算机学会高级会员。
目錄 :
目录
前言1
第一部分 基础知识7
第1章 可扩展系统简介9
1.1 可扩展性的定义9
1.2 21世纪早期系统规模案例11
1.3 软件系统发展简史 13
1.4 可扩展性系统设计基本原则14
1.5 可扩展性与成本16
1.6 可扩展性与架构的权衡18
1.7 总结和延伸阅读21
第2章 分布式系统架构简介22
2.1 系统架构基础22
2.2 水平扩展24
2.3 使用缓存扩展数据库26
2.4 分布式数据库28
2.5 多处理层28
2.6 提高系统响应能力31
2.7 系统和硬件的可扩展性32
2.8 总结和延伸阅读35
第3章 分布式系统要点36
3.1 通信基础36
3.2 远程方法调用43
3.3 局部故障48
3.4 分布式系统中的共识52
3.5 分布式系统中的时间53
3.6 总结和延伸阅读55
第4章 并发系统概述57
4.1 为什么要并发57
4.2 线程60
4.3 线程执行顺序62
4.4 线程引入的问题64
4.5 线程的状态72
4.6 线程间的协调73
4.7 线程池76
4.8 同步屏障78
4.9 线程安全集合80
4.10 总结和延伸阅读81
第二部分 可扩展系统83
第5章 应用服务85
5.1 服务设计85
5.2 应用服务器93
5.3 水平扩展96
5.4 负载均衡97
5.5 总结和延伸阅读103
第6章 分布式缓存104
6.1 应用缓存104
6.2 Web缓存108
6.3 总结和延伸阅读112
第7章 异步消息传递114
7.1 消息传递简介115
7.2 示例:RabbitMQ119
7.3 消息传递模式126
7.4 总结和延伸阅读129
第8章 无服务器处理系统130
8.1 无服务器的魅力130
8.2 GAE131
8.3 AWS Lambda135
8.4 案例研究:平衡吞吐量和成本139
8.5 总结和延伸阅读142
第9章 微服务144
9.1 转向微服务144
9.2 微服务的弹性151
9.3 总结和延伸阅读158
第三部分 可扩展的分布式数据库161
第10章 可扩展数据库基础163
10.1 分布式数据库163
10.2 扩展关系数据库164
10.3 向 NoSQL 转变169
10.4 CAP定理178
10.5 总结和延伸阅读179
第11章 最终一致性180
11.1 什么是最终一致性180
11.2 可调节一致性183
11.3 读取和写入仲裁185
11.4 副本修复187
11.5 冲突处理189
11.6 总结和延伸阅读194
第12章 强一致性196
12.1 强一致性简介197
12.2 一致性模型198
12.3 分布式事务199
12.4 分布式共识算法203
12.5 总结和延伸阅读213
第13章 分布式数据库实践案例215
13.1 Redis215
13.2 MongoDB220
13.3 Amazon DynamoDB226
13.4 总结和延伸阅读232
第四部分 事件和流处理235
第14章 可扩展的事件驱动处理237
14.1 事件驱动架构237
14.2 Apache Kafka239
14.3 总结和延伸阅读248
第15章 流处理系统250
15.1 流处理简介251
15.2 流处理平台253
15.3 案例研究:Apache Flink255
15.4 总结和延伸阅读261
第16章 可扩展系统的基本要素262
16.1 自动化262
16.2 可观测性264
16.3 部署平台264
16.4 数据湖265
16.5 总结和延伸阅读265
內容試閱 :
前言
本书围绕“软件系统大规模运行的能力日益成为定义成功的关键因素”这一论点而编写。 随着世界的关联性日渐加强,系统的大规模运行只会变得更加普遍。因此,本书的目标 是为读者提供分布式和并发系统的核心知识。本书还会介绍一系列可用于构建可扩展系 统的软件架构方法和分布式技术。
软件系统可扩展性的重要性
世界变化的步伐快得令人生畏。创新每天都在涌现,不断为我们所有人创造用于互动、 开展业务、娱乐……甚至阻断疾病流行的新能力。大部分创新的动力源于软件,这些软 件由大型互联网公司的开发者大军、初创公司的精干小团队以及介于两者之间的各种规 模的团队编写。
交付及时响应用户需求的软件系统已经足够困难,而在大规模系统面前,这项任务变 得更加艰巨。我们都知道系统暴露在意想不到的高负载之下时会突然失效—在最 好的情况下,这会对组织造成不良影响,最坏的情况下甚至会导致员工失业或公司 倒闭。
软件系统不同于物理系统,因为它是无定形的,它的物理形式( 1 和 0)与实际功能没有任何相似之处。我们绝不会期望在一夜之间将一个500人的小村庄变成一个1000万人口的大城市。但是,对于软件系统,我们有时期待它能处理的请求数是设计时的1000倍。不出所料,结果很少如人意。
目标读者
本书的主要目标读者是在分布式并发系统领域毫无经验或经验有限的软件工程师和架构 师。他们需要加深理论知识学习和积累设计实践经验,以迎接构建面向互联网的大规模 应用程序所带来的挑战。
你将从本书收获什么
本书从可扩展性的角度涵盖了并发和分布式系统的概况。将可扩展性与其他架构特性完 全分开是不现实的,但可扩展性是本书讨论的主要焦点。当然,架构的其他特性也必然 会发挥作用,性能、可用性和一致性常常是人们关注的焦点。
构建分布式系统需要对分布式和并发有一些基本的了解—这些知识贯穿本书,并反复 出现。反复出现是必要的,因为分布式系统中的两个基本问题使本书的各个主题变得复 杂,如下所述。
第一,尽管整个系统几乎始终完美运行,但系统的个别部分随时可能会出现故障。当一 个组件出现故障(硬件崩溃、网络中断、服务器错误等)时,我们必须采取相应技术来 保证系统继续运行并能从故障中恢复。每个分布式系统都会经历组件故障,它们通常以 奇怪、神秘和无法预料的方式出现。
第二,创建可扩展的分布式系统需要多个活动组件的协调。每个组件都需要遵守协议并 尽可能快地处理请求。哪怕只有一个组件导致请求延迟,都有可能导致整个系统性能不 佳,甚至最终崩溃。
有大量的文献可以帮助你解决这些问题。幸运的是,还有大量技术可以帮助我们构建容 错且可扩展的分布式系统。这些技术包含了难以正确构建的理论方法和复杂算法。在广 泛适用的平台级技术的指导下,我们可以站在巨人的肩膀上构建复杂的业务解决方案。
具体来说,本书的读者将学到:
? 分布式系统的基本特征,包括状态管理、时间协调、并发性、通信和协调。
? 用于构建可扩展的健壮服务的架构方法和支持技术。
? 分布式数据库如何运行以及如何用于构建可扩展的分布式系统。
? 用于构建基于事件的流系统的架构和技术,例如 Apache Kafka 和 Flink。