来自蚂蚁金服、京东、网联、新浪微博、同程旅游等公司的10余位一线架构师用心之作;
阿里研究员蒋江伟、易宝支付CTO陈斌、普元信息CTO焦烈焱、特赞科技CTO黄勇、 微博研发副总经理杨卫华等专家联袂推荐
深度解构Ehcache、Memcached、Redis、tair、EVCache、Aerospike等6大缓存系统的技术原理,及其在电商、社交、广告等典型场景中的应用
这是国内首本从大型互联网系统的应用角度探讨分布式缓存的书籍,包含了原理、框架、架构、案例等多方面的视角。
互联网系统随着容量需求的陡增,许多看似简单的存储类场景都面临着巨大的容量和稳定性风险,而其中的大部分都可以通过对缓存的合理使用来规避。读者从对本书的阅读当中,将会获得应对这些问题的经验,也会对分布式缓存有一个体系化的认识。
本书内容共分为三个部分,按照从理论到实现,再到实践的思路撰写。
首先介绍分布式缓存的背景知识,对本书“分布式”和“缓存”这两个关键词进行了全面的综述,作为后续章节叙述的基础;
第二部分介绍业界主流的缓存,关注其原理与实现,囊括了Ehcache、Memcached、Redis、tair、EVCache、Aerospike等六个缓存或类缓存系统;
最后一部分讨论缓存在互联网系统中的实践,从广告、社交、新闻、电商、营销等五类典型的互联网应用入手,分析它们面临的性能稳定性问题以及如何利用分布式缓存解决这些问题
于君泽:蚂蚁金服高级技术专家、花名右军,IT从业超过十五年。对高并发、分布式架构、内建质量、研发管理有一些心得。维护公众号“技术琐话”。
程超:“爱农驿站”首席支付技术专家。InfoQ、中生代技术社区签约作者,CSDN博主专家,Spring for all社区贡献者,擅长微服务和分布式架构。
邱硕:蚂蚁金服技术专家,花名牧丘,在阿里和支付宝从事中间件、应用系统的性能/稳定性技术风险相关工作。Cobar主要作者。
曹洪伟:70后老码农,全栈工匠一枚,服务过多家世界500强,后连续创业,现任渡鸦科技CTO,致力于人工智能硬件,维护有“wireless_com ”公众号 和博客
刘璟宇:拍拍贷资深架构师,十余年互联网行业从业经验,主要研究云计算、服务化基础框架以及各种基础组件。
张开涛:京东架构师,畅销书《亿级流量网站架构核心技术》作者,维护有“开涛的博客”公众号。
何涛:网联高级架构师,对高流量下的架构设计有丰富的实践经验,热衷于高可用、高并发和高性能的架构研究。
宋慧庆:勤诚互动研发总监兼高级架构师,十年互联网广告行业经验,主要研究高可用架构技术,为流量变现提供更好的服务。
陈波:新浪微博技术专家,负责平台基础架构及优化,经历了微博从起步到成为数亿用户的大型互联网系统的演进过程。
王晓波:同程旅游首席架构师,10余年互联网行业从业经验,负责中间件、微服务、分布式架构、运维、安全等方面工作。
缓存是一项与高性能相关的技术,同时也是系统架构中非常核心的部分,一个系统缓存承担着90%以上的热点流量,缓存只要出现一点问题,系统的可用性会马上受到影响。 本书系统地介绍了缓存的原理、作用和价值,理解缓存的使用对架构一个高性能的分布式系统有很大的帮助。
——小邪(蒋江伟) 阿里研究员
通过分布式、微服务架构,实现业务的云化/数字化,并建立起应用生态,是一个复杂的体系结构,相关的著作很多,但专注在缓存方面的还没有。右军选择了这个方向,就是希望能帮助我们构建一个完整的技术视图,我相信这是他们的初衷。
——焦烈焱 普元信息CTO
这本书深入浅出地讨论了ehcache、memcached、redis、tair、 EVCache 等各种常用缓存开源系统的方案及精粹。我读过不少国外有关缓存的技术专著,多数偏原则和理论,具体实施方案和案例较少,结合中国互联网技术的实践就更少。君泽组织的这本书填补了空白。
—— 陈斌 易宝支付CTO
使用缓存是软件性能优化的大杀器,分布式缓存是网站架构的必杀技。遗憾的是目前并没有专门讲述分布式缓存的书籍,幸运的是现在终于有一本这方面的专著,作者都是在网站架构一线的资深专家,值得信赖,推荐给大家。
——李智慧 《大型网站技术架构:核心原理与案例分析》作者
本书围绕分布式缓存的基础概念、开源框架、应用案例三方面进行讲解,从理论到实战,循序渐进,深入浅出。看完部分章节后,意犹未尽,欲罢不能。国内这样真实应用案例的好书太少了,君泽以及他的朋友们填补了这一空白,十分期待这本书能早日上市。
——黄勇 特赞科技 CTO/《架构探险》作者
缓存是互联网架构的*关键的环节,陈波在缓存的性能及高可用方面有丰富的经验,很高兴看到他通过本书分享了他在微博研发团队多年的实践精华。
——杨卫华 微博研发副总经理
互联网高性能系统设计的核心关键之一就是缓存系统的设计,本书集合缓存理论、开源缓存系统、大规模业务中缓存的具体实践,全方位解读了分布式缓存设计,既能够帮助读者深入理解分布式缓存系统,又提供了很好的架构设计案例供参考,细细品读,受益良多!
——李运华 阿里游戏资深技术专家 《面向对象葵花宝典》作者
赞誉
推荐序1
推荐序2
推荐序3
作者寄语
前言
第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 Paxos35
2.3.4 2PC38
2.3.5 3PC39
2.3.6 Raft40
2.3.7 Lease机制41
2.3.8 解决“脑裂”问题43
2.3.9 Quorum NWR44
2.3.10 MVCC45
2.3.11 Gossip46
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 Cache76
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中使用Ehcache83
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 Item105
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 CAS110
5.4 Memcached客户端分析110
5.4.1 Memcached的Client111
5.4.2 Spymemcached设计思想解析111
5.5 Memcached周边工具发展117
第6章 Memcached 周边技术119
6.1 Twemcache119
6.1.1 Twemcache 的设计原理120
6.1.2 Twemcache的安装及命令行详解122
6.1.3 基于Java的Twemcache用法125
6.2 Twemproxy126
6.2.1 Twemproxy的常用部署模式127
6.2.2 Twemproxy的可扩展性129
6.2.3 Twemproxy源代码简析131
6.3 Mcrouter137
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 String149
7.1.3 List152
7.1.4 Map155
7.1.5 Set157
7.1.6 Sorted-Set159
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章 分布式Redis180
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 Cluster187
8.4.1 拓扑结构187
8.4.2 配置的一致性188
8.4.3 sharding190
8.4.4 failover193
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的API222
9.6.1 key/value相关API223
9.6.2 prefix相关的API226
第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 缓存知识结构更多Tips378
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 注意事项Tips396
Praise 赞 誉
本书围绕分布式缓存的基础概念、开源框架、应用案例三方面进行讲解,从理论到实战,循序渐进,深入浅出。看完部分章节后,意犹未尽,欲罢不能。国内基于真实应用案例的好书太少了,君泽以及他的朋友们做到了这一点,十分期待这本书能早日上市。
—黄勇 特赞科技CTO、《架构探险》作者
分布式缓存,是任何一个互联网公司在成长过程中都会面临的技术难题。本书作者结合理论研究和长期的互联网行业从业经验,深入浅出地介绍了分布式系统理论和分布式缓存实战,给业界以借鉴和启发。本书是作者们的用心之作。
—朱攀 德比软件架构师
缓存是软件性能优化的大杀器,分布式缓存是网站架构的必杀技,玩转缓存就玩转了网站架构的半边天。遗憾的是,目前市面上专门讲述分布式缓存的书籍不多,幸运的是本书就是一本这方面的专著。本书所有作者都是多年工作在网站架构一线的老司机,值得信赖,故将本书推荐给大家。
—李智慧 《大型网站技术架构:核心原理与案例分析》作者
从十几年前的Ehcache到最近几年流行的Redis,从CDN、浏览器、API Gateway到后端微服务,以及数据访问层的二级缓存,缓存无处不在。在体验为王、唯快不破的时代,分布式缓存是关键。本书从理论到实践,详细剖析了分布式缓存的实现原理以及应用案例,是一本接地气的好书。
—李林锋 华为PaaS平台架构师、公司总裁技术创新奖获得者
随着现代应用对速度的要求越来越高,对缓存机制的使用也越来越常见、越来越频繁。本书以缓存机制的基本原理为开始,逐渐过渡至缓存系统的组建以及使用上面,全书分析和讲解了多个缓存系统,并列举了缓存的各种使用场景。如果你正准备构建自己的缓存系统,又或者你想进一步学习更多与缓存有关的知识,那么这本书将是你不容错过的一本书。
—黄健宏 《Redis设计与实现》作者
在计算机的世界里,不论硬件层面还是软件层面,缓存都被广泛应用于解决处理响应慢的瓶颈。我们在构建微服务架构系统的时候也一样,缓存是提升性能的关键技术手段。然而,缓存在不同场景下的应用各有不同,要想用对缓存、用好缓存并不容易。本书针对不同的缓存类型、实现手段、算法策略做了非常细致的讲解,所以我推荐开发者和架构师们通过本书来对缓存做一次全面的学习,这有助于更好地使用缓存来优化我们的系统性能。
—翟永超 《Spring Cloud微服务实战》作者
不同的存储介质,读写性能有很大的差异,价格亦是如此,性能越好的介质,价格就越高。把最常访问的数据放在读写性能最好的设备上,达到成本和性能的均衡,这便诞生了缓存。本书的几位作者都是大型分布式环境下历练出来的沙场老将,丰富的经验和翔实的案例,对于互联网行业的技术人员来说,颇有裨益。
—陈康贤 《大型分布式网站架构设计与实践》 作者、阿里巴巴技术专家
如今的软件系统,已经成为分布式系统的天下。分布式的语境对系统的设计与开发提出了完全不一样的挑战,作为提升性能的关键要素—缓存,自然也不例外。在缓存的命中、更新与失效,以及数据一致性保障等诸多方面,分布式缓存应用的复杂度可能是按指数级增加的,许多问题都是我们在单机应用上无法涉猎的。倘若没有分布式系统设计的实战经验,面对分布式缓存的诸多问题,我们将束手无策。求助于网络?讲解缓存知识的文章是片鳞半爪,未成体系,故而无法窥其全部。本书的几位作者都经历过大型软件系统的深度洗礼,书中内容都来自他们的一线实战。阅读本书,读者就能站在他们的肩膀上看得更远,实在是幸运!
—张逸 民航信息技术架构师、 《恰如其分的软件架构》译者
缓存是当前互联网的基石,极大弥补了关系型数据库的天然缺陷。缓存技术也是每一个架构师的必修课,从最初的Memcached,到Redis及各种扩展架构,发展至今已经有些百花齐放的感觉。本书难得地进行了全面梳理,并附以在电商、社交、广告等典型场景下的大型应用。你值得拥有。
—萧田国 高效运维社区发起人、DevOpsDays中国联合发起人
缓存是互联网架构中最关键的环节,本书作者在缓存的性能及高可用方面有丰富的经验,很高兴看到他们通过本书分享了多年的实践精华。
—杨卫华 微博研发副总经理
互联网高性能系统设计的核心之一就是缓存系统的设计。本书集合了缓存理论、开源缓存系统、大规模业务中缓存的具体实践,全方位解读了分布式缓存设计,既能够帮助读者深入理解分布式缓存系统,又提供了很好的架构设计案例供参考,细细品读,受益良多!
—李运华 阿里游戏资深技术专家、 《面向对象葵花宝典》作者
推荐序1 Foreword
缓存技术的大规模使用是互联网架构区别于传统IT技术最大的地方,对缓存的理解和使用的深度决定了是否能架构出一个高性价比、高扩展性的系统。阿里巴巴的系统使用了大量缓存技术(内部缓存的产品名字叫Tair)。从2007年开始,缓存服务器的增长速度远远超过了数据库服务器的增长速度,而因为对缓存的充分使用,系统具备的吞吐量能力的增速又远远高于缓存本身规模的增速。这是一件非常划算的事情,成本下降非常明显,大概使用1台缓存服务器就可以完成以前4台服务器的工作,从而为整体集群节省3台服务器。
缓存代表了高性能的一项技术,同时缓存也是系统架构里非常核心的部分,一个系统缓存承担着90%以上的热点流量,缓存出一点点问题,系统的可用性会马上受到影响。在阿里巴巴的系统架构讨论会上,一般都会把做缓存产品的同事叫上,要求其在了解系统架构规模的前提下给出流量规模、分区方案、热点节点等方面的建议。负责缓存产品的同事往往也需要对业务有所了解,否则就不能设计出更好的产品。缓存的使用也使得架构更加清晰、更容易理解,流量走向变得更简单,这使得系统持续可用性有了明显的提升。
本书比较系统地介绍了缓存在各个层面的工作原理、作用和价值。理解了缓存的相关知识,会对架构一个高性能分布式系统有很大的帮助。
—小邪(蒋江伟)阿里研究员
Foreword 推荐序2
无处不在的缓存,空间换时间的艺术
Cache这个词,据说来自于法语,本意是当CPU处理数据时,先到Cache中去寻找,如果数据在之前的操作已经读取而被暂存其中,就不需要从主内存(Main memory)中读取。后来 Cache的范围有所扩大,凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,都称为Cache。
现在,我们谈的缓存,已经远远突破了原有的概念,在我看来,缓存是一种通用的设计模式:这种模式利用增加存储空间的方式,实现低速部件与高速部件之间的解耦。换而言之,只要实现了解耦的地方,就有存在缓存的可能,既然解耦是计算机系统架构设计中最常用的手段,那么缓存就必将在计算机系统中无处不在。缓存用空间换时间的方式解决问题,而空间不可能无限使用,使用缓存时我们通常会考虑如何选择存储方式、如何使用多级缓存节省空间、如何有效提高缓存的命中率、如何确定有效的更新策略等问题,这些思考会有相当普遍的适用性。
本书重点解读了分布式系统下如何使用缓存。分布式系统中大规模使用缓存是从早期互联网三大法宝(MemCache、反向代理、分库分表)开始的,利用这种集中式、大规模的缓存技术,我们解决了数据库低速IO与高速应用之间的矛盾。我们也发现,除了缓存的通用问题之外,分布式系统缓存还需要解决更多的问题,例如如何对多种类型数据选择不同的存储方式、如何保证数据一致性、如何提高缓存自身的可用性、如何增强系统的可维护性。为了系统性解决这些问题,分布式缓存逐渐变成了分布式架构系统中的一个基础设施。
缓存的使用虽然广泛,但把缓存作为一种基础设施的发展历史并不长,大多数的商业化软件比较复杂,主要以内存数据库为主,而轻量型分布式缓存在不同场景下有不同的关注点和使用方式。君泽集合了一批老司机,为大家展示了多种分布式系统中缓存的使用场景与方案,既有新浪微博这样重量级社交平台信息聚合、分发缓存的方法,也有海量广告业务信息撮合的缓存模式;既有电商系统冷热数据分离的缓存策略,也有对完整分布式系统缓存的技术选型和总结。
通过分布式、微服务架构,实现业务的云化/数字化,建立起的应用生态是一个复杂的体系,其中方方面面的著作很多,但专注在缓存方面的还没有,本书选择了这个方向,就是希望能帮助我们形成一个完整的技术视图,我相信这是作者们做这件事的初衷。
—焦烈焱 普元信息CTO
Foreword 推荐序3
缓 存 为 王
君泽人很低调也很友善,第一次和他见面还是在2016年的年底。2017年的春夏之交,当我正在机场为飞机晚点心烦不已的时候,收到了君泽的一条微信。内容是说他自己正在忙着准备一本书,而且把主要的章节内容发给了我。在百无聊赖之间我就读了起来。
这本书是君泽组织国内互联网技术领域具有实战经验的部分专家,分工合作联合撰写的技术专著。以最常用、最有效果也最容易出问题的缓存为主题。从基础概念、开源框架和应用案例三个层次进行了讨论。给我的感觉是既有理论也有实践,既有广度也有深度,既有国外的开源软件也有国内的具体实践案例,是非常值得深入阅读和细心揣摩的一本工具书。
给我印象比较深刻的是开篇的“缓存为王”,因为今年年初我也专门写过一篇同名的文章,论述了从网络靠近用户端的CDN,到内部网络缓存,到应用缓存,再到数据库缓存的一系列缓存手段、技术和方法。不敢说英雄所见略同,至少大家的关注点差不多。我还记得在当初的文章中用了一句耐人寻味的话,“解决雪崩问题的最好办法是不发生雪崩”。不论是在硅谷互联网公司里还是在国内的互联网平台上,曾多次遇到过海量规模的交易瞬间吞噬平台的悲惨故事。核心的解决方案大同小异,都是通过缓存,逐层减少流量的冲击,保护用户的体验和平台的服务可用。金融、财务行业有现金为王的说法,互联网技术行业用“缓存为王”清楚地概括了缓存的重要性。
这本书还深入浅出地讨论了Ehcache、Memcached、Redis、Tair、EVCache 等各种常用缓存开源系统的方案及精粹。我读过不少国外有关缓存的技术专著,大多数偏原则和理论,具体实施方案和案例较少,特别是结合中国互联网技术实践的更少。所以君泽组织的这本书实际上填补了缓存技术文献在这方面的空白。尤其是结合微博、社交和电商平台的应用实践探讨,对想学习如何利用缓存技术解决实践中具体问题的读者大有裨益。
—陈斌 易宝支付CTO
作 者 寄 语 Foreword
我在这部书里,负责编写了Tair章节,合作编写了缓存周边、动手写缓存章节,期间阅读了大量的代码、整理了非常多的资料,希望能带给读者需要的知识。在一年多的时间里,工作之余的大部分时间,都投入到了书的编写中。在这个过程中,家人给了我极大的支持,这里特别感谢我的太太李春花。一年多的时间里,有因为大促工作量激增,有因为工作变动导致工余时间减少,感谢右军持续的鼓励,感谢一同编写本书的其他伙伴及时的帮助!
—刘璟宇 拍拍贷资深架构师
很幸运,从2009年新浪微博发展之初就参与微博平台系统的的研发及架构工作,经历了微博从起步到当前月活用户数亿的大型互联网系统的技术演进过程。系统演进中经历了很多曲折、困难、不眠之夜,多亏了@TimYang、@zhulei、@liudaoru等那么多良师益友,一路上大家志同道合披荆斩棘,回头看经历的种种困难却正好是不断进步的印记。最后感谢@右军的邀请和大力组织,感谢@Mis晓晓 的包容和支持,正因为有了你们,我才得以完成相关内容的编写和完善。
—陈波 新浪微博平台架构技术专家
从事数据访问层工作期间,会收到很多缓存方面的技术支持,在支持的同时,对缓存也有了更深入的了解,也促使我思考如何将这些实践经验分享给更多的人。正好右军邀请参与本书的写作,便欣然同意。写作期间,阅读了大量的源码,并和联合作者相互交流缓存的原理及实践经验,力求能够呈现实用的技术。本书涉及的分布式缓存体系非常全面,从分布式、Redis、Memcached等原理的剖析到大量的一线实践案例,并且对分布式缓存应用当中的一些痛点、难点进行了深入的阐述。希望本书能够为想了解缓存技术的读者带来快乐和收益。
—何涛 唯品会架构师
承右军兄邀请,有幸参与本书第11章“Aerospike原理及广告业务应用”的编写。本人虽然在互联网广告行业摸爬打滚十余年,从广告网络到SSP、DSP,再到苹果应用市场的推广(ASO,ASM),从PC广告到移动原生广告都有所涉及。对于广告系统架构搭建(存储,计算,缓存)以及系统的高可用较熟悉之外,对于写书确实是赶鸭子上架头一回。又由于平时工作繁忙,家里琐碎事情亦多,几有放弃之念想,但此事绝非君子所为。若如此辜负右军兄及其他几位一同写书的弟兄,于心不忍,日后亦无颜面对他们。故硬着头皮,把此章写完并交付出版社。听闻此章定稿之后,感觉如释重负,精神亦有所高涨。当然,能够坚持下去的另一个重要原因是,其他各位参与编写本书的弟兄的鞭策和鼓励。在这里要特别感谢右军和老曹。由于本人水平有限,还望各位亲爱的读者海涵。
—宋慧庆 勤诚互动高级架构师
首先非常感谢右军兄邀请我加入写作团队,我主要负责第3章、第4章,同此参与合作编写了第6章。虽然我自己经常写一些博客文章,但是写书和写博客是完全不一样的过程,写书是要能够带领读者逐步深入学习,而不是简单地将知识点罗列出来。在这个过程中非常感谢右军和孙海亮对我进行认真的指导,让我的写作水平有了非常大的提高。当我第一篇稿子定稿的时候,我内心的成就感是很难用言语来表达的。由于本书的写作时间周期比较长,在中途的过程中由于工作繁忙,我也曾经有退出的想法,右军和曹哥给了我巨大的鼓励,让我学会了坚持,同时我的妻子和我的父母也给了我巨大的支持,让我能够学会与团队协作。对于我来讲这本书对我的意义已经超过内容本身的范畴,我也希望通过这本书能够给我的孩子树立一个贵在坚持和勇于尝试的榜样。最后由于本人写作水平有限,还请各位读者朋友海涵和包容。
—程超 爱农驿站首席支付技术专家
Web应用相对于传统的软件,在服务的吞吐量方面有更高的要求,也是其面临的主要难点之一。对于无状态的应用服务,日益增加的吞吐量最终转化成存储层的压力,使得后者既要解决数据一致性问题,又要考虑性能和吞吐量,成为Web应用性能的关键,因此已有的文档和书籍主要聚焦在它的优化上。
而缓存作为应用服务节点和持久化存储节点间的辅助层,分担着后者的吞吐量需求,好的缓存设计可以极大地降低存储层的容量风险。本书从缓存的原理、实现到缓存在不同场景的实施方案给出系统化的介绍,为“好的缓存设计”提供了指导。因此在受邀参与本书编写时,既感到荣幸,又感到意义重大。
好的写作依赖于热情和投入,而书籍的编写又需要长时间的毅力和坚持,这让本书的编写像是一段长跑里需要不断冲刺,也让这份“意义重大”既是之于内容本身,也是之于作者的自我提升。感谢本书主笔于君泽的坚持,也感谢其他每一位作者的投入,他们鞭策着我在此领域学习和思考。限于自己的水平,谨希望所编写的章节能为读者们带来一点帮助。内容有欠缺之处,也希望读者批评指教,以此驱动这个领域的应用和实践持续演进。
—邱硕 蚂蚁金服技术专家
作为一个70后的老码农,一个半吊子全栈工匠,在中生代技术(freshman Technology)社区有幸认识了很多志同道合的技术人。因为自己在公众号(wireless_com)上的一篇关于缓存基础的随笔而结识了@右军,进而参与了本书的创作。在如今用户体验至上的时代,性能成为系统设计中的一种核心约束,在性能提升的各种技术手段中,缓存为王。随着技术的演进,缓存同样与时俱进。参与编写的过程是一个对经验梳理的过程,同时也是一个人提升的过程,尤其是和各位作者的切磋,获益匪浅。每一位作者都牺牲了大量的闲暇时间,为本书的出版付出了巨大的努力。我感谢自己的妻儿,感谢家人对自己的支持,希望这本书能够不负众望。
—曹洪伟 渡鸦科技CTO
2014年加入京东后,负责重新设计详情页架构,它是一个读服务,从前端浏览器到后端存储无处不用缓存,在实战中通过运用大量缓存技术提升性能、解决棘手问题,比如618期间有人来刷你的接口,简单上个缓存,会起到很大的保护作用,而且效果非常好。在运用缓存时有许多需要注意的地方,比如缓存一致性是否需要强一致;价格库存数据能否缓存,缓存多久;缓存分布算法是使用一致性哈希还是取模算法;热点数据怎么处理;缓存崩溃与快速恢复等等。要用好缓存并不是那么容易的,希望读者看完本书后能学到一招半式并应用到实战中。
—张开涛 京东架构师
缓存在整个高并发架构设计中是重中之重的关键一笔,所以用好缓存是每次架构设计的必经之路。感谢右军邀请我参与本书。我在本书中介绍了同程旅游的凤凰缓存系统(phoenix)是如何云化管理同程全部的缓存集群,并治理各应用中的缓存使用的。也讲述了一些我们为何要开发phoenix来解决缓存问题的坑事。回首这些坑事,历历在目。各种困难、各种痛苦伴随着凤凰缓存系统从构想到多个版本的更新上线。希望本书能够给踩到同样坑事的读者带来帮助和快乐。
—王晓波 同程旅游首席架构师
Preface 前 言
为了初心的纪念
一本历时2年的书即将出版难免有些激动,同时亦有些忐忑。激动在于这是一次有意义的社会实践,诸多作者参与其中。至完稿时,作者与发起计划时已有些不同。一些朋友因为各种原因退出了,所以从坚持的角度看,完成就意味着第一层面的成功。忐忑在于从初心出发,通读全稿仍有不足之处,诸位作者在具体实践中所遇到的线上问题远非本书所能尽数容纳。而最后精华的实践章节亦经过公司PR审核,略有删减。再一层,设计和编码很重要,运维管理同等重要。一个好用、易用、稳定的运维工具也是选择一套开源组件的重要参考因素,为了集中注意力,本书基本未覆盖运维部分的内容,且待有心人续之。写一本书,面世之后,作者或喜或忧,因为臧否之权利在于读者。
自觉而言,本书适合有一定研发经验的朋友阅读,它山之石,亦有攻玉之效。本书在逻辑上可分为三大篇章:基础概念篇、开源框架篇、应用案例篇。基础概念除了基础知识,也介绍了一些分布式方面的方法和思路;开源框架篇遴选了近年来流行的框架(比如Redis),同时对淘宝Tair、EVCache也做了一些探索。在Redis大行其道之时,对于Memcached及其周边知识也做了介绍,某些公司还有大量的Memcached实例,比如微博、Twitter等。工具的革新总是源自需求的不断被满足,而根据被满足的特性可以归纳其共性,比如解决单点高可用问题就是一个普适性问题,涉及主从模式、双活模式等,可用性同时又和性能、数据一致性相关。缓存为性能而生,但“缓存”设施的存在就决定了这个设施要符合分布式理论的要求。业界介绍理论和概要,或介绍设计原则的书不少,但拿出具体实践的稀有,比如新浪微博、Twitter这样的社交SNS具体如何设计缓存。简约而不简单!在应用案例篇,笔者邀请了对应领域的专家为大家解读案例,可以让大家触摸到真实的设计意图。重要的是大家可以获得不同场景下不同设计策略的启发。
本书的产生要追溯到多年前。笔者一直对缓存技术抱有热情,关注开源框架的发展,亦在工作中关注所遇、所见,乃至所听的案例。从应用程序研发方面看分布式缓存,并不需要所有的程序员都具备开发一套组件的能力,但是需要具备正确使用它的能力。正如易宝CTO陈斌老师所言:“解决雪崩问题的最好办法是不发生雪崩”。不论是在硅谷互联网公司里还是在国内的互联网平台上,曾多次遇到过海量规模的交易瞬间吞噬平台的悲惨故事。笔者亦了解一些缓存因为代码缺陷或者使用不当被击穿的案例,不同数量级的请求产生的结果有天壤之别,不可不慎。
两年前偶遇机械工业出版社的杨福川老师,攀谈之下就萌发了创作本书的念头。但由于工作繁忙且想呈现心中所想之提纲,故邀请一些不同场景下的专家共同完成。组团过程多有波折,特别感动的是北京的孔庆龙兄。他非常有兴趣参与合作,但时逢小孩即将出生,为此,孔兄开了一次家庭会议来讨论此事。虽然孔兄后续未决定参与,但可见其待人之真、之诚,是值得交的朋友。两年间发生了不少事情,刘暻宇(leo)、何涛、曹洪伟和程超都换了工作。在本书项目开始时程超家的小朋友还未出生,现在都快2岁了。大家都很忙,大约1个月碰一下进度,有时候可能一点进展都没有。期间,程超和leo都一度要退出,终坚持了下来。还有些朋友中间退出了,同时有陈波、王晓波等朋友加入。到这时,啥时候出版已不那么心焦了,水到渠成。就是问初心,我们有没有尽自己的努力来呈现一份关于工具书的纪念?
特别感谢曹洪伟身体力行,按时按质完成了分配的章节,同时review了不少章节,带动了这个虚拟组织迈上一个新台阶。这是一本书的编写过程,是一次心灵的旅行,是一次基于互联网的跨组织协同,也是关于工作和生活的点缀。感谢妻子晓娜对于我写作的支持,她对于进度的关注甚于我自己。她花了大量的时间辅导两个小朋友的学习,虽然周末有辅导班、家务等各种事项,但我总能申请到一些时间来构思本书。本书也是送给我的两个宝贝的礼物。这个礼物是初心,想到什么有意义的事情要义无反顾去做;同时,这个礼物也代表“坚持”,如同写作文一样,观察、总结,然后不断练习。
同时还要感谢所有的合作者,我们交叉review了所有章节。感谢机械工业出版社的杨福川老师、孙海亮老师。孙老师的审阅非常专业,从读者视角直面问题所在。朱攀兄弟review了部分章节,在写作过程中和高磊兄弟、丁浪兄弟也有交流,一并表示感谢。
囿于篇幅和知识局限,错漏之处难免,后续将通过勘误和调整完善的形式持续优化。为了初心的纪念,一次心灵的旅游!祝大家阅读愉快!
于君泽(右军)
我一直觉得,技术书籍最大的魅力在于它能够将抽象的概念具象化,并且能够引导读者去思考更深层次的问题。《深入分布式缓存:从原理到实践》在这方面做得非常出色。我尤其喜欢其中关于缓存一致性模型的部分。它详细对比了不同一致性模型(如强一致性、最终一致性)的优缺点,以及它们在实际场景中的适用性。这不仅仅是概念的解释,作者还通过大量的例子,生动地展现了不同模型在面对并发读写、网络分区等情况时的表现,让我对这些抽象的概念有了非常直观的理解。我之前也接触过一些分布式缓存的方案,但很多时候只是知道它们能做什么,却不明白它们为什么会这样设计。这本书就像一个解密者,揭示了这些设计的背后逻辑和权衡。它让我明白,任何一个技术方案的出现,都不是凭空产生的,而是为了解决特定问题,并且必然伴随着一些妥协。书中对于CAP理论、PACELC等经典理论的引用和解读,也让我更加清晰地认识到分布式系统的本质。它不是在炫技,而是在引导读者建立一种严谨的、基于原理的技术思维。这本书的阅读体验,更像是在与一位经验丰富的架构师进行深入的对话,从他的经验和思考中汲取养分。
评分市面上的技术书籍,往往容易陷入两个极端:要么过于浅显,泛泛而谈,缺乏深度;要么过于晦涩,充斥着复杂的数学公式和晦涩的术语,让普通读者望而却步。《深入分布式缓存:从原理到实践》这本书,恰好找到了一个绝佳的平衡点。它在保持技术深度的同时,又非常注重内容的易读性和实践性。我个人感觉,作者在组织内容的时候,花费了大量的心思。他并没有一股脑地抛出所有知识点,而是循序渐进,从易到难,层层递进。比如,在讲解数据分片和路由的时候,作者先从最简单的哈希分片讲起,然后逐步引入一致性哈希,并且详细分析了它们各自的优缺点以及在实际应用中的注意事项。这种由浅入深、由点到面的讲解方式,让我这个非科班出身的读者,也能够轻松地跟上作者的思路。而且,书中穿插的许多实际案例和经验分享,更是让原本枯燥的技术概念变得生动有趣。它不仅仅是一本技术书籍,更像是一位资深工程师在传授他的宝贵经验。这本书给我最大的启示是,技术学习不是孤立的,而是需要融会贯通,并且能够将理论与实践相结合,才能真正掌握一项技术。
评分在阅读《深入分布式缓存:从原理到实践》之前,我对分布式缓存的理解,大概停留在“把常用的数据放到内存里,提高访问速度”这个层面。我可能知道一些常见的分布式缓存产品,比如Redis、Memcached,也知道它们有一些集群模式,但对于它们内部是如何工作的,以及在分布式环境下如何保证数据的一致性、可用性和性能,却知之甚少。这本书彻底颠覆了我之前的认知。它从最基础的键值存储模型开始,逐步深入到分布式缓存的架构设计、一致性保证、故障处理、性能优化等各个方面。我尤其欣赏书中对于一致性算法的讲解,比如 Paxos、Raft 的原理,虽然这些算法本身比较复杂,但作者通过清晰的图示和通俗易懂的语言,将它们的核心思想和应用场景解释得非常到位。这让我能够理解,为什么在分布式系统中,保持数据的一致性是如此的困难,以及各种解决方案的精妙之处。这本书让我从一个“使用者”变成了一个“理解者”,甚至可以说是一个“思考者”。它让我不再仅仅依赖于现有的工具,而是能够基于原理去评估和设计更适合自己业务场景的分布式缓存方案。
评分坦白说,我拿到《深入分布式缓存:从原理到实践》的时候,心里还是有点打鼓的。分布式缓存这东西,听起来很高大上,但实际上很多时候我们接触到的可能只是某个云服务商提供的托管缓存,或者是一些封装好的SDK,对底层的实现原理了解得并不深入。我担心这本书会太偏重理论,脱离实际,读起来枯燥乏味。但事实证明,我的担心是多余的。这本书的内容,虽然深入,但却非常接地气。它并没有回避实际开发中会遇到的各种棘手问题,比如如何处理缓存穿透、缓存击穿、缓存雪崩,以及如何进行有效的缓存预热和降级。作者在讲解这些问题的解决方案时,并没有仅仅给出一些通用的模板,而是深入分析了产生这些问题的根本原因,并且提供了多种可行的策略,以及对每种策略的优劣势进行了详细的分析。我印象特别深刻的是关于缓存失效策略的部分,作者列举了多种失效机制,并详细阐述了它们的应用场景和注意事项,这让我对如何选择合适的失效策略有了全新的认识。这本书的实用性在于,它不仅教你认识问题,更教你如何系统地、有策略地解决问题,并且能够预判潜在的风险。
评分《深入分布式缓存:从原理到实践》这本书,说实话,我刚拿到它的时候,并没有抱太大的期望。市面上讲分布式系统、讲缓存的书籍实在太多了,很多都只是停留在表面的概念堆砌,或者是对某个开源组件的简单介绍,缺乏深入的思考和系统的梳理。我当时是抱着一种“姑且看看,说不定有什么亮点”的心态开始翻阅的。然而,越读越让我惊喜。它并没有像我预期的那样,只是罗列各种技术名词,而是以一种非常扎实、有逻辑的方式,层层剥开分布式缓存的复杂面纱。从最基础的缓存失效问题,到如何设计一致性协议,再到各种实际应用场景下的考量,作者都讲解得鞭辟入里,而且充满了前人的经验和智慧。这本书的强大之处在于,它不仅仅是告诉你“怎么做”,更重要的是告诉你“为什么这么做”,以及“这么做的潜在风险和权衡”。它不是一本看完就能立刻上手搭建高并发系统的速成手册,而是一本需要你静下心来,反复品味,并且需要结合自身工作进行思考的书。那些对于分布式缓存的底层机制、并发控制、数据一致性等核心问题的深入剖析,是我之前阅读过的任何书籍都无法比拟的。如果你真的想理解分布式缓存的精髓,而不是仅仅停留在API的使用层面,那么这本书绝对是绕不过去的坎。它提供了一个非常宏观的视角,让你能够从根本上理解分布式缓存的价值和挑战。
评分这本书还是厚的,质量也很好,内容也很不错。
评分程序狗的世界简直太可怕。bang bang bang棒棒哒。不错。挺好的。超级好超级好超级好bang bang bang棒棒哒。不错。挺好的。
评分像我这种爱买书大过爱看书的人,有优惠肯定会买的
评分看到公众号推荐来买的
评分质量非常好,与卖家描述的完全一致,非常满意,真的很喜欢,完全超出期望值,发货速度非常快,包装非常仔细、严实,物流公司服务态度很好,运送速度很快,很满意的一次购物
评分帮买,看起来很不错,可以了解很多缓存知识
评分好书 优惠力度大 很不错 充电吧
评分618活动每满100-50,果断剁手下单,书质量好,正品
评分这本书内容非常好,给涨涨。好好学习书内容。物流也挺快的啊呵呵
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 book.idnshop.cc All Rights Reserved. 静思书屋 版权所有