《深入分布式缓存 从原理到实践》PDF下载

  • 购买积分:13 如何计算积分?
  • 作  者:于君泽,曹洪伟,邱硕等著
  • 出 版 社:北京:机械工业出版社
  • 出版年份:2017
  • ISBN:9787111585190
  • 页数:397 页
图书介绍:书内容在逻辑上共分为三个部分,按照从理论到实现,再到实践的思路撰写。首先介绍分布式缓存的背景知识,对本书“分布式”和“缓存”这两个关键词进行了全面的综述,作为后续章节叙述的基础;第二部分介绍业界主流的缓存,关注其原理与实现,囊括了Ehcache、Memcached、Redis、tair、EVCache、Aerospike等六个缓存或类缓存系统;最后一部分讨论缓存在互联网系统中的实践,从广告、社交、新闻、电商、营销等五类典型的互联网应用入手,分析它们面临的性能稳定性问题以及如何利用分布式缓存解决这些问题。

第1章 缓存为王 1

1.1 什么是缓存? 1

1.2 为什么使用缓存? 2

1.2.1 从用户体验说起 3

1.2.2 关于系统的性能 3

1.3 从网站的架构发展看缓存 4

1.4 客户端缓存 5

1.4.1 页面缓存 6

1.4.2 浏览器缓存 7

1.4.3 APP上的缓存 8

1.5 网络中的缓存 11

1.5.1 Web代理缓存 11

1.5.2 边缘缓存 12

1.6 服务端缓存 14

1.6.1 数据库缓存 14

1.6.2 平台级缓存 16

1.6.3 应用级缓存 18

第2章 分布式系统理论 24

2.1 分布式系统概论 24

2.2 分布式系统概念 26

2.2.1 进程与线程 26

2.2.2 并发 26

2.2.3 锁 26

2.2.4 并行 27

2.2.5 集群 27

2.2.6 状态特性 28

2.2.7 系统重发与幂等性 28

2.2.8 硬件异常 30

2.3 分布式系统理论 31

2.3.1 CAP理论 32

2.3.2 CAP理论澄清 34

2.3.3 Paxos 35

2.3.4 2PC 38

2.3.5 3PC 39

2.3.6 Raft 40

2.3.7 Lease机制 41

2.3.8 解决“脑裂”问题 43

2.3.9 Quorum NWR 44

2.3.10 MVCC 45

2.3.11 Gossip 46

2.4 分布式系统设计策略 49

2.4.1 心跳检测 50

2.4.2 高可用设计 50

2.4.3 容错性 52

2.4.4 负载均衡 53

2.5 分布式系统设计实践 54

2.5.1 全局ID生成 54

2.5.2 哈希取模 56

2.5.3 一致性哈希 57

2.5.4 路由表 58

2.5.5 数据拆分 58

第3章 动手写缓存 60

3.1 缓存定义的规范 60

3.1.1 新规范的主要内容及特性 60

3.1.2 新规范的API介绍 61

3.2 缓存框架的实现 62

3.2.1 前期准备 63

3.2.2 缓存的架构介绍 63

3.2.3 设计思路以及知识点详解 64

3.3 缓存框架的使用示例 74

第4章 Ehcache与Guava Cache 76

4.1 Ehcache的主要特性 76

4.2 Ehcache使用介绍 77

4.2.1 Ehcache架构图 77

4.2.2 缓存数据过期策略 78

4.2.3 Ehcache缓存的基本用法 81

4.2.4 在Spring中使用Ehcache 83

4.3 Ehcache集群介绍 85

4.3.1 集群的方式 86

4.3.2 如何配置集群 88

4.4 Ehcache的适用场景 89

4.5 Guava Cache的使用 92

4.5.1 Guava Cache的适用场景 92

4.5.2 Guava Cache的创建方式 93

4.5.3 缓存数据删除 95

4.5.4 并发场景下的使用 95

4.6 本章小结 96

第5章 从Memcached开始了解集中式缓存 97

5.1 Memcached基本知识 98

5.1.1 Memcached的操作命令 98

5.1.2 Memcached使用场景 100

5.1.3 Memcached特征 100

5.1.4 Memcached的一些问题 101

5.2 Memcached内存存储 102

5.2.1 Slab Allocation机制 102

5.2.2 使用Growth Factor进行调优 104

5.2.3 Item 105

5.3 典型问题解析 106

5.3.1 过期机制 106

5.3.2 哈希算法 107

5.3.3 热点问题 108

5.3.4 缓存与数据库的更新问题 108

5.3.5 别把缓存当存储 109

5.3.6 命名空间 110

5.3.7 CAS 110

5.4 Memcached客户端分析 110

5.4.1 Memcached的Client 111

5.4.2 Spymemcached设计思想解析 111

5.5 Memcached周边工具发展 117

第6章 Memcached周边技术 119

6.1 Twemcache 119

6.1.1 Twemcache的设计原理 120

6.1.2 Twemcache的安装及命令行详解 122

6.1.3 基于Java的Twemcache用法 125

6.2 Twemproxy 126

6.2.1 Twemproxy的常用部署模式 127

6.2.2 Twemproxy的可扩展性 129

6.2.3 Twemproxy源代码简析 131

6.3 Mcrouter 137

6.3.1 Mcrouter路由算法 138

6.3.2 典型的使用场景 139

6.3.3 Mcrouter的可扩展性 142

6.3.4 源码简要解析 144

第7章 Redis探秘 148

7.1 数据结构 148

7.1.1 value对象的通用结构 149

7.1.2 String 149

7.1.3 List 152

7.1.4 Map 155

7.1.5 Set 157

7.1.6 Sorted-Set 159

7.2 客户端与服务器的交互 160

7.2.1 客户端/服务器协议 161

7.2.2 请求/响应模式 163

7.2.3 事务模式 164

7.2.4 脚本模式 168

7.2.5 发布/订阅模式 169

7.3 单机处理逻辑 171

7.3.1 多路复用 171

7.3.2 定时任务处理 173

7.4 持久化 174

7.4.1 基于全量模式的持久化 174

7.4.2 基于增量模式的持久化 176

7.4.3 基于增量模式持久化的优化 178

第8章 分布式Redis 180

8.1 水平拆分(sharding) 181

8.1.1 数据分布 181

8.1.2 请求路由 182

8.2 主备复制(replication) 182

8.2.1 主备复制流程 183

8.2.2 断点续传 183

8.3 故障转移(failover) 184

8.3.1 sentinel间的相互感知 185

8.3.2 master的故障发现 186

8.3.3 failover决策 186

8.4 Redis Cluster 187

8.4.1 拓扑结构 187

8.4.2 配置的一致性 188

8.4.3 sharding 190

8.4.4 failover 193

8.4.5 可用性和性能 196

第9章 Tair探秘 198

9.1 Tair总体架构 198

9.2 Config Server简介 199

9.3 Data Server简介 201

9.4 Tair高可用和负载均衡 204

9.4.1 对照表 204

9.4.2 数据迁移 219

9.5 存储引擎 220

9.6 Tair的API 222

9.6.1 key/value相关API 223

9.6.2 prefix相关的API 226

第10章 EVCache探秘 229

10.1 EVCache项目介绍 230

10.1.1 EVCache的由来 231

10.1.2 EVCache的发展 232

10.1.3 EVCache的演进 234

10.2 EVCache的使用场景 238

10.2.1 典型用例 238

10.2.2 典型部署 239

10.3 EVCache的性能 240

10.3.1 EVCache集群的性能 240

10.3.2 全局化复制时的性能问题 242

10.3.3 Moneta项目中的组件性能 243

10.4 EVCache的高可用性 244

10.4.1 AWS的多可用区 244

10.4.2 EVCache对AWS高可用性的增强 245

10.5 源码与示例 245

10.5.1 源码浅析 245

10.5.2 EVCache示例 253

第11章 Aerospike原理及广告业务应用 259

11.1 Aerospike架构 259

11.2 Aerospike具体实现 261

11.2.1 Aerospike集群管理 261

11.2.2 数据分布 263

11.3 Aerospike集群配置和部署 265

11.3.1 搭建集群的方式与配置 266

11.3.2 部署集群 267

11.4 Aerospike与Redis的对比 271

11.5 Aeropsike在广告行业的具体应用 272

11.5.1 Aerospike在个性化推荐广告中的应用 273

11.5.2 Aerospike在实时竞价广告中的应用 274

第12章 社交场景架构进化:从数据库到缓存 283

12.1 社交业务示例 283

12.1.1 业务模型 283

12.1.2 业务场景 284

12.1.3 业务特点 285

12.2 关系(relation)的存储 286

12.2.1 基于DB的最简方案 286

12.2.2 DB的sharding方案 288

12.2.3 引入缓存 290

12.2.4 缓存的优化方案 292

12.3 帖子(post)的存储 293

12.3.1 基于DB的方案 294

12.3.2 引入服务端缓存 296

12.3.3 本地缓存 297

12.4 时间线(timeline)的存储 297

12.4.1 基于DB的方案——push模式 298

12.4.2 基于DB的方案——pull模式 300

12.4.3 增量查询引入服务端缓存 302

第13章 缓存在社交网络Feed系统中的架构实践 304

13.1 Feed系统架构 304

13.2 Feed缓存模型 307

13.3 Feed缓存架构的设计 309

13.3.1 简单数据类型的缓存设计 310

13.3.2 集合类数据的缓存设计 312

13.3.3 其他类型数据的缓存设计 314

13.4 Feed缓存的扩展 315

13.4.1 Redis的扩展 315

13.4.2 计数器的扩展 316

13.4.3 存在性判断的扩展 318

13.5 Feed缓存的服务化 319

第14章 典型电商应用与缓存 324

14.1 电商类应用的挑战及特点 324

14.2 应用数据静态化架构高性能单页Web应用 325

14.2.1 整体架构 326

14.2.2 CMS系统 326

14.2.3 前端展示系统 328

14.2.4 控制系统 328

14.3 应用多级缓存模式支撑海量读服务 329

14.3.1 多级缓存介绍 329

14.3.2 如何缓存数据 331

14.3.3 分布式缓存与应用负载均衡 332

14.3.4 热点数据与更新缓存 334

14.3.5 更新缓存与原子性 336

14.3.6 缓存崩溃与快速修复 336

14.4 构建需求响应式亿级商品详情页 337

14.4.1 商品详情页前端结构 338

14.4.2 单品页技术架构发展 338

14.4.3 详情页架构设计原则 343

14.4.4 遇到的一些问题 349

第15章 同程凤凰缓存系统基于Redis的设计与实践 357

15.1 同程凤凰缓存系统要解决什么问题 357

15.1.1 Redis用法的凌乱 358

15.1.2 从实际案例再看Redis的使用 360

15.1.3 如何改变Redis用不好的误区 362

15.1.4 凤凰缓存系统对Redis系统化改造 364

15.2 用好Redis先运维好它 366

15.2.1 传统的Redis运维方式 366

15.2.2 Redis的Docker化部署 368

15.2.3 凤凰缓存系统对Redis的监控 369

15.2.4 凤凰缓存系统对Redis的集群分片优化 370

15.2.5 客户端在运维中的作用 371

15.2.6 凤凰缓存系统在Redis运维上的工具 372

15.3 凤凰缓存系统的使用效果 373

第16章 新的旅程 374

16.1 更好的引入缓存技术 374

16.1.1 缓存引入前的考量 374

16.1.2 缓存组件的选择 375

16.1.3 缓存架构的设计 376

16.1.4 缓存系统的监控及演进 377

16.2 缓存分类总结 377

16.3 缓存知识结构更多Tips 378

16.3.1 缓存使用模式 379

16.3.2 缓存协议 379

16.3.3 缓存连接池 380

16.3.4 几个关注点 383

16.3.5 管理缓存 387

16.3.6 缓存可用性 390

16.3.7 数据一致性 392

16.3.8 热点数据处理 393

16.3.9 注意事项Tips 396