新書推薦:
《
6S精益管理实战(精装版)
》
售價:NT$
458.0
《
异域回声——晚近海外汉学之文史互动研究
》
售價:NT$
500.0
《
世界文明中的作物迁徙:聚焦亚洲、中东和南美洲被忽视的本土农业文明
》
售價:NT$
454.0
《
无端欢喜
》
售價:NT$
347.0
《
股票大作手操盘术
》
售價:NT$
245.0
《
何以中国·何谓唐代:东欧亚帝国的兴亡与转型
》
售價:NT$
398.0
《
一间只属于自己的房间 女性主义先锋伍尔夫代表作 女性精神独立与经济独立的象征,做自己,比任何事都更重要
》
售價:NT$
203.0
《
泉舆日志 幻想世界宝石生物图鉴
》
售價:NT$
611.0
|
內容簡介: |
本书讲解亿级流量系统架构的设计方法及实战经验,在内容结构上分为三大篇:架构知识篇(第1~3章),主要讲解海量用户应用后台的组成结构、高并发处理和服务可用性保障,首先讲解后台由哪些关键组件构成及机房搭建思路,然后讲解后台在应对高并发读请求和写请求时的通用处理手段,最后讲解通用的服务治理手段以保障后台高效运行。基础服务设计篇(第4~6章),主要讲解几个基础服务的架构设计,这里选取的基础服务几乎为所有互联网后台所需的专门系统,包括分布式唯一ID生成器、用户登录服务和海量消息推送系统;核心服务设计篇(第7~13章),主要讲解常见社交互动场景中所需的核心服务的架构设计,包括内容发布系统、通用计数系统、排行榜服务、用户关系服务、Timeline Feed服务、评论服务和IM服务。
|
關於作者: |
李琛轩,高级技术专家,8年互联网后台开发经验,现任某全球社交产品后台技术负责人。从事互联网社交产品领域的研发工作与架构设计多年,从业以来负责过多个知名产品的后台开发工作,相继深耕于消息队列、服务发现系统、服务治理、分布式事务、高并发架构设计、全球多活等技术领域。
|
目錄:
|
架构知识篇 第1章 大型互联网公司的基础架构2 1.1 引言:单机房的内部架构2 1.2 客户端连接机房的技术1:DNS5 1.2.1 DNS的意义5 1.2.2 域名结构6 1.2.3 域名服务器6 1.2.4 域名解析过程7 1.3 客户端连接机房的技术2:HTTP DNS9 1.3.1 DNS存在的问题9 1.3.2 HTTP DNS的原理10 1.3.3 HTTP DNS实践11 1.4 接入层的技术演进12 1.4.1 Nginx13 1.4.2 LVS19 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 存储层技术:MySQL35 1.7.1 关系型数据库35 1.7.2 MySQL37 1.7.3 高可用架构1:主从模式37 1.7.4 高可用架构2:MHA40 1.7.5 高可用架构3:MMM41 1.7.6 高可用架构4:MGR43 1.8 存储层技术:Redis44 1.8.1 高可用架构1:主从模式44 1.8.2 高可用架构2:哨兵模式45 1.8.3 高可用架构3:集群模式46 1.8.4 高可用架构4:中心化集群架构50 1.9 存储层技术:LSM Tree53 1.9.1 LSM Tree的原理53 1.9.2 读/写数据流程56 1.10 存储层技术:其他NoSQL数据库57 1.11 消息中间件技术61 1.11.1 通信模式与用途62 1.11.2 Kafka64 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 缓存击穿与SingleFlight95 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 高并发读场景总结:CQRS105 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 分布式唯一ID164 4.1.1 全局唯一与UUID164 4.1.2 唯一ID生成器的特点165 4.1.3 单调递增与趋势递增167 4.2 单调递增的唯一ID168 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 分配服务实例ID177 4.3.5 时钟回拨问题与解决方案179 4.3.6 最终架构179 4.4 趋势递增的唯一ID:基于数据库的自增主键180 4.4.1 分库分表架构181 4.4.2 批量缓存架构182 4.5 美团点评开源方案:Leaf183 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 存储型方案:Session205 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 优化内存:定制化Redis276 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 ZSET286 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
|
|