[套装书]云原生:运用容器、函数计算和数据构建下一代应用+企业迁云实战 第2版(2册)

作者
[美]鲍里斯·肖勒(Boris Scholl) 特伦特·斯旺森(Trent Swanson) 彼得·加索维奇(Peter Jausovec) 阿里云智能-全球技术服务部
丛书名
O’Reilly精品图书系列
出版社
机械工业出版社
ISBN
9782005181519
简要
简介
内容简介书籍计算机书籍 ---------------------------云原生:运用容器、函数计算和数据构建下一代应用--------------------------- 本书旨在能够提供一些基础知识,来帮助开发者和架构师更从容地开启云原生应用之旅。本书首先介绍一些分布式系统的基本原理及其与云原生应用的关系,然后再进一步介绍容器和函数等相关技术,接着,本书会介绍服务间的通信模式、服务的弹性和数据模式,并讨论在什么情况下应该使用这些技术,最后会总结一些经验性的东西,例如如何结合DevOps方法,怎么兼顾可移植性,以及一些最佳实践。这些最佳实践对于打造一个成功的云原生应用是非常有帮助的。这本书不会手把手教你如何实现一个满足特定业务需求的云原生应用。但是在读完这本书之后,你一定会知道如何去设计、构建和运维一个成功的云原生应用。 ---------------------------企业迁云实战 第2版--------------------------- 本书是一本指导用户和云计算服务从业人员规划与实施企业应用、数据库、大数据等迁移上云的工程类书籍,融合了阿里云技术团队多年的实战和思考。本书按照“点—线—面—体”的主线,将云计算的基础知识,应用迁移、数据库迁移、数据存储迁移、大数据迁移、应用优化,云上架构规划与设计等知识逐步深入展开,并通过案例进行综合,使读者更深刻地理解和掌握企业迁云的过程和需要注意的问题。
目录



---------------------------云原生:运用容器、函数计算和数据构建下一代应用---------------------------


前言 1
第1章 云原生简介 5
1.1 分布式系统 5
1.1.1 分布式系统的误区 5
1.1.2 CAP定理 8
1.2 十二要素应用 8
1.3 可用性和服务等级协议 11
1.4 本章小结 12
第2章 云原生基础 13
2.1 容器 13
2.1.1 容器隔离等级 15
2.1.2 容器编排 16
2.1.3 Kubernetes概述 17
2.1.4 Kubernetes和容器 20
2.2 无服务器架构 21
2.3 函数计算 22
2.4 从虚拟机到云原生 23
2.4.1 提升和转变 23
2.4.2 应用的现代化改造 24
2.4.3 应用的优化 26
2.5 微服务 26
2.5.1 微服务架构的优势 27
2.5.2 微服务架构带来的挑战 29
2.6 本章小结 31
第3章 云原生应用的设计 33
3.1 云原生应用的基础 33
3.1.1 精益运营 33
3.1.2 安全性 35
3.1.3 可靠性与可用性 36
3.1.4 可扩展性与成本 37
3.2 云原生与传统架构的对比 37
3.3 函数计算与服务 41
3.3.1 函数计算的使用场景 42
3.3.2 使用函数计算的考虑因素 42
3.3.3 函数与服务的组合运用 43
3.4 API设计与版本控制 45
3.4.1 API的前后兼容 46
3.4.2 语义版本号 47
3.5 服务间的通信 48
3.5.1 通信协议 48
3.5.2 消息协议 50
3.5.3 序列化的考虑因素 50
3.5.4 幂等性 51
3.5.5 请求与响应 52
3.5.6 发布者与订阅者 53
3.5.7 发布者/订阅者模式与请求/响应模式间的选择 55
3.5.8 同步与异步 56
3.6 网关 56
3.6.1 路由 57
3.6.2 聚合 58
3.6.3 卸载 59
3.6.4 网关的实现 60
3.7 出口网关 60
3.8 服务网格 60
3.9 架构示例 69
3.10 本章小结 73
第4章 数据处理 75
4.1 数据存储系统 76
4.1.1 对象、文件和磁盘 77
4.1.2 数据库 78
4.1.3 流和队列 80
4.1.4 区块链 81
4.1.5 数据存储的选择 81
4.2 多数据存储下的数据 84
4.2.1 捕获数据更改 85
4.2.2 将更改作为事件写入更改日志 87
4.2.3 事务监管 88
4.2.4 事务回滚 90
4.2.5 提取、转换和加载 90
4.2.6 微服务和数据湖 91
4.3 客户端访问数据 94
4.3.1 受限的客户令牌(代客密钥) 94
4.3.2 细粒度访问控制的数据库服务 95
4.3.3 GraphQL数据服务 96
4.4 可快速伸缩的数据 97
4.4.1 数据分片 98
4.4.2 数据缓存 98
4.4.3 内容分发网络 99
4.5 数据分析 101
4.5.1 数据流 101
4.5.2 批处理 101
4.5.3 对象存储上的数据湖 102
4.5.4 数据湖和数据仓库 102
4.5.5 分布式查询引擎 103
4.6 Kubernetes中的数据库 104
4.6.1 存储卷 104
4.6.2 StatefulSet 106
4.6.3 DaemonSet 107
4.7 本章小结 107
第5章 DevOps 109
5.1 什么是DevOps 109
5.1.1 协作 109
5.1.2 自动化 110
5.1.3 精益原则和流程 110
5.1.4 度量 111
5.1.5 分享 111
5.2 测试 112
5.2.1 测试替身 113
5.2.2 自动化测试金字塔 113
5.2.3 不同测试类型的适用时机 118
5.2.4 测试节奏 119
5.2.5 在生产环境中测试 120
5.3 开发环境和工具 122
5.3.1 开发工具 123
5.3.2 开发环境 126
5.3.3 本地开发环境 126
5.3.4 本地开发环境结合远端集群 127
5.3.5 Skaffold开发工作流 127
5.3.6 将远端集群路由到本地开发环境 129
5.3.7 云端开发环境 129
5.4 持续集成/持续交付 130
5.4.1 源代码管理 131
5.4.2 构建阶段 132
5.4.3 测试阶段 132
5.4.4 部署阶段 134
5.4.5 发布阶段 136
5.4.6 发布后阶段 137
5.5 监控 137
5.5.1 收集指标 139
5.5.2 服务的可观测性 145
5.6 配置管理 149
5.6.1 单一环境变量 151
5.6.2 多环境变量 151
5.6.3 将配置数据放入存储卷中 152
5.6.4 密钥保存 152
5.6.5 部署配置 154
5.7 持续集成/持续交付流程示例 156
5.8 本章小结 159
第6章 最佳实践 161
6.1 迈向云原生 161
6.1.1 找个合理的理由打破巨石应用 161
6.1.2 先解耦简单的服务 162
6.1.3 学会小规模的运维 162
6.1.4 使用防损层模式 162
6.1.5 使用刀砍模式 162
6.1.6 准备一个数据迁移策略 164
6.1.7 重写所有模板代码 164
6.1.8 重新考虑框架、语言、数据结构和数据存储 164
6.1.9 淘汰老代码 164
6.2 确保弹性 164
6.2.1 用重试来解决瞬时故障 165
6.2.2 使用有限次的重试 165
6.2.3 用断路器来处理非瞬时故障 166
6.2.4 优雅地降级 166
6.2.5 使用隔离模式 166
6.2.6 实现健康及就绪检查 166
6.2.7 为容器设定CPU和内存限制 166
6.2.8 实现限速和限流 167
6.3 确保安全性 167
6.3.1 安全性需求同其他需求一样重要 167
6.3.2 在设计时就考虑安全性 167
6.3.3 授予最小访问权限 167
6.3.4 使用独立的账号、订阅和租客 167
6.3.5 安全地存储所有密钥 168
6.3.6 模糊化数据 168
6.3.7 传输数据加密 168
6.3.8 使用联合身份管理 168
6.3.9 使用基于角色的访问控制 168
6.3.10 Kubernetes pod的隔离 169
6.4 处理数据 169
6.4.1 使用托管数据库和数据分析服务 169
6.4.2 使用最符合数据需求的存储 169
6.4.3 将数据保存在多个地域或可用区中 170
6.4.4 使用数据分区和复制以提高扩展性 170
6.4.5 避免过度获取及频繁的I/O操作 170
6.4.6 不要把业务逻辑放在数据库中执行 170
6.4.7 使用类生产环境数据来测试 170
6.4.8 处理瞬时故障 171
6.5 性能和伸缩性 171
6.5.1 设计可扩展的无状态服务 171
6.5.2 使用平台的自动伸缩功能 171
6.5.3 使用缓存 172
6.5.4 用分区来实现超出服务限制的扩容 172
6.6 函数计算 172
6.6.1 编写单一用途的函数 172
6.6.2 避免串联函数 172
6.6.3 函数应保持轻量和简单 173
6.6.4 实现无状态函数 173
6.6.5 分离函数入口和函数的业务逻辑 173
6.6.6 避免长时间运行的函数 173
6.6.7 用队列解决跨函数通信问题 173
6.7 运维 173
6.7.1 部署和发布是两项独立的活动 174
6.7.2 部署的内容要尽量小 174
6.7.3 组件层级的CI/CD定义 174
6.7.4 应用部署的一致性 174
6.7.5 采用零宕机发布 174
6.7.6 不要变更部署后的架构 174
6.7.7 使用容器化构建 175
6.7.8 用代码来描述基础设施 175
6.7.9 使用命名空间来组织Kubernetes中的服务 175
6.7.10 环境间的隔离 175
6.7.11 分隔函数源代码 175
6.7.12 关联代码提交和部署 175
6.8 日志、监控及告警 175
6.8.1 使用统一的日志系统 176
6.8.2 使用关联ID 176
6.8.3 在日志记录中包含上下文 176
6.8.4 统一的结构化日志格式 176
6.8.5 适当地标记指标 176
6.8.6 避免告警疲劳 177
6.8.7 定义基于重点性能指标的告警 177
6.8.8 在生产环境中持续测试 177
6.8.9 从基础的指标开始 178
6.9 服务通信 178
6.9.1 设计时考虑前后兼容性 178
6.9.2 封装好服务避免泄露内部细节 179
6.9.3 优先考虑异步通信 179
6.9.4 使用高效的序列化技术 179
6.9.5 使用队列和流来应对高负载和流量高峰 180
6.9.6 用批处理来提高请求处理的效率 180
6.9.7 拆分大的消息 180
6.10 容器 180
6.10.1 将镜像存储在可信的注册服务器中 180
6.10.2 充分利用Docker的构建缓存 181
6.10.3 不要使用特权模式运行容器 181
6.10.4 使用显式的容器镜像标签 181
6.10.5 保持小的容器镜像 181
6.10.6 单个容器只运行一个应用 182
6.10.7 使用可信镜像仓库中经过验证的镜像 182
6.10.8 对镜像进行漏洞扫描 182
6.10.9 不要将数据保存在容器中 183
6.10.10 永远不要在容器中存放密钥和配置 183
6.11 本章小结 183
第7章 可移植性 185
7.1 为什么要使应用可移植 185
7.2 可移植性的代价 186
7.3 何时及如何实现可移植性 187
7.3.1 标准化的接口 188
7.3.2 共用的服务和功能 189
7.3.3 抽象和分层 189
7.3.4 第三方服务商的托管服务 191
7.3.5 可移植性工具 192
7.3.6 把Kubernetes作为可移植性层 194
7.4 本章小结 196



---------------------------企业迁云实战 第2版---------------------------


序
前言

第 1 章 云计算时代的到来
1.1 云计算的起源
1.2 云计算的概念
1.3 云服务的发展现状
1.3.1 DaaS
1.3.2 SaaS
1.3.3 PaaS
1.3.4 IaaS
1.4 云计算的未来
第 2 章 企业数字化转型与企业迁云
2.1 企业数字化转型之路
2.2 数字化转型后 IT 管理的改变
2.3 企业数字化转型的方法
2.4 数字化转型的云端实践
2.4.1 12306
2.4.2 天猫双十一
2.4.3 视频点播 / 直播类网站
第 3 章 云上通用架构设计与改造
3.1 网络架构设计
3.1.1 网络产品简介
3.1.2 网络接入与规划
3.1.3 混合云架构实践
3.2 云上运维管理架构设计
3.2.1 基于 RAM 实现账号权限管理方案
3.2.2 云上开发、测试、生产环境管理方案
3.3 云上安全管理
3.3.1 云上应用安全保障方案
3.3.2 云上安全管理实践
3.4 应用架构设计
3.4.1 负载均衡
3.4.2 可扩展性
3.4.3 微服务
3.4.4 异步化
3.4.5 高可用与容灾
3.4.6 云数据库架构实践
3.4.7 大数据处理技术架构
3.5 应用改造实践
3.5.1 应用架构改造
3.5.2 数据库改造
3.5.3 文件存储改造
3.5.4 大数据实时计算应用改造
3.5.5 大数据离线分析应用改造
第 4 章 业务中台
4.1 什么是业务中台
4.2 业务中台的价值
4.2.1 烟囱式”系统开发方法
4.2.2 基于业务中台的系统开发
4.3 业务中台的实践过程
4.4 需求调研
4.4.1 需求调研前的准备工作
4.4.2 开始调研
4.4.3 调研内容
4.4.4 业务调研分析
4.5 企业业务中台的演进路线
4.6 业务中台的设计方案和原则
4.6.1 业务中台的核心共享服务中心
4.6.2 业务中台的设计方法
4.7 业务中台的实践
4.7.1 业务中台的最佳技术实践方式微服务
4.7.2 微服务的业务拆分原则
4.7.3 微服务的架构设计
4.7.4 微服务技术框架选型
4.7.5 EDAS 微服务技术框架剖析
4.8 阿里巴巴业务中台能力输出与案例
第 5 章 应用系统迁云
5.1 应用系统迁云的挑战
5.2 系统迁云方法
5.2.1 迁云原则
5.2.2 迁云策略
5.2.3 迁云节奏
5.3 迁云评估
5.4 迁云的整体流程
5.4.1 系统调研 97
5.4.2 风险评估
5.4.3 云上架构设计
5.4.4 系统改造
5.4.5 数据迁移验证
5.4.6 功能 / 性能测试
5.4.7 系统割接交付
5.5 系统迁云技术选型
5.6 直接迁移上云
5.7 改造迁移上云
5.7.1 OLTP 类型
5.7.2 OLAP 类型
5.7.3 文件 / 内容管理类型
5.7.4 大规模离线计算类型
5.8 云上安全保障
5.9 应用镜像服务迁云
5.9.1 镜像迁移概述
5.9.2 镜像迁移可行性评估
5.9.3 镜像迁移和转换工具
5.9.4 阿里迁云工具
5.9.5 通用镜像迁移方案
5.9.6 阿里云上跨 VPC 和区域、账号镜像迁移实践
第 6 章 数据库服务迁云
6.1 RDS
6.2 DRDS
6.3 异构数据库改造上云实践
6.3.1 Oracle 与 MySQL
6.3.2 MySQL 开发规范
6.3.3 MySQL 表设计
6.3.4 MySQL 分布式数据库
6.3.5 关键功能改造
6.3.6 RDS 性能优化
6.3.7 RDS 控制台
6.4 数据传输服务
6.4.1 DTS 产品架构
6.4.2 数据迁移
6.4.3 实时同步
6.4.4 数据订阅
6.4.5 DTS 的应用场景
第 7 章 数据库迁云工具ADAM
7.1 数据库迁云面临的挑战
7.1.1 传统企业数据中心的现状
7.1.2 传统业务系统架构的局限
7.1.3 数据库架构的选择
7.2 ADAM 及数据库迁云的流程
7.2.1 ADAM 概述
7.2.2 ADAM 迁云的流程
7.3 ADAM 数据库采集工具
7.4 ADAM SaaS 分析平台
7.5 ADAM SQL 在线翻译工具
7.6 ADAM Studio
7.6.1 ADAM Studio 客户端工具概述
7.6.2 ADAM Studio 的安装
7.6.3 ADAM Studio 主体迁移操作
7.7 ADAM PL/SQL Java 自动转换
7.7.1 P2J 工作原理
7.7.2 PL/SQL 转 Java 的背景
7.7.3 PL/SQL 转 Java 的难点
7.7.4 PL/SQL 转 Java 的功能特点
7.8 ADAM 一键迁移工具
7.9 ADAM 在项目中的实践
第 8 章 文件存储服务迁云
8.1 OSS 的适用场景
8.2 本地文件平滑迁移到OSS
8.2.1 迁移步骤
8.2.2 OSS 回源规则设置
8.2.3 迁移工具 OSSImport2
8.3 云上 OSS 应用实践
8.3.1 OSS 权限控制
8.3.2 OSS 防盗链
8.3.3 客户端直传 OSS 的实践
8.3.4 数据传输完整性校验
第 9 章 云上应用容量评估与优化
9.1 应用容量规划概述
9.2 应用容量压测评估方法
9.3 应用容量评估工具
9.4 应用监控与弹性伸缩
9.5 应用性能容量评估及优化案例
第 10 章 大数据上云 273
10.1 大数据上云概述
10.1.1 阿里云大数据架构
10.1.2 阿里云大数据产品介绍
10.1.3 大数据上云工具
10.1.4 大数据上云的优势
10.1.5 大数据处理场景
10.1.6 常见的大数据上云方案
10.2 大数据上云工具
10.2.1 客户调研
10.2.2 资源评估
10.2.3 数据上云
10.2.4 业务逻辑上云
10.3 大数据上云(E-MapReduce)
10.3.1 准备工作
10.3.2 资源评估
10.3.3 数据迁移
10.3.4 Hive 迁移
10.3.5 作业部署
10.3.6 双跑和校验
10.4 大数据上云案例
10.4.1 某气象企业数据上云案例
10.4.2 某直播企业数据上云案例
10.4.3 某政务平台数据上云案例
第 11 章 企业迁云综合案例
11.1 交通管理行业案例
11.1.1 行业背景
11.1.2 OLTP 系统迁云
11.1.3 典型 OLTP 系统平滑迁云
11.1.4 大规模离线计算系统迁云
11.1.5 典型的大规模离线计算系统迁云
11.1.6 迁云后的变化
11.2 互联网金融行业案例
11.2.1 迁云背景
11.2.2 迁云解决方案
11.2.3 迁云过程中的问题剖析
11.2.4 迁云后的变化



有问题微信扫码联系

推荐

Understand China
桂ICP备20004708号-4