新書推薦:
《
别纠结啦:不被情绪牵着走的通透生活指南(“当代一休”小池龙之介治愈新作!附赠精美书签!)
》
售價:NT$
295.0
《
第二人生:找到重新定义人生的智慧
》
售價:NT$
440.0
《
唐朝三百年
》
售價:NT$
490.0
《
反操纵心理学:夺回人生主导权 拒绝被操纵
》
售價:NT$
249.0
《
同工异曲:跨文化阅读的启示(修订版)(师承钱锺书先生,比较文学入门,体量小但内容丰,案例文笔皆精彩)
》
售價:NT$
199.0
《
牛津立法研究手册
》
售價:NT$
1630.0
《
制度为什么重要:政治科学中的新制度主义(人文社科悦读坊)
》
售價:NT$
290.0
《
梦醒子:一位华北乡居者的人生(1857—1942))(第2版)
》
售價:NT$
340.0
|
編輯推薦: |
高可用是分布式系统架构设计中必须考虑的因素之一,也是成为一名优秀的架构师必须具备的知识,系统的可用性在过去、现在和未来都是架构领域最重要的一个环节,在大型分布式系统中,一个小模块设计不合理,可用性差,都可能影响用户体验,给企业带来损失。
那么,影响高可用的因素有哪些?如何设计持续稳定的高可用架构?本书将从基础理论、解决方案、应用案例、代码实现等方面解答高可用架构设计的这些困惑。
|
內容簡介: |
本书从开发高可用系统需要具备的理论知识出发,逐步讲解应用的高可用、数据库高可用、缓存高可用、Nginx/LVS高可用、异地多活、全链路监控/告警、高可用与安全、高可用在秒杀系统中的应用等内容,书中同时提供了大量有价值的解决方案,可直接用于开发实践。 本书理论与实践并重,适合具有一定Java开发经验的人员,或者想从程序员进阶为架构师的开发人员阅读。
|
關於作者: |
黄文毅,架构师,从业8年,先后就职于上海美团、厦门美图和海西医药等公司,负责后端开发工作。出版包括《分布式微服务架构:原理与实践》、《Spring 5企业级开发实战》(与人合著)、《Spring MVC MyBatis快速开发与项目实战》等图书。
赵定益,曾职于多家上市公司及互联网独角兽企业并负责核心研发团队管理及平台总体架构设计,擅长互联网系统架构设计和分布式研发团队管理,多次从0到1到N主导完成医药交易、跨境电商、内容与知识付费、物联网相关领域产品应用架构设计、系统开发及线上运营。
|
目錄:
|
第1章 理解高可用 1
1.1 什么是可用性 1
1.1.1 SLA与可用性 1
1.1.2 影响高可用的因素 3
1.1.3 高可用策略 4
1.1.4 高可用和高可靠 7
1.2 FMEA理论 7
1.3 集群与分布式 9
1.3.1 什么是集群与分布式 9
1.3.2 分布式架构 11
1.4 高可用之CAP理论 13
1.4.1 CAP理论 13
1.4.2 ACID理论 15
1.4.3 两阶段提交 16
1.4.4 补偿事务TCC 17
1.4.5 BASE理论 19
1.5 高可用之选举算法 21
1.5.1 霸道选举算法 21
1.5.2 Raft选举算法 24
1.5.3 ZAB选举算法 26
1.6 高可用之共识算法 29
1.6.1 Paxos算法 29
1.6.2 Multi-Paxos算法 32
1.6.3 Raft算法 33
1.7 高可用之一致性算法 34
1.7.1 一致性分类 34
1.7.2 Gossip协议(最终一致性) 34
1.7.3 Quorum NWR算法 37
1.7.4 Quorum NWR的应用 38
1.7.5 Raft日志一致性 40
第2章 应用的高可用 43
2.1 软件质量对高可用的影响 43
2.1.1 影响写出高质量代码的原因 43
2.1.2 代码重构 46
2.1.3 代码审查概述 47
2.1.4 人工代码审查 48
2.1.5 代码自动检查 52
2.2 优雅关闭 53
2.2.1 Java优雅关闭 55
2.2.2 Spring Boot微服务优雅关闭 58
2.3 优雅启动 60
2.3.1 预热启动 60
2.3.2 延时注册 61
2.4 服务状态 62
2.4.1 无状态服务 62
2.4.2 有状态服务 63
2.4.3 实现无状态 63
2.5 重试 64
2.5.1 重试概述 64
2.5.2 重试风险 64
2.5.3 退避策略 65
2.5.4 重试熔断策略 65
2.5.5 链路重试熔断 66
2.5.6 重试超时 67
2.6 幂等 68
2.6.1 非幂等原因 68
2.6.2 幂等定义 68
2.6.3 幂等场景 69
2.6.4 幂等解决方案 70
2.7 健康检查 74
2.7.1 Spring Boot Actuator健康检查 75
2.7.2 Nacos健康检查 84
2.8 流量削峰 96
2.8.1 为何要削峰 96
2.8.2 答题/验证码 97
2.8.3 分时分段 97
2.8.4 禁用“秒杀”按钮 98
2.8.5 分层过滤 98
2.8.6 消息队列 99
2.9 负载均衡 100
2.9.1 负载均衡算法 100
2.9.2 负载均衡的实现 105
2.10 限流 108
2.10.1 限流概述 108
2.10.2 限流算法 109
2.10.3 Sentinel中的匀速排队限流策略 113
2.11 降级 121
2.11.1 服务降级概述 121
2.11.2 服务降级开关 121
2.11.3 自动降级 122
2.11.4 读服务降级 123
2.11.5 写服务降级 123
2.12 熔断 124
2.12.1 熔断概述 124
2.12.2 熔断实现 125
2.12.3 案例:Hystrix的工作流程 126
2.13 故障检测 130
2.13.1 固定心跳 130
2.13.2 心跳设计 131
2.13.3 TCP Keepalive 132
2.13.4 MQTT Keepalive 133
2.14 故障隔离 133
2.14.1 故障隔离概述 133
2.14.2 故障隔离策略 134
2.15 集群容错 136
2.15.1 失败转移 136
2.15.2 失败自动恢复 137
2.15.3 失败安全策略 137
2.15.4 快速失败 138
2.16 集群部署 139
2.16.1 停机部署 139
2.16.2 蓝绿部署 139
2.16.3 滚动发布 141
2.16.4 灰度发布/金丝雀部署 143
2.16.5 无损发布 146
第3章 数据库高可用 148
3.1 数据库高可用概述 148
3.1.1 数据库高可用的重要性 148
3.1.2 MySQL XA协议 149
3.2 双节点 154
3.2.1 主从模式实现读写分离 154
3.2.2 读写分离实现方案 156
3.2.3 SQL语句执行过程 158
3.2.4 MySQL日志模块 160
3.2.5 主从数据同步 162
3.3 MySQL高可用架构 165
3.3.1 MySQL高可用架构MMM 165
3.3.2 基于MHA实现MySQL自动故障转移 166
3.3.3 MySQL Cluster架构 167
3.3.4 MySQL DRDB Heartbeat架构 169
3.3.5 云数据库高可用架构 170
3.4 案例:MySQL一主多从数据同步 172
第4章 缓存高可用 177
4.1 缓存概述 177
4.2 缓存高可用概述 178
4.3 客户端分区方案 178
4.4 中间代理层方案 179
4.4.1 中间代理层概述 179
4.4.2 Codis架构 179
4.5 服务端方案 181
4.5.1 主从模式 181
4.5.2 哨兵模式 183
4.5.3 Redis集群模式 188
4.5.4 Codis 和 Redis集群的区别 193
4.5.5 云数据库Redis 194
第5章 Nginx/LVS高可用 197
5.1 Nginx 197
5.1.1 Nginx概述 197
5.1.2 Nginx Keepalived保障高可用 197
5.2 LVS 198
5.2.1 LVS概述 198
5.2.2 Nginx Keepalived LVS保障高可用、高性能 199
5.3 DNS 200
5.3.1 DNS概述 200
5.3.2 DNS解析过程 201
5.3.3 DNS负载均衡 202
5.3.4 DNS LVS Nginx Keepalived 202
第6章 异地多活 204
6.1 异地多活概述 204
6.2 异地多活的类型 205
第7章 高可用之全链路监控、告警 208
7.1 监控/告警概述 208
7.1.1 监控/告警的意义 208
7.1.2 全链路监控 209
7.1.3 告警规则 210
7.1.4 发送告警 210
7.1.5 监控系统通用设计 210
7.1.6 监控体系案例 211
7.2 日志监控/告警方案 212
7.2.1 ELK日志系统 212
7.2.2 日志告警 215
7.3 资源监控/告警方案 216
7.3.1 监控概述 216
7.3.2 Promethous Grafana InfluxDB 217
7.3.3 其他开源监控 221
7.3.4 AlertManager告警 223
7.4 链路追踪监控 223
第8章 高可用与安全 226
8.1 高可用与安全概述 226
8.2 DoS/DDos攻击 227
8.2.1 DoS攻击概述 227
8.2.2 DDoS攻击的类型 227
8.2.3 DoS/DDoS攻击防护 229
8.3 安全产品/工具 230
8.3.1 WAF概述 230
8.3.2 WAF的工作模式 231
8.3.3 Nginx ModSecurity 233
8.3.4 云厂商安全产品 235
第9章 秒杀系统案例 236
9.1 什么是秒杀 236
9.2 最简单的秒杀系统 237
9.3 业务层面控制 238
9.4 CDN静态资源缓存 239
9.5 LVS/Nginx高可用设计 240
9.6 服务拆分与隔离设计 241
9.7 流量削峰、限流和降级 243
9.8 热点数据处理 246
9.9 核心的减库存 248
9.10 容灾 254
9.11 秒杀系统安全架构 255
参考文献 258
|
內容試閱:
|
高可用(High Availability,HA)是分布式系统架构设计中必须考虑的因素之一,也是成为一名优秀的架构师必须具备的知识,系统的可用性在过去、现在和未来都是架构领域最重要的一个环节,在大型分布式系统中,一个小模块设计不好、可用性差都可能影响用户体验,给企业带来损失。因此,掌握高可用相关技能和理论知识对于个人和企业都有莫大的好处。
本书从开发高可用系统需要具备的理论知识出发,逐步讲解应用的高可用、数据库高可用、缓存高可用、Nginx/LVS高可用、异地多活、全链路监控/告警、高可用与安全以及高可用在秒杀系统中的应用等内容。
本书理论与实践相结合,融入笔者近十年开发经验,其中提供了大量解决方案和代码实现,尤其对于有一定Java开发经验,想进一步提升开发技能,甚至进阶到架构师的程序员有较大帮助。
本书结构
本书共9章,以下是各章的内容概要:
第1章主要介绍SLA与可用性、FMEA理论、集群与分布式以及学习高可用需要具备的理论知识,例如CAP理论、选举算法、共识算法及一致性算法等。
第2章主要介绍影响软件质量的因素、应用的优雅关闭与启动、无状态服务、重试、幂等、健康检查、流量削峰、负载均衡、限流、熔断、降级、故障检测、故障隔离、集群容错以及集群部署等内容。
第3章主要介绍数据库高可用,包括数据库高可用概述、双节点MySQL高可用架构(MMM、基于MHA实现MySQL自动故障转移、MySQL Cluster架构、MySQL DRDB Heartbeat架构、云数据库高可用架构)、MySQL一主多从数据同步案例等内容。
第4章主要介绍缓存高可用,包括客户端分区方案、中间代理层方案、服务端方案(主从模式、哨兵模式、Redis集群模式、Codis和Redis集群的区别以及云数据库Redis等内容)。
第5章主要介绍Nginx/LVS高可用,包括Nginx概述、Nginx Keepalived保障高可用、LVS概述、Nginx Keepalived LVS保障高可用/高性能、DNS概述、DNS解析过程、DNS负载均衡、DNS LVS Nginx Keepalived等内容。
第6章主要介绍异地多活概述、异地多活类型(同城异地多活、跨城异地多活、跨国异地多活3种类型)。
第7章主要介绍监控,告警概述、日志监控/告警方案、资源监控/告警方案、链路追踪监控等内容。
第8章主要介绍高可用与安全、DoS攻击类型与防护以及相关安全产品/工具。
第9章主要讲解什么是秒杀、最简单的秒杀系统、秒杀系统业务层面控制、CDN静态资源缓存、LVS/Nginx高可用设计、服务拆分/隔离设计、流量削峰/限流/降级、热点数据处理、减库存、容灾以及秒杀系统安全架构。
本书使用的软件版本
本书项目实战开发环境如下:
? 操作系统macOS。
? 开发工具IntelliJ IDEA 2021.1。
? JDK使用1.8版本。
? 其他主流技术使用新版本。
读者对象
? 有一定Java开发基础的大学生、程序员。
? 想从程序员进阶为架构师的开发人员。
? 对高可用感兴趣的开发人员。
致 谢
感谢笔者的家人,感谢他们对笔者工作的理解和支持、对笔者生活无微不至的照顾,使笔者没有后顾之忧,可以全身心投入本书的写作中。
感谢笔者的工作单位厦门海西医药交易中心,公司为笔者提供了宝贵的工作、学习和实践的环境,书中很多的知识点和实战经验都来源于所在工作单位,也感谢与我一起工作的同事,非常荣幸能与他们一起在这个富有激情的团队中共同奋斗。
最后,感谢清华大学出版社以及本书的编辑老师,本书能够顺利出版离不开他们及背后的团队对本书的辛勤付出。
由于水平所限,书中难免存在疏漏之处,欢迎读者批评指正。若有意见和建议,可以发送电子邮件至booksaga@126.com。
黄文毅
2022年02月05日
|
|