![亿级流量系统架构设计与实战](http://image12.bookschina.com/2024/20240516/1/9310095.jpg)
亿级流量系统架构设计与实战
![](http://o.bookschina.com/images/ling.png?id=01)
- ISBN:9787121476983
- 装帧:平塑勒
- 册数:暂无
- 重量:暂无
- 开本:其他
- 页数:432
- 出版时间:2024-05-01
- 条形码:9787121476983 ; 978-7-121-47698-3
本书特色
本书从全局的角度深度解析了互联网后台架构设计的观点和方法,融入了大量来自工业级互联网后台的实战案例。本书涵盖知识面广、深入浅出,对于渴望成为后台架构师的学习者甚至初学者来说,是一本值得深度研读的好书。本书不仅是我们学习架构知识时的优质资料,也是我们日常工作中的实用参考手册。 ——郑闫强◇小米科技高级技术总监 作者在本书中详细介绍了亿级流量系统架构设计的知识点,并给出了自己的独到观点。本书不但涵盖了系统架构设计基础知识,还涵盖了目前广大UGC平台的常见服务设计实践,既可以作为系统架构设计参考资料,也可以作为相关面试宝典。 ——李艳鹏◇互联网资深架构师,《分布式服务架构》和《可伸缩服务架构》作者 本书介绍了大型互联网公司的基础组件、高并发和高可用设计的通用思路,以及基于这些知识解决真实业务问题的案例。有经验的读者可以通过阅读本书对自己的知识进行查漏补缺,新手也可以通过阅读本书建立自己的知识体系。如果能够在阅读书中基础服务设计的案例之前,先想一想自己会如何设计,就能更深刻地理解这些设计的精巧之处。 ——王迪◇某社交产品资深架构师 本书介绍了互联网后台核心知识,涉及机房搭建、服务治理、高并发设计和一系列常见系统架构设计话题,涵盖了亿级用户应用后台的大部分要素。本书图文并茂、行文流畅,非常适合互联网后台开发工程师深度阅读。 ——秦磊◇某海外社交产品业务架构负责人 本书深入探讨了高并发系统设计,从大厂的视角解读技术栈选择、高并发处理等核心内容。无论是大厂的工程师,还是计划入行的学生,都能从中借鉴宝贵的实战经验。本书是我们提升高并发系统设计能力的理想读物。 ——郝萌◇哈尔滨工业大学讲师,CCF高性能专委会执行委员 这是一本架构师参考指南,凝聚了作者多年的工作经验,干货满满。如果你初出茅庐,正在找工作,或者刚刚走上后端工程师的工作岗位,则建议认真阅读本书,因为它能帮助你全面了解后端工程技术体系;如果你已经工作了几年,渴望进一步提高,则也建议阅读本书,因为你能从中学习作者对过往经验的梳理和结构化输出方法。 ——丛小亮◇字节跳动资深研发工程师
内容简介
本书讲解亿级流量系统架构的设计方法及实战经验,在内容结构上分为三大篇:架构知识篇(第1~3章),主要讲解海量用户应用后台的组成结构、高并发处理和服务可用性保障,首先讲解后台由哪些关键组件构成及机房搭建思路,然后讲解后台在应对高并发读请求和写请求时的通用处理手段,*后讲解通用的服务治理手段以保障后台高效运行。基础服务设计篇(第4~6章),主要讲解几个基础服务的架构设计,这里选取的基础服务几乎为所有互联网后台所需的专门系统,包括分布式专享ID生成器、用户登录服务和海量消息推送系统;核心服务设计篇(第7~13章),主要讲解常见社交互动场景中所需的核心服务的架构设计,包括内容发布系统、通用计数系统、排行榜服务、用户关系服务、Timeline Feed服务、评论服务和IM服务。
目录
第1章 大型互联网公司的基础架构 2
1.1 引言:单机房的内部架构 2
1.2 客户端连接机房的技术1:DNS 5
1.2.1 DNS的意义 5
1.2.2 域名结构 6
1.2.3 域名服务器 6
1.2.4 域名解析过程 7
1.3 客户端连接机房的技术2:HTTP DNS 9
1.3.1 DNS存在的问题 9
1.3.2 HTTP DNS的原理 10
1.3.3 HTTP DNS实践 11
1.4 接入层的技术演进 12
1.4.1 Nginx 13
1.4.2 LVS 19
1.4.3 LVS Nginx接入层的架构 25
1.5 服务发现 28
1.5.1 注册与发现 29
1.5.2 可用地址管理 30
1.5.3 地址变更推送 31
1.6 RPC服务 32
1.7 存储层技术:MySQL 35
1.7.1 关系型数据库 35
1.7.2 MySQL 37
1.7.3 高可用架构1:主从模式 37
1.7.4 高可用架构2:MHA 40
1.7.5 高可用架构3:MMM 41
1.7.6 高可用架构4:MGR 43
1.8 存储层技术:Redis 44
1.8.1 高可用架构1:主从模式 44
1.8.2 高可用架构2:哨兵模式 45
1.8.3 高可用架构3:集群模式 46
1.8.4 高可用架构4:中心化集群架构 50
1.9 存储层技术:LSM Tree 53
1.9.1 LSM Tree的原理 53
1.9.2 读/写数据流程 56
1.10 存储层技术:其他NoSQL数据库 57
1.11 消息中间件技术 61
1.11.1 通信模式与用途 62
1.11.2 Kafka 64
1.11.3 Kafka的高可用 67
1.12 多机房:主备机房 69
1.13 多机房:同城双活 71
1.13.1 存储层改造 71
1.13.2 灵活实施 73
1.13.3 分流与故障切流 74
1.13.4 两地三中心 77
1.14 多机房:异地多活 78
1.14.1 架构要点 78
1.14.2 MySQL DRC的原理 80
1.14.3 Redis DRC的原理 83
1.14.4 分流策略 84
1.14.5 数据复制链路 85
1.15 本章小结 86
第2章 通用的高并发架构设计 88
2.1 高并发架构设计的要点 88
2.1.1 形成高并发系统的必要条件 88
2.1.2 高并发系统的衡量指标 89
2.1.3 高并发场景分类 90
2.2 高并发读场景方案1:数据库读/写分离 91
2.2.1 读/写分离架构 91
2.2.2 读/写请求路由方式 91
2.2.3 主从延迟与解决方案 92
2.3 高并发读场景方案2:本地缓存 93
2.3.1 基本的缓存淘汰策略 93
2.3.2 W-TinyLFU策略 94
2.3.3 缓存击穿与SingleFlight 95
2.4 高并发读场景方案3:分布式缓存 100
2.4.1 分布式缓存选型 100
2.4.2 如何使用Redis缓存 101
2.4.3 缓存穿透 102
2.4.4 缓存雪崩 103
2.4.5 缓存更新 103
2.5 高并发读场景总结:CQRS 105
2.5.1 CQRS的简要架构与实现 106
2.5.2 更多的使用场景 107
2.5.3 CQRS架构的特点 108
2.6 高并发写场景方案1:数据分片之数据库分库分表 108
2.6.1 分库和分表 109
2.6.2 垂直拆分 109
2.6.3 水平拆分 111
2.6.4 水平拆分规则 113
2.6.5 扩容方案 117
2.6.6 其他数据分片形式 120
2.7 高并发写场景方案2:异步写与写聚合 120
2.7.1 异步写 121
2.7.2 写聚合 122
2.8 本章小结 122
第3章 通用的服务可用性治理手段 124
3.1 微服务架构与网络调用 124
3.2 重试 126
3.2.1 幂等接口 126
3.2.2 重试时机 130
3.2.3 重试风险与重试风暴 130
3.2.4 重试控制:不重试的请求 131
3.2.5 重试控制:重试请求比 132
3.3 熔断与隔离 132
3.3.1 服务雪崩 133
3.3.2 Hystrix熔断器 134
3.3.3 Resilience4j和Sentinel熔断器 136
3.3.4 共享资源与舱壁隔离 137
3.3.5 舱壁隔离的实现 138
3.4 限流 139
3.4.1 频控 140
3.4.2 单机限流1:时间窗口 141
3.4.3 单机限流2:漏桶算法 143
3.4.4 单机限流3:令牌桶算法 144
3.4.5 全局限流 146
3.5 自适应限流 148
3.5.1 服务与等待队列 149
3.5.2 基于请求排队时间 150
3.5.3 基于延迟比率 151
3.5.4 其他方案 152
3.6 降级策略 155
3.6.1 服务依赖度降级 155
3.6.2 读请求降级 158
3.6.3 写请求降级 159
3.7 本章小结 160
基础服务设计篇
第4章 唯一ID生成器 164
4.1 分布式唯一ID 164
4.1.1 全局唯一与UUID 164
4.1.2 唯一ID生成器的特点 165
4.1.3 单调递增与趋势递增 167
4.2 单调递增的唯一ID 168
4.2.1 Redis INCRBY命令 168
4.2.2 基于数据库的自增主键 171
4.2.3 高可用架构 172
4.3 趋势递增的唯一ID:基于时间戳 174
4.3.1 正确使用时间戳 174
4.3.2 Snowflake算法 175
4.3.3 Snowflake算法的灵活应用 175
4.3.4 分配服务实例ID 177
4.3.5 时钟回拨问题与解决方案 179
4.3.6 *终架构 179
4.4 趋势递增的唯一ID:基于数据库的自增主键 180
4.4.1 分库分表架构 181
4.4.2 批量缓存架构 182
4.5 美团点评开源方案:Leaf 183
4.5.1 Leaf-segment方案 183
4.5.2 Leaf-snowflake方案 185
4.6 本章小结 187
第5章 用户登录服务 189
5.1 用户账号 189
5.2 用户登录服务的功能要点 190
5.3 密码保护 192
5.3.1 使用HTTPS通信 192
5.3.2 非对称加密 193
5.3.3 密码加密存储 194
5.4 手机号登录和邮箱登录 194
5.4.1 数据表设计 195
5.4.2 用户注册 195
5.4.3 用户登录 196
5.4.4 手机号一键登录 197
5.5 第三方登录 199
5.5.1 OAuth 2标准 200
5.5.2 客户端接入第三方登录 201
5.5.3 服务端接入第三方登录 202
5.5.4 第三方登录的完整流程总结 203
5.6 登录态管理 204
5.6.1 存储型方案:Session 205
5.6.2 计算型方案:令牌 207
5.6.3 长短令牌方案 208
5.7 扫码登录 210
5.7.1 二维码 210
5.7.2 扫码登录的场景介绍 211
5.7.3 扫码登录的技术实现 211
5.8 本章小结 213
第6章 海量推送系统 215
6.1 分布式长连接服务的技术要素分析 216
6.1.1 WebSocket协议简介 216
6.1.2 长连接服务器 217
6.1.3 分布式推送服务器 218
6.1.4 路由算法 219
6.2 海量推送系统设计 220
6.2.1 整体架构设计 220
6.2.2 长连接的建立过程 221
6.2.3 消息格式设计 222
6.2.4 消息推送接口 223
6.2.5 单点消息推送的细节 224
6.2.6 全局消息推送的细节 225
6.2.7 多点消息推送的细节 226
6.2.8 pusher平滑升级的问题 227
6.2.9 pusher扩容的问题 236
6.3 本章小结 237
核心服务设计篇
第7章 内容发布系统 240
7.1 内容发布系统的设计背景 240
7.2 内容存储设计 241
7.2.1 内容数据的存储 241
7.2.2 内容元信息的存储 243
7.2.3 内容主体的存储选型 244
7.2.4 音视频转码 245
7.3 内容审核设计 246
7.3.1 内容审核的必要性 246
7.3.2 内容的审核时机策略 246
7.3.3 如何审核内容 247
7.3.4 审核中心的对外交互 249
7.4 内容的全生命周期管理设计 250
7.4.1 内容的创建设计 250
7.4.2 内容的修改设计 252
7.4.3 内容审核结果处理与版本控制设计 254
7.4.4 内容的删除与下架设计 256
7.5 内容分发设计 256
7.5.1 内容分发渠道 256
7.5.2 何时通知分发渠道 257
7.5.3 将内容投递到分发渠道 257
7.6 内容展示设计 258
7.6.1 内容数据的特点 259
7.6.2 使用CDN加速静态资源访问 259
7.6.3 使用缓存和多副本支撑高并发读取 260
7.6.4 内容展示流程设计 263
7.7 完整架构总览 265
7.8 本章小结 267
第8章 通用计数系统 268
8.1 计数的常见用途 268
8.2 如何存储计数数据 269
8.2.1 计数数据的特点 269
8.2.2 关系型数据库的困境 270
8.2.3 是否要使用关系型数据库 270
8.2.4 使用Redis存储计数数据 271
8.3 海量计数服务设计 272
8.3.1 Redis数据类型 272
8.3.2 计数累计与读取的示例 274
8.3.3 优化内存的调研 274
8.3.4 优化内存:定制化Redis 276
8.3.5 冷热数据分离 279
8.3.6 应对过热数据 280
8.3.7 计数服务架构图 281
8.3.8 计数服务的适用范围 282
8.4 本章小结 283
第9章 排行榜服务 284
9.1 排行榜的应用场景 284
9.2 排行榜技术的特点 285
9.3 使用Redis实现排行榜 285
9.3.1 使用Redis ZSET 286
9.3.2 幂等更新 287
9.3.3 同积分排名处理 289
9.3.4 服务设计 291
9.3.5 关于大Key的问题 295
9.4 粗估排行榜的实现 296
9.4.1 线段树 296
9.4.2 粗估排名的实现 299
9.5 精确排名与粗估排名结合 306
9.6 本章小结 309
第10章 用户关系服务 310
10.1 用户关系服务的职责 310
10.2 基于Redis ZSET的设计 311
10.3 基于数据库的设计 312
10.3.1 *初的想法 312
10.3.2 应对分库分表 313
10.3.3 Following表的索引设计 314
10.3.4 Follower表的索引设计 316
10.3.5 进阶:回表问题与优化 316
10.3.6 关注数和粉丝数 317
10.4 缓存查询 318
10.4.1 缓存什么数据 318
10.4.2 缓存的创建与更新策略 319
10.4.3 本地缓存 321
10.4.4 缓存与数据库结合的*终方案 321
10.5 基于图数据库的设计 323
10.5.1 实现用户关系 323
10.5.2 应用权衡 327
10.6 本章小结 328
第11章 Timeline Feed1
作者简介
李琛轩,高级技术专家,8年互联网后台开发经验,现任某全球社交产品后台技术负责人。从事互联网社交产品领域的研发工作与架构设计多年,从业以来负责过多个知名产品的后台开发工作,相继深耕于消息队列、服务发现系统、服务治理、分布式事务、高并发架构设计、全球多活等技术领域。
-
MySQL数据库案例教程
¥34.9¥49.8 -
计算机网络技术
¥23.1¥33.0 -
Java语言程序设计
¥57.0¥95.0 -
短视频编辑与制作
¥31.4¥43.0 -
Photoshop 2022平面设计实战教程(全彩微课版)
¥60.6¥79.8 -
Hadoop大数据技术项目化教程
¥48.2¥68.8 -
PS教程 迅速提升Photoshop核心技术的100个关键技能
¥83.3¥119.0 -
零基础C++从入门到精通
¥49.0¥89.0 -
AutoCAD 2014电力绘图
¥35.0¥50.0 -
用户增长方法论:找到产品长盛不衰的增长曲线
¥60.5¥89.0 -
浪潮之巅 第4版(2册)
¥76.5¥139.0 -
编译原理(第4版)/刘铭
¥31.5¥45.0 -
物联网应用路线图
¥16.4¥39.0 -
白话区块链
¥28.9¥59.0 -
Photoshop平面设计实用教程
¥27.9¥39.8 -
剪映:剪辑+调色+字幕+配音+特效从新手到高手
¥25.9¥49.8 -
运镜师:深入学习脚本设计与分镜拍摄(短视频实战版)
¥66.0¥88.0 -
零基础学C++(升级版)
¥64.4¥99.0 -
实战数据可视化Excel篇
¥29.9¥49.8 -
人工智能应用基础(第2版)
¥33.6¥46.0