深入分布式缓存:从原理到实践|230813pdf下载

深入分布式缓存:从原理到实践|230813百度网盘pdf下载

作者:
简介:深入分布式缓存:从原理到实践|230813
出版社:
出版时间:2018-01
pdf下载价格:0.00¥

免费下载


书籍下载


内容介绍

 书[0名0]:  (正版特价)深入分布式缓存:从原理到实践|230813
 图书定价:  99元
 图书作者:  于君泽
 出版社:  [1机1]械工业出版社
 出版日期:  2018-01-01 00:00:00
 ISBN号:  9787111585190E
 开本:  16开
 页数:  0
 版次:  1-1
 作者简介
我在这部书里,负责编写了Tair章节,合作编写了缓存周边、动手写缓存章节,期间阅读了[0大0]量的代码、整理了非常多的资料,希望能带给读者需要的[0知0]识。在一年多的时间里,工作之余的[0大0]部分时间,都投入到了书的编写中。在这个过程中,家人给了我[0极0][0大0]的支持,这里特别感谢我的太太李春花。一年多的时间里,有因为[0大0]促工作量激增,有因为工作变动导致工余时间减少,感谢右军持续的鼓励,感谢一同编写本书的其他伙伴及时的帮助!
—刘璟宇 拍拍贷资深架构师
很幸运,从2009年[亲斤]浪微博发展之初就参与微博平台系统的的研发及架构工作,[纟巠]历了微博从起步到[0当0]前月活用户数亿的[0大0]型互联网系统的技术演进过程。系统演进中[纟巠]历了很多曲折、困难、不眠之夜,多亏了@TimYang、@zhulei、@liudaoru等那么多良师益友,一路上[0大0]家志同道合披荆斩棘,回头看[纟巠]历的种种困难却正[女子]是不断进步的印记。[z1u1i]后感谢@右军的邀请和[0大0]力组织,感谢@Mis晓晓 的包容和支持,正因为有了你们,我才得以完成相关内容的编写和完善。
—陈波 [亲斤]浪微博平台架构技术专家
从事数据访问层工作期间,[0会0]收到很多缓存方[mian]的技术支持,在支持的同时,对缓存也有了更深入的了解,也促使我思考如何将这些实践[纟巠]验分享给更多的人。正[女子]右军邀请参与本书的写作,便欣然同意。写作期间,阅读了[0大0]量的源码,并和联合作者相互交流缓存的原理及实践[纟巠]验,力求能够呈现实用的技术。本书涉及的分布式缓存体系非常全[mian],从分布式、Redis、Memcached等原理的剖析到[0大0]量的一线实践案例,并且对分布式缓存应用[0当0]中的一些痛点、难点进行了深入的阐述。希望本书能够为想了解缓存技术的读者带来快乐和收益。
—何涛 [0唯0][0品0][0会0]架构师
承右军兄邀请,有幸参与本书[0第0]11章“Aerospike原理及广告业务应用”的编写。本人虽然在互联网广告行业摸爬打滚十余年,从广告网络到SSP、DSP,再到苹果应用市场的推广(ASO,ASM),从PC广告到移动原生广告都有所涉及。对于广告系统架构搭建(存储,计算,缓存)以及系统的高可用较熟悉之外,对于写书确实是赶鸭子上架头一回。又由于平时工作繁忙,家里琐碎事情亦多,几有放弃之念想,但此事[纟色]非君子所为。若如此辜负右军兄及其他几位一同写书的弟兄,于心不忍,日后亦无颜[mian]对他们。故硬着头皮,把此章写完并交付出版社。听闻此章定稿之后,感觉如释重负,精神亦有所高涨。[0当0]然,能够坚持下去的另一个重要原因是,其他各位参与编写本书的弟兄的鞭策和鼓励。在这里要特别感谢右军和老曹。由于本人水平有限,还望各位亲爱的读者海涵。
—宋慧庆 勤诚互动高级架构师
[0首0]先非常感谢右军兄邀请我加入写作团队,我[1主1]要负责[0第0]3章、[0第0]4章,同此参与合作编写了[0第0]6章。虽然我自己[纟巠]常写一些博客文章,但是写书和写博客是完全不一样的过程,写书是要能够带[令页]读者逐步深入[0学0]习,而不是简单地将[0知0]识点罗列出来。在这个过程中非常感谢右军和孙海亮对我进行认真的指导,让我的写作水平有了非常[0大0]的[扌是]高。[0当0]我[0第0]一篇稿子定稿的时候,我内心的成就感是很难用言语来表达的。由于本书的写作时间周期比较长,在中途的过程中由于工作繁忙,我也曾[纟巠]有退出的想[0法0],右军和曹哥给了我[1巨1][0大0]的鼓励,让我[0学0][0会0]了坚持,同时我的妻子和我的父母也给了我[1巨1][0大0]的支持,让我能够[0学0][0会0]与团队协作。对于我来讲这本书对我的意义已[纟巠][0超0]过内容本身的范畴,我也希望通过这本书能够给我的孩子树立一个贵在坚持和勇于尝试的榜样。[z1u1i]后由于本人写作水平有限,还请各位读者朋友海涵和包容。
—程[0超0] 爱农驿站[0首0]席支付技术专家
Web应用相对于传统的软[亻牛],在服务的吞吐量方[mian]有更高的要求,也是其[mian]临的[1主1]要难点之一。对于无状态的应用服务,日益增加的吞吐量[z1u1i]终转化成存储层的压力,使得后者既要解决数据一致性问题,又要考虑性能和吞吐量,成为Web应用性能的关键,因此已有的文档和书籍[1主1]要聚焦在它的[0优0]化上。
而缓存作为应用服务节点和持[1久1]化存储节点间的辅助层,分担着后者的吞吐量需求,[女子]的缓存设计可以[0极0][0大0]地降低存储层的容量风险。本书从缓存的原理、实现到缓存在不同场景的实施方案给出系统化的介绍,为“[女子]的缓存设计”[扌是]供了指导。因此在受邀参与本书编写时,既感到荣幸,又感到意义重[0大0]。
[女子]的写作依赖于热情和投入,而书籍的编写又需要长时间的毅力和坚持,这让本书的编写像是一段长跑里需要不断冲刺,也让这份“意义重[0大0]”既是之于内容本身,也是之于作者的自我[扌是]升。感谢本书[1主1]笔于君泽的坚持,也感谢其他每一位作者的投入,他们鞭策着我在此[令页]域[0学0]习和思考。限于自己的水平,谨希望所编写的章节能为读者们带来一点帮助。内容有欠缺之处,也希望读者批[0评0]指教,以此驱动这个[令页]域的应用和实践持续演进。
—邱硕 蚂蚁金服技术专家
作为一个70后的老码农,一个半吊子全栈工匠,在中生代技术(freshman Tech[0no0]logy)社区有幸认识了很多志同道合的技术人。因为自己在公众号(wireless_com)上的一篇关于缓存基础的随笔而结识了@右军,进而参与了本书的创作。在如今用户体验至上的时代,性能成为系统设计中的一种核心约束,在性能[扌是]升的各种技术手段中,缓存为王。随着技术的演进,缓存同样与时俱进。参与编写的过程是一个对[纟巠]验梳理的过程,同时也是一个人[扌是]升的过程,尤其是和各位作者的切磋,获益匪浅。每一位作者都牺牲了[0大0]量的闲暇时间,为本书的出版付出了[1巨1][0大0]的努力。我感谢自己的妻儿,感谢家人对自己的支持,希望这本书能够不负众望。
—曹洪伟 渡鸦科技CTO
2014年加入京东后,负责重[亲斤]设计详情页架构,它是一个读服务,从前端浏览器到后端存储无处不用缓存,在实战中通过运用[0大0]量缓存技术[扌是]升性能、解决棘手问题,比如618期间有人来刷你的接口,简单上个缓存,[0会0]起到很[0大0]的保护作用,而且效果非常[女子]。在运用缓存时有许多需要注意的地方,比如缓存一致性是否需要强一致;价格库存数据能否缓存,缓存多[1久1];缓存分布算[0法0]是使用一致性哈希还是取模算[0法0];热点数据怎么处理;缓存崩溃与快速恢复等等。要用[女子]缓存并不是那么容易的,希望读者看完本书后能[0学0]到一招半式并应用到实战中。
—张开涛 京东架构师
缓存在整个高并发架构设计中是重中之重的关键一笔,所以用[女子]缓存是每次架构设计的必[纟巠]之路。感谢右军邀请我参与本书。我在本书中介绍了同程旅游的凤凰缓存系统(phoenix)是如何云化管理同程全部的缓存集群,并治理各应用中的缓存使用的。也讲述了一些我们为何要开发phoenix来解决缓存问题的坑事。回[0首0]这些坑事,历历在目。各种困难、各种痛苦伴随着凤凰缓存系统从构想到多个版本的更[亲斤]上线。希望本书能够给踩到同样坑事的读者带来帮助和快乐。
—王晓波 同程旅游[0首0]席架构师
 内容简介
这是[0国0]内[0首0]本从[0大0]型互联网系统的应用角度探讨分布式缓存的书籍,包含了原理、框架、架构、案例等多方[mian]的视角。互联网系统随着容量需求的陡增,许多看似简单的存储类场景都[mian]临着[1巨1][0大0]的容量和稳定性风险,而其中的[0大0]部分都可以通过对缓存的合理使用来规避。读者从对本书的阅读[0当0]中,将[0会0]获得应对这些问题的[纟巠]验,也[0会0]对分布式缓存有一个体系化的认识。本书内容共分为三个部分,按照从理论到实现,再到实践的思路撰写。[0首0]先介绍分布式缓存的背景[0知0]识,对本书“分布式”和“缓存”这两个关键词进行了全[mian]的综述,作为后续章节叙述的基础;[0第0]二部分介绍业界[1主1]流的缓存,关注其原理与实现,囊括了Ehcache、Memcached、Redis、tair、EVCache、Aerospike等[6]个缓存或类缓存系统;[z1u1i]后一部分讨论缓存在互联网系统中的实践,从广告、社交、[亲斤]闻、电[0商0]、营销等五类典型的互联网应用入手,分析它们[mian]临的性能稳定性问题以及如何利用分布式缓存解决这些问题
 目录

赞誉
推荐序1
推荐序2
推荐序3
作者寄语
前言
[0第0]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 页[mian]缓存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
[0第0]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[1机1]制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
[0第0]3章 动手写缓存60
3.1 缓存定义的规范60
3.1.1 [亲斤]规范的[1主1]要内容及特性60
3.1.2 [亲斤]规范的API介绍61
3.2 缓存框架的实现62
3.2.1 前期准备63
3.2.2 缓存的架构介绍63
3.2.3 设计思路以及[0知0]识点详解64
3.3 缓存框架的使用示例74
[0第0]4章 Ehcache与Guava Cache76
4.1 Ehcache的[1主1]要特性76
4.2 Ehcache使用介绍77
4.2.1 Ehcache架构图77
4.2.2 缓存数据过期策略78
4.2.3 Ehcache缓存的基本用[0法0]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
[0第0]5章 从Memcached开始了解集中式缓存97
5.1 Memcached基本[0知0]识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[1机1]制102
5.2.2 使用 Growth Factor进行调[0优0]104
5.2.3 Item105
5.3 典型问题解析106
5.3.1 过期[1机1]制106
5.3.2 哈希算[0法0]107
5.3.3 热点问题108
5.3.4 缓存与数据库的更[亲斤]问题108
5.3.5 别把缓存[0当0]存储109
5.3.6 命[0名0]空间110
5.3.7 CAS110
5.4 Memcached客户端分析110
5.4.1 Memcached的Client111
5.4.2 Spymemcached设计思想解析111
5.5 Memcached周边工具发展117
[0第0]6章 Memcached 周边技术119
6.1 Twemcache119
6.1.1 Twemcache 的设计原理120
6.1.2 Twemcache的安装及命令行详解122
6.1.3 基于Java的Twemcache用[0法0]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路由算[0法0]138
6.3.2 典型的使用场景139
6.3.3 Mcrouter的可扩展性142
6.3.4 源码简要解析144
[0第0]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 单[1机1]处理逻辑171
7.3.1 多路复用171
7.3.2 定时任务处理173
7.4 持[1久1]化174
7.4.1 基于全量模式的持[1久1]化174
7.4.2 基于增量模式的持[1久1]化176
7.4.3 基于增量模式持[1久1]化的[0优0]化178
[0第0]8章 分布式Redis180
8.1 水平拆分(sharding)181
8.1.1 数据分布181
8.1.2 请求路由182
8.2 [1主1]备复制(replication)182
8.2.1 [1主1]备复制流程183
8.2.2 断点续传183
8.3 故障转移(failover)184
8.3.1 sentinel间的相互感[0知0]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
[0第0]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
[0第0]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
[0第0]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
[0第0]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的[z1u1i]简方案286
12.2.2 DB的sharding方案288
12.2.3 引入缓存290
12.2.4 缓存的[0优0]化方案292
12.3 帖子([p1o1s]t)的存储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
[0第0]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
[0第0]14章 典型电[0商0]应用与缓存324
14.1 电[0商0]类应用的挑战及特点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 构建需求响应式亿级[0商0][0品0]详情页337
14.4.1 [0商0][0品0]详情页前端结构338
14.4.2 单[0品0]页技术架构发展338
14.4.3 详情页架构设计原则343
14.4.4 遇到的一些问题349
[0第0]15章 同程凤凰缓存系统基于Redis的设计与实践357
15.1 同程凤凰缓存系统要解决什么问题357
15.1.1 Redis用[0法0]的凌乱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的集群分片[0优0]化370
15.2.5 客户端在运维中的作用371
15.2.6 凤凰缓存系统在Redis运维上的工具372
15.3 凤凰缓存系统的使用效果373
[0第0]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 缓存[0知0]识结构更多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
 编辑推荐
(1)来自蚂蚁金服、京东、网联、[亲斤]浪微博、同程旅游等公司的10余位一线架构师用心之作;(2)阿里研究员蒋江伟、易[1宝1]支付CTO陈斌、普元信息CTO焦烈焱、特赞科技CTO黄勇、 微博研发副总[纟巠]理杨卫华等专家联袂推荐(3)深度解构Ehcache、Memcached、Redis、tair、EVCache、Aerospike等6[0大0]缓存系统的技术原理,及其在电[0商0]、社交、广告等典型场景中的应用