目 录
第一部分 架构简介
第1章 架构简介 2
1.1 架构的定义 2
1.2 对架构师的要求 4
1.3 互联网架构的挑战 7
1.4 一切尽在控制 8
1.5 小结 10
第二部分 架构设计的技术方法
第2章 切分与扩展 16
2.1 切分 16
2.1.1 数据维度切分 16
2.1.2 逻辑维度切分 23
2.1.3 切分的优点 24
2.2 扩展 25
2.2.1 部署扩展 25
2.2.2 升级扩展 27
2.2.3 set模型 29
2.3 小结 31
第3章 主动发现 33
3.1 日志 34
3.1.1 为什么要记日志 34
3.1.2 日志级别 35
3.1.3 日志类型 36
3.1.4 注意事项 38
3.2 监控 40
3.3 主动发现的监控标准 43
3.3.1 系统层监控 43
3.3.2 用户侧监控 44
3.3.3 应用层监控 45
3.4 其他形式的监控 47
3.5 小结 49
第4章 自动化 52
4.1 自动部署 54
4.1.1 准备 54
4.1.2 实现 55
4.1.3 验证 57
4.2 自动恢复 58
4.2.1 服务恢复 58
4.2.2 流量迁移 60
4.3 提升自动化意识 63
4.4 其他场景 64
4.5 小结 66
第5章 灰度升级 67
5.1 策略 68
5.1.1 按照用户身份执行灰度策略 68
5.1.2 按照号段执行灰度策略 69
5.1.3 按照命令号执行灰度策略 70
5.1.4 按照时间执行灰度策略 71
5.2 灰度部署方式 73
5.2.1 蓝绿部署/发布 73
5.2.2 金丝雀发布 74
5.3 注意事项 75
5.3.1 数据采样 75
5.3.2 及时回滚 76
5.3.3 周期完全 76
5.3.4 测试完全 77
5.3.5 充分验证 78
5.4 案例—系统迁移下线操作 79
5.4.1 验证和比对 79
5.4.2 回滚 80
5.5 小结 81
第6章 过载保护 82
6.1 过载的现象及原因 82
6.1.1 什么是过载 82
6.1.2 过载现象及原因分析 85
6.2 处理方式 86
6.2.1 隔离 87
6.2.2 限流 88
6.2.3 节流和防抖 94
6.2.4 动态调节 95
6.2.5 尽早拒绝 96
6.2.6 调整缓冲区大小 97
6.2.7 减少重试 98
6.2.8 做好容量评估 98
6.3 小结 99
第7章 负载均衡 100
7.1 理论算法 100
7.1.1 基本轮询 100
7.1.2 加权轮询 102
7.1.3 随机访问 103
7.1.4 源地址Hash 104
7.1.5 最小连接数 105
7.1.6 映射分配 106
7.1.7 一致性Hash 107
7.2 动态负载均衡 110
7.3 常用组件 111
7.3.1 DNS 111
7.3.2 Nginx 111
7.3.3 LVS 113
7.3.4 NAT模式 113
7.3.5 DR模式 114
7.3.6 IP Tunneling模式 115
7.3.7 SDK组件 117
7.4 实际案例—Web类业务负载均衡实现 117
7.5 小结 119
第8章 柔性 120
8.1 理论基础 122
8.1.1 CAP定理 122
8.1.2 BASE理论 124
8.2 柔性的实现方法 126
8.2.1 产品角度 127
8.2.2 技术角度 128
8.3 验证方式 131
8.4 小结 132
第三部分 架构思维意识
第9章 稳定为王 137
9.1 控制因素 137
9.1.1 安全 137
9.1.2 变更 141
9.2 保障方法 144
9.2.1 合理拒绝 145
9.2.2 厘清主次关系 145
9.2.3 容量量化 147
9.2.4 预先准备 148
9.2.5 注重监控 149
9.2.6 敬畏之心 150
9.3 应对异常 152
9.3.1 处理事故 152
9.3.2 管理预期 153
9.3.3 复盘总结 153
9.3.4 有效预防 153
9.3.5 谨慎变更 154
9.4 小结 155
第10章 完成比完美重要 156
10.1 先扛住再优化 156
10.1.1 快速抢占市场 157
10.1.2 实现先于性能 157
10.1.3 需求可能修改 158
10.1.4 验证用户行为 158
10.1.5 突发问题案例 158
10.2 最小可用,快速迭代 160
10.3 不要等待 160
10.4 接受不完美 161
10.4.1 分清主次 161
10.4.2 自动化降级 162
10.4.3 代价最低 162
10.5 及时偿还技术债务 163
10.5.1 定期重构 164
10.5.2 及时清理 165
10.5.3 对技术有追求 167
10.6 小结 167
第11章 聚沙成塔 168
11.1 小而简洁 168
11.2 扩展能力 172
11.3 小结 173
第12章 自动化思维 175
12.1 拒绝重复 175
12.1.1 时间成本 175
12.1.2 解决重复 176
12.2 工具系统化 178
12.3 小结 180
第13章 产品思维 181
13.1 体验业务 181
13.2 体验竞品 182
13.3 扬长避短 183
13.4 控制欲望 184
13.5 献计献策 185
13.6 反哺方案 185
13.7 小结 186
第四部分 善用工具
第14章 算法 189
14.1 树状数组 190
14.1.1 问题场景 190
14.1.2 排行榜实现及优化方案 191
14.1.3 树状数组实现排行榜 191
14.1.4 树状数组优化排行榜 195
14.2 多阶Hash算法 196
14.2.1 原理 196
14.2.2 优点 197
14.2.3 缺点 198
14.3 利用线性同余的一致性Hash算法 199
14.3.1 算法内容 199
14.3.2 适用场景 199
14.3.3 实现原理 200
14.4 随机数在互联网业务中的应用 203
14.4.1 随机数的生成方法 203
14.4.2 误用随机数的场景 205
14.4.3 项目中用到随机数的场景 207
14.5 小结 212
第15章 流程和文化 213
15.1 流程 213
15.1.1 需求阶段 214
15.1.2 开发阶段 215
15.1.3 测试阶段 217
15.1.4 发布阶段 219
15.1.5 运营阶段 220
15.1.6 管理机制 221
15.2 文化 222
15.3 小结 223
第五部分 案例剖析
第16章 架构案例剖析 226
16.1 小型案例—统计用户在线时长 226
16.1.1 需求描述 226
16.1.2 项目背景 227
16.1.3 需求分析 228
16.1.4 实现方案 228
16.1.5 案例总结 230
16.2 中型案例—抽奖活动 231
16.2.1 需求描述 231
16.2.2 需求分析 231
16.2.3 实现方案 232
16.2.4 整体架构设计 238
16.2.5 案例总结 240
16.3 大型案例—短网址服务 241
16.3.1 需求描述 241
16.3.2 需求分析 241
16.3.3 需求一:内部使用 243
16.3.4 需求二:大型互联网服务方案 246
16.4 小结 256