目录
前言 .1
第0 章 Serverless 介绍 7
0.1 什么是Serverless? .8
0.1.1 Serverless 的历史 .9
0.1.2 云服务提供商概况 . 10
0.1.3 可靠性,可用性,灾难恢复 . 11
0.2 Serverless 的优势 . 12
0.2.1 增加的可伸缩性、安全性和可靠性 13
0.2.2 只支付你使用的东西 13
0.2.3 节省管理服务器的时间和金钱 13
0.2.4 提高开发人员的生产力 14
0.2.5 降低管理职责 14
0.2.6 集成的便利 15
0.3 Serverless 的弱点 . 15
0.3.1 冷(启动)战 16
0.3.2 计算时间. 16
0.3.3 VPC/ 网络问题 17
0.3.4 应用程序的大小 . 17
0.3.5 可能会更贵 17
0.3.6 厂商锁定. 18
0.3.7 复杂的调试 19
0.4 什么时候使用Serverless 有意义? . 19
0.5 Serverless 的计算机什么时候不适合你? 21
0.6 让我们开始 . 22
部分 生产之路 .23
第1 章 分布式系统 .25
1.1 什么是分布式系统? . 25
1.2 为什么我们需要一个分布式系统? 27
1.3 分布式系统的严酷现实 27
1.3.1 物理世界. 28
1.3.2 失踪的消息 29
1.3.3 不可靠的时钟 30
1.3.4 级联故障. 31
1.3.5 更新产生的意外 . 32
1.3.6 幂等性 . 32
1.4 我负责什么? 33
1.5 在设计分布式系统时,你需要考虑哪些? 34
1.5.1 松耦合(或解耦) . 34
1.5.2 容错 35
1.5.3 生成的(主)键 35
1.5.4 规划幂等性 36
1.5.5 两阶段的更新 36
1.6 延伸阅读 37
1.7 结论 38
第2 章 微服务 39
2.1 为什么要使用微服务? 40
2.1.1 提高开发速度 40
2.1.2 增加开发人员的自由 41
2.2 微服务的问题 42
2.2.1 增加了复杂性 43
2.2.2 需要适当的DevOps 实践和资源 43
2.2.3 本地开发和测试的挑战 44
2.3 如何有效地使用微服务? 45
2.3.1 一致的接口 45
2.3.2 松散耦合. 46
2.4 微服务有多微小? 47
2.5 选择单体应用还是微服务 48
2.5.1 什么时候应该使用单体应用? 49
2.5.2 什么时候需要使用微服务? . 51
2.6 结论 52
第3 章 Serverless 架构和模式 53
3.1 架构师的角色 54
3.2 要成为一名架构师,你需要知道哪些? . 55
3.3 决策 55
3.3.1 什么样的决策? . 56
3.3.2 记录你的决策 57
3.3.3 我们如何做决策? . 57
3.3.4 我们什么时候做决策? 58
3.4 云服务提供商组件 59
3.4.1 流 60
3.4.2 队列 60
3.4.3 桶 61
3.4.4 计算 62
3.4.5 数据存储. 62
3.4.6 身份认证服务 63
3.4.7 API 网关 . 64
3.4.8 GraphQL . 64
3.4.9 网络 64
3.4.10 状态机 65
3.4.11 日志记录 65
3.4.12 监测和报警 . 66
3.5 来自云服务提供商的事件 67
3.6 模式 68
3.6.1 示例1:Serverless 单体应用 69
3.6.2 示例2:传入Webhook 69
3.6.3 示例3:使用云服务提供商进行用户身份验证 70
3.6.4 示例4:通用的后台任务模式 . 71
3.6.5 示例5:流提取、转换、加载 . 71
3.6.6 示例6:创建自己的轮询集成 . 72
3.6.7 示例7:处理文件和图像 72
3.6.8 示例8:迁移服务模式 73
3.6.9 示例9:散开 74
3.7 结论 75
第4 章 接口 77
4.1 接口:需要一些组装 . 78
4.1.1 消息 78
4.1.2 协议 78
4.1.3 约定 79
4.2 Serverless 接口 . 79
4.2.1 自动重试和死信队列 80
4.2.2 有限与无限规模 . 81
4.3 设计接口 81
4.3.1 消息/ 载荷 . 82
4.3.2 会话和用户/ 身份验证 83
4.3.3 避免无约束的请求 . 83
4.3.4 接口与实现 84
4.3.5 带逻辑的线 85
4.4 设计不愉快的路径 86
4.4.1 验证输入. 86
4.4.2 失败 86
4.5 与其他服务集成的策略 89
4.5.1 超时 89
4.5.2 重试 90
4.5.3 指数补偿. 90
4.5.4 网络钩子. 91
4.5.5 评估外部服务 92
4.5.6 速度限制. 93
4.6 结论 93
第二部分 工具 95
第5 章 Serverless 框架 97
5.1 为什么使用Serverless 框架? 98
5.2 什么时候Serverless 框架不适合你 100
5.2.1 AWS 是的一等公民 100
5.2.2 AWS 的云服务模板也并不完美 100
5.2.3 你的基础设施依赖陌生人 101
5.3 开始之前你需要知道些什么 102
5.3.1 YAML 102
5.3.2 Node.js 104
5.3.3 云资源和权限 104
5.3.4 基础架构模板 106
5.3.5 生产的机密 . 106
5.3.6 .gitignore 文件 107
5.4 serverless.yml 文件的组成 107
5.4.1 提供者 108
5.4.2 环境 109
5.4.3 函数 110
5.4.4 资源 111
5.4.5 包 . 111
5.4.6 插件 112
5.4.7 自定义 113
5.4.8 用于健全和安全的命名空间 114
5.5 使用Serverless 命令 114
5.5.1 安装Serverless . 114
5.5.2 使用凭证设置Serverless . 115
5.5.3 使用Serverless install 拉入模板 116
5.5.4 检查示例项目的包(里面有什么) 116
5.5.5 部署 117
5.5.6 调用函数,并查看日志 117
5.5.7 回滚 118
5.5.8 销毁服务 118
5.5.9 部署软件包 . 119
5.6 现实世界serverless.yml . 119
5.6.1 设置环境变量 120
5.6.2 修改权限 120
5.7 结论 . 121
第6 章 监控、可观察性和警报 123
6.1 监控是什么? . 123
6.1.1 我们为什么需要监控? 124
6.1.2 监控与Serverless 有什么关系? . 125
6.1.3 自动化的入口 125
6.2 我有什么选择? 126
6.2.1 托管SaaS 产品 . 126
6.2.2 自托管和开放源码 127
6.3 监控的组成部分 128
6.3.1 监控指标 128
6.3.2 图表和图形 . 132
6.3.3 仪表板 133
6.3.4 警报/ 警告 134
6.4 选择先进的实践 136
6.4.1 心跳 136
6.4.2 冒烟测试和/ 或金丝雀 . 137
6.4.3 世界上重要的度量标准 137
6.4.4 避免厂商锁定 139
6.4.5 随着时间的推移清除度量和警报 140
6.5 结论 . 140
第7 章 日志 141
7.1 日志是什么? . 142
7.2 为什么需要日志? 143
7.3 何时依赖日志而不是监控指标 144
7.4 应该记录什么? 145
7.5 你不应该记录什么? 147
7.6 日志是如何工作的? 148
7.6.1 确保你的日志可伸缩 . 149
7.6.2 结构化的日志 150
7.6.3 更有效的日志调试 150
7.6.4 搜索日志 151
7.6.5 异常日志(Sentry) 151
7.7 收集其他日志 . 152
7.8 合规 . 153
7.9 分布式跟踪 154
7.10 加密日志以保证隐私和遵从性 154
7.11 那么你应该怎么做呢? 154
7.11.1 只加密敏感字段的值 155
7.11.2 加密整个日志语句 155
7.12 结论 156
第8 章 变更、自动化和部署流水线 157
8.1 应对变化 158
8.2 自动化的作用 . 158
8.3 使你的代码为部署到生产系统做好准备 160
8.4 基础设施即代码 161
8.5 数据库更改(迁移) 163
8.6 配置管理 164
8.7 什么是流水线? 164
8.8 关于流水线的决策 165
8.9 金丝雀和蓝/ 绿部署 166
8.10 为什么需要流水线? 168
8.11 部署流水线的关键阶段 168
8.11.1 步骤1:执行标准 . 169
8.11.2 步骤2:构建和打包 169
8.11.3 步骤3:测试 170
8.11.4 步骤4:发布Artifact . 170
8.11.5 步骤5:部署到目标环境 171
8.11.6 步骤6:验证部署 . 171
8.11.7 步骤7:必要时(可能)回滚 172
8.12 流水线故障处理 172
8.13 结论 173
第三部分 概念 175
第9 章 安全性、权限和隐私 . 177
9.1 每个人都有责任,但你尤其有责任 . 179
9.2 做好被黑的准备 180
9.2.1 了解你的威胁和攻击者 181
9.2.2 设计的安全 . 181
9.3 限制,跟踪和审查所有秘密和访问 . 183
9.4 准备更新 185
9.4.1 深度防御 186
9.4.2 限制爆炸半径 187
9.4.3 信任,但要核查 188
9.5 验证所有用户输入并对设置重复检查 190
9.5.1 监控系统中的异常情况 192
9.5.2 测试你的安全 192
9.5.3 仔细选择依赖项并保持软件的 193
9.5.4 优先保护你的数据和客户数据的隐私 195
9.5.5 不要干扰生产 196
9.6 确保你的电脑安全 197
9.7 继续学习 197
9.8 结论 . 198
第10 章 质量、测试和模拟 201
10.1 代码质量的作用 202
10.1.1 代码风格 203
10.1.2 代码校验 204
10.2 测试 206
10.2.1 测试什么,不测试什么 . 207
10.2.2 测试类型 207
10.2.3 代码覆盖率 212
10.2.4 加强你的测试 . 214
10.3 模拟 214
10.4 结论 218
第11 章 为失败做计划 219
11.1 简介:理解它,即使你不能管理它 219
11.2 识别风险 . 221
11.3 做好准备 . 222
11.4 做一个运行手册 223
11.5 计划宕机 . 225
11.6 监控你的云服务提供商 226
11.7 了解你的(服务)限制 227
11.8 结论 228
第12 章 总结 . 229
12.1 在供应商之间做取舍 230
12.2 社区 231
12.3 寻求其他人的建议 . 232
12.4 陷入困境时该如何做 233
12.5 迈出职业生涯的下一步 233