新書推薦:
《
虚拟资本:金融怎样挪用我们的未来
》
售價:NT$
352.0
《
刻意练习不生气
》
售價:NT$
179.0
《
大宋理财:青苗法与王安石的金融帝国(全彩插图本)
》
售價:NT$
500.0
《
安全感是内心长出的盔甲
》
售價:NT$
305.0
《
快人一步:系统性能提高之道
》
售價:NT$
505.0
《
我们为什么会做梦:让梦不再神秘的新科学
》
售價:NT$
352.0
《
算法图解(第2版)
》
售價:NT$
356.0
《
科学的奇幻之旅
》
售價:NT$
352.0
|
內容簡介: |
云原生之路,漫漫而修远,因为云在发展,应用也在发展。如何让应用充分利用云的特性焕发全新面貌,这是每个云原生应用架构领域的人应该思考的问题。
本书分为两篇,从技术演进讲起,让读者充分了解系统资源、应用架构和软件工程的发展历程,从而拥有技术角度的全局视野;然后介绍云原生应用的实践,手把手教你设计一个云原生应用。
本书适合云原生应用开发人员、架构师、云计算从业者阅读,部分章节对产品团队、运维人员亦有一定的参考价值。
|
關於作者: |
贺阮
攻读博士期间的主要研究方向是云计算安全。毕业之后一直深耕于云计算领域,工作内容涉及虚拟化内核、容器、调度、安全、微服务、应用架构、软件设计开发等,工作岗位覆盖科研、开发、产品架构、售前解决方案、售中售后支持等。曾先后任OpenStack基金会董事、ISO/IEC JTC1/SC38和ISO/IEC JTC1/SC27标样委员会委员、联合国国际电信联盟(ITU)云计算安全组副报告人,以及多个云计算学术会议、期刊编辑等职位,从各个维度见证了云计算行业的发展。
史冰迪
2015年毕业于中央财经大学计算机科学与技术专业,同年进入中国软件与技术服务股份有限公司,从事政务信息化相关工作。先后任软件系统研发工程师、需求经理、软件项目经理和集成项目大项目经理等多个职位,参与过软件系统开发生命周期全流程相关工作。2020年进入中国信息通信研究院从事政务信息化项目管理工作,从另一个方向继续在政务信息化方向发力,不断努力将电子政务、数字政府等工作与各类新技术结合。
|
目錄:
|
目录
技术演进篇
第1部分 系统资源 2
第1章 操作系统 3
1.1 操作系统简介 3
1.1.1 主要功能 4
1.1.2 系统结构 5
1.2 CPU指令集原理 6
1.2.1 特权指令集和非特权指令集 6
1.2.2 保护模式及内核态、用户态 7
1.2.3 指令工作流程 8
1.3 内核 9
1.3.1 组成模块化 9
1.3.2 单内核 9
1.3.3 微内核 10
1.3.4 外内核 11
第2章 虚拟化 13
2.1 虚拟化概述 13
2.1.1 直接使用物理设备 13
2.1.2 虚拟化原理 14
2.2 虚拟化指令集 16
2.2.1 敏感指令集 17
2.2.2 虚拟化指令集的工作模式 17
2.3 虚拟化类型 20
2.3.1 全虚拟化 20
2.3.2 类虚拟化 21
2.3.3 硬件辅助虚拟化 22
2.4 虚拟化架构 24
2.4.1 裸金属架构 24
2.4.2 宿主模式架构 25
2.5 常见的虚拟化产品 25
2.5.1 VMware 25
2.5.2 Xen 26
2.5.3 KVM 26
2.5.4 QEMU 27
2.5.5 NEMU 28
2.5.6 Firecracker 28
2.5.7 VirtualBox 28
2.5.8 Libvirt 29
2.5.9 Vagrant 30
第3章 云计算 32
3.1 云计算概述 32
3.1.1 虚拟化的不足 32
3.1.2 云计算的特点 33
3.2 IaaS 34
3.2.1 云的部署模式 34
3.2.2 IaaS的主要功能 36
3.2.3 IaaS架构 36
3.2.4 云平台组织架构 37
3.2.5 OpenStack 39
3.2.6 云平台部署架构 41
3.3 PaaS 42
3.3.1 简介 43
3.3.2 核心功能 45
3.3.3 微软Azure 47
3.3.4 PaaS的优缺点 48
3.4 SaaS 49
第4章 容器 53
4.1 容器简介 53
4.1.1 容器技术的优缺点 53
4.1.2 大事记 54
4.2 基本技术 55
4.2.1 namespace 56
4.2.2 cgroup 59
4.2.3 rootfs 60
4.3 Docker 61
4.3.1 容器运行时 61
4.3.2 镜像 63
4.3.3 Docker总结 64
4.4 内核容器技术 64
4.4.1 Kata 64
4.4.2 Firecracker 65
4.4.3 gVisor 66
4.4.4 Unikernel 67
4.5 容器与虚拟机 68
4.6 容器与PaaS 69
第5章 容器编排 70
5.1 容器编排简介 70
5.1.1 大事记 70
5.1.2 Swarm与Kubernetes之争 71
5.1.3 容器编排工具的核心功能 73
5.2 Kubernetes 74
5.2.1 设计理念与特性 74
5.2.2 运行架构 76
5.2.4 API对象 80
5.3 容器编排与PaaS 90
5.4 Kubernetes企业级实战:OpenShift 91
5.5 实现有状态应用和无状态应用 91
5.5.1 无状态应用与有状态应用 92
5.5.2 从无状态应用到Severless 92
5.5.3 Kubernetes对有状态应用的管理 92
5.5.4 容器编排的终目标 93
第2部分 应用架构 95
第6章 应用架构概述 96
6.1 架构与框架的区别 97
6.2 狭义的和广义的应用架构 97
6.2.1 狭义的应用架构 97
6.2.2 广义的应用架构 98
6.3 应用架构的定义 98
6.4 应用架构的目标 99
第7章 主流架构 101
7.1 “4 1”架构视图 101
7.1.1 逻辑视图 102
7.1.2 开发视图 102
7.1.3 进程视图 102
7.1.4 物理视图 103
7.1.5 场景视图 103
7.2 ArchiMate 104
7.2.1 ArchiMate概述 104
7.2.2 业务层 106
7.2.3 应用层 106
7.2.4 技术层 107
7.3 TOGAF框架 109
第8章 架构详解 114
8.1 业务架构 114
8.1.1 业务场景 114
8.1.2 业务用例 115
8.1.3 业务实体 115
8.1.4 业务流程 116
8.2 应用架构 116
8.2.1 功能架构 117
8.2.2 数据架构 121
8.2.3 实现架构 124
8.3 基础架构 131
8.3.1 物理架构 131
8.3.2 运行架构 131
第9章 典型的应用架构模式 133
9.1 单体架构 133
9.1.1 单体架构的特点 133
9.1.2 功能架构 134
9.1.3 单体应用的数据优化 136
9.1.4 单体架构的优缺点 142
9.2 基于组件的架构 143
9.2.1 特性 144
9.2.2 微内核架构 145
9.2.3 两种基于组件的应用开发、运行框架 145
9.2.4 组件设计原则 146
9.3 分布式与SOA 148
9.3.1 分布式 148
9.3.2 SOA 150
第10章 微服务架构 160
10.1 微服务架构简介 160
10.1.1 微服务与应用 161
10.1.2 微服务架构与SOA 162
10.1.3 微服务架构与容器编排 162
10.1.4 微服务架构与组织架构 163
10.2 采用微服务架构的优势与难点 163
10.3 微服务架构详解 165
10.3.1 功能架构 165
10.3.2 实现架构 166
10.3.3 部署单元 167
10.4 设计原则 167
10.4.1 服务注册中心 167
10.4.2 API网关 168
10.4.3 跨服务通信 169
10.4.4 API设计 170
10.4.5 数据一致性处理 172
第11章 微服务框架 181
11.1 微服务架构与微服务框架 181
11.2 核心功能 182
11.2.1 服务注册发现 182
11.2.2 服务负载路由 183
11.2.3 统一配置 184
11.2.4 服务编排与弹性伸缩 184
11.2.5 流量管控 185
11.2.6 可观察运维 186
11.3 框架分类 188
11.3.1 业务处理框架 188
11.3.2 SDK框架 189
11.3.3 服务网格 190
第3部分 软件工程 195
第12章 应用设计 196
12.1 明确愿景 196
12.1.1 目标对象 197
12.1.2 度量价值 197
12.1.3 详细描述 198
12.1.4 上下文图 198
12.2 明确组织架构 200
12.3 顶层业务建模 201
12.3.1 概述 201
12.3.2 业务领域 202
12.3.3 业务场景 205
12.4 应用需求分析 209
12.4.1 概述 209
12.4.2 识别角色 210
12.4.3 业务实体 210
12.4.4 业务流程 212
12.5 应用设计建模 214
12.5.1 概述 214
12.5.2 圈定微服务 215
12.5.3 应用架构设计 216
12.6 领域驱动建模 218
12.6.1 分布式应用建模的痛点 219
12.6.2 DDD概述 219
12.6.3 DDD的优势 220
12.6.4 基本概念 221
12.6.5 实施步骤 229
12.6.6 DDD与应用设计 238
第13章 软件开发 240
13.1 瀑布模型 240
13.2 敏捷开发模型 242
13.2.1 敏捷宣言 243
13.2.2 Scrum 244
13.2.3 极限编程方法 245
第14章 开发运维一体化:DevOps 248
14.1 精益思想 248
14.1.1 起源 248
14.1.2 精益生产 249
14.1.3 精益原则 250
14.1.4 精益软件开发 251
14.1.5 价值探索 253
14.1.6 IT价值流 253
14.1.7 精益和敏捷 255
14.2 持续集成 255
14.2.1 原则 255
14.2.2 步骤 256
14.3 持续交付与持续部署 258
14.3.1 持续交付 258
14.3.2 持续部署 259
14.3.3 特性发布 263
14.4 DevOps与CI/CD 269
14.4.1 定义 270
14.4.2 原则与推广 271
14.4.3 三步工作法 272
14.5 测试 275
14.5.1 概述 275
14.5.2 功能性测试 277
14.5.3 非功能性测试 281
14.6 DevOps与敏捷开发、Kubernetes、微服务、应用架构模式的关系 283
第15章 SRE运维 286
15.1 SRE运维简介 286
15.1.1 SLA 287
15.1.2 运维的发展阶段 288
15.1.3 架构层次 288
15.2 监控 289
15.2.1 监控概述 289
15.2.2 多层监控 291
15.2.3 告警 292
15.3 日志 293
15.3.1 日志系统架构 293
15.3.2 日志的采集、汇总与展示 294
15.4 故障排查 295
15.4.1 具体步骤 295
15.4.2 监控检查 296
15.5 作业运行 296
第16章 数字化运营 298
16.1 数字化运营概述 298
16.1.1 运营数据 298
16.1.2 角色分类 299
16.1.3 用户画像 299
16.2 数据处理 300
16.2.1 数据采集 300
16.2.2 数据建模 301
16.2.3 数据分析 301
16.2.4 指标分析 302
16.3 反馈流程 303
16.4 验证模式 304
16.4.1 A/B测试 304
16.4.2 灰度发布 305
16.5 平台架构 306
16.5.1 运维数据平台 306
16.5.2 智能化运维 306
实践篇
第4部分 架构、应用落地与中台构建 310
第17章 云原生架构 311
17.1 云原生的定义 311
17.1.1 12因子应用 311
17.1.2 云原生架构的特征 313
17.1.3 CNCF对云原生的定义 314
17.1.4 本书对云原生的定义 315
17.2 关键技术 318
17.2.1 不可变基础设施(容器) 318
17.2.2 声明式编排(Kubernetes) 319
17.2.3 微服务架构(解耦性) 320
17.2.4 动态赋能(服务网格) 320
17.2.5 适应度函数(引导性) 320
17.2.6 领域驱动建模(统一模型) 321
17.2.7 CI/CD/CO 321
17.3 云原生应用的实现过程 322
第18章 应用落地实践 323
18.1 云原生化条件 323
18.1.1 团队能力建设 323
18.1.2 推荐引入云原生化的场景 324
18.1.3 不推荐引入云原生化的场景 326
18.2 演进式的流程 327
18.3 应用改造模式 328
18.3.1 双胞胎模式 328
18.3.2 绞杀者模式 328
18.3.3 修缮者模式 329
18.4 应用拆分原则 330
18.4.1 按业务能力拆分 330
18.4.2 按DDD子领域拆分 330
18.4.3 其他原则 332
18.5 API设计与治理 333
18.5.1 前后端分离 334
18.5.2 规范化API 334
18.5.3 并行或异步调用 336
18.5.4 业务聚合 336
18.6 应用状态分1
|
內容試閱:
|
前言
谈到一个应用,我们首先考虑的是运行这个应用所需要的系统资源。其次,关于应用自身的架构模式也要考虑,从传统的单体架构模式到后来的微服务模式、服务网格,以业务功能为维度进行分拆更有利于应用的不断演进。后,还需要从软件工程的角度来考虑云原生应用的设计、开发、部署、运维等不同阶段。
设计云原生应用需要从以上三个维度进行全方位的思考。所谓原生为云设计的应用,就是指从初便被设计为在云上以方式运行的应用,这种应用能充分发挥云平台的各种优势。
架构师是推动上述应用设计、开发,真正将云原生应用落地的人。那么何为架构师?
架构师的基本职责是在项目早期就设计好基本的框架,这个框架既能够确保团队成员顺利编写代码,满足近期业务需求的变化,又能为进一步的发展留出空间(所谓scalability),即确定技术选型。
20多年前的经典著作Design Patterns中讲过学习设计模式的意义,放在架构师的定义中非常贴切:成为架构师并不是要我们学习一种新的技术或者编程语言,而是要建立一种用于交流的共同语言和词汇,在设计方案时方便沟通,同时也帮助我们从更抽象的层次去分析问题本质,不被一些实现的细枝末节所困扰。当把很多问题抽象出来之后,我们也能更深入、更好地去了解现有系统——这些意义,对于今天的后端系统设计来说,也仍然是正确的。
总而言之,架构设计对应用有着深远的影响,它的好坏决定了应用的整体质量,并且决定了开发人员开发、维护和扩展应用的难易程度。
对架构师而言,不能为了架构而设计架构,在选择架构前,要始终理解问题和需求,不要本末倒置。一方面,需要精心设计应用架构;另一方面,需要对前端UI、测试、运维、数据管理等方面都非常熟悉,从而做出正确的决定。
本书将从全栈视角出发,从系统资源到应用架构,再到软件工程,深入浅出地讲解计算机技术的演进,给架构师或想要成为架构师的人一个非常好的角度来看待不同时代的技术,以及其能解决的问题。本书还会介绍在现有的云原生技术下,如何以的形态和方式来构建一个应用,使其能够真正发挥云的能力,从而达到1 1>2的效果。
本书内容
本书分为“技术演进篇”和“实践篇”两篇,涉及4个部分,共19章,大概的内容分布及简介如下。
技术演进篇
第1部分 系统资源(第1~5章)
基础架构解决的是一些通用性问题,主要涉及应用运行时所需要的系统资源,这些系统资源是设计任何类型的应用都需要重视的内容。针对不同的系统资源,应用的部署、运行方式也不尽相同。这一部分将首先介绍操作系统、虚拟化等基本知识,然后讲解云计算相关内容,以及容器与容器编排的核心知识。
第2部分 应用架构(第6~11章)
架构的重要性在于实现应用的非功能性需求。非功能性需求往往能决定一个应用运行时的质量,也能决定开发时的质量。这一部分将宏观介绍应用架构的定义、分类、目标等,列举主流架构视图,并按照技术演进过程介绍单体架构、分布式架构、SOA架构、微服务架构等内容。
第3部分 软件工程(第12~16章)
1968 年,世界各地的计算机科学家在德国的Garmisch召开了一次国际会议,在会上正式提出了“软件工程”一词。软件工程管理的核心目的是支撑新的演进式架构。软件工程的整个流程分为5个阶段:应用设计、软件开发、开发运维一体化、SRE运维、数字化运营。在这一部分中,我们将紧密围绕以上5个技术演进阶段,从软件工程角度讲解云原生应用架构的实现。
实践篇
第4部分 架构、应用落地与中台构建(第17~19章)
在这一部分中,我们将详细剖析云原生架构,介绍其定义、涉及的关键技术,以及具体的实现过程。本部分还会介绍应用落地的实践,涉及应用改造、应用拆分、API设计与治理等。此外,“中台”这个概念也与云原生密不可分,本部分还会阐述云原生应用与中台之间的关系,以及如何通过中台使应用的云原生化更加便捷。
|
|