【BitTiger读书会】· 第四十六期《深入分布式缓存》



  • 【BitTiger读书会简介】
    BitTiger读书会,以书会友。以报告方式,加强组织表达力;以讨论方式,激荡思考判断力,期能扩充知识领域,养成读书习惯。

    每周一本好书,一年阅读50本书,集众智,挑好书,留精华内容,创优质社群。
    BitTiger读书会,欢迎您的加入!

    在第四十五期活动里,Larry带来了他对《区块链革命》这本书的读书感受,和大家讨论了区块链的产生、特点和意义,并分享了对区块链和数字货币未来发展的看法。在即将到来的第四十六期活动里,右军将与我们一起分享一本他策划编写的技术书籍——《深入分布式缓存》,本书是由中国10位一线的互联网构架师共同完成,为您解析当前互联网企业分布式缓存的奥秘。

    0_1519962145316_upload-0f0989f4-2851-43db-971b-136a91577497

    这是国内首本从大型互联网系统的应用角度探讨分布式缓存的书籍,包含了原理、框架、架构、案例等多方面的视角。

    互联网系统随着容量需求的陡增,许多看似简单的存储类场景都面临着巨大的容量和稳定性风险,而其中的大部分都可以通过对缓存的合理使用来规避。读者从对本书的阅读当中,将会获得应对这些问题的经验,也会对分布式缓存有一个体系化的认识。

    本书内容共分为三个部分,按照从理论到实现,再到实践的思路撰写。

    首先介绍分布式缓存的背景知识,对本书“分布式”和“缓存”这两个关键词进行了全面的综述,作为后续章节叙述的基础;

    第二部分介绍业界主流的缓存,关注其原理与实现,囊括了Ehcache、Memcached、Redis、tair、EVCache、Aerospike等六个缓存或类缓存系统;

    最后一部分讨论缓存在互联网系统中的实践,从广告、社交、新闻、电商、营销等五类典型的互联网应用入手,分析它们面临的性能稳定性问题以及如何利用分布式缓存解决这些问题。

    【内容大纲】

    1. 分布式缓存技术采用的考量
      • 应用规模
      • 系统架构
    2. 常用缓存组件的选择
      • KV类
      • 集合类
      • 计数类
    3. 缓存架构的设计
      • 结合业务场景
      • 结合缓存组件特点

    【嘉宾介绍】
    右军,真名于君泽,蚂蚁金服支付核算技术部负责人。互联网金融业务近8年,电信业务8年经验,技术兴趣主要在高可用分布式架构应用,研发管理,内建质量等领域,维护公众号:技术琐话。《深入分布式缓存》一书联合作者,总策划。

    【活动时间】
    美西时间 3月3日 周六 6:00 PM
    美东时间 3月3日 周六 9:00 PM
    北京时间 3月4日 周日 10:00 AM

    【领读方式】
    中文,微信群图文直播

    【报名方式】
    请微信扫码或添加微信id:saraincs,回复“读书”入群
    0_1519962695868_1518883841883-扫码.png

    0_1520103393793_B2AE73A9-C3C8-4FB4-A5E8-4C9AADF2A9AD-5072-000004BD7F9BF2D8_tmp.JPG



  • 编辑推荐
    于君泽、曹洪伟、邱硕等著的《深入分布式缓存(从原理到实践)》以缓存机制的基本原理为开始,逐渐过渡至缓存系统的组建以及使用上面,全书分析和讲解了多个缓存系统,并列举了缓存的各种使用场景。如果你正准备构建自己的缓存系统,又或者你想进一步学习更多与缓存有关的知识,那么这本书将是你不容错过的一本书。

    作者简介
    蚂蚁金服高级技术专家、支付核算技术部负责人、成都研发中心技术团队创建者之一,先后负责或参与过转账类业务、账单类业务、社区支付、开放平台、支付平台、资金核算平台、类营销类支付工具的建设;之前有数年电信业务研发经验,涉及BSS|OSS|针对性营销等平台。个人感兴趣的方向:高并发、分布式技术、稳定性模式;内建质量、技术型管理。

    目录
    Contents 目录
    赞誉
    推荐序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.

    序言
    推荐序1 Foreword缓存技术的大规模使用是互联网架构区别于传统IT技术最大的地方,对缓存的理解和使用的深度决定了是否能架构出一个高性价比、高扩展性的系统。阿里巴巴的系统使用了大量缓存技术(内部缓存的产品名字叫Tair)。从2007年开始,缓存服务器的增长速度远远超过了数据库服务器的增长速度,而因为对缓存的充分使用,系统具备的吞吐量能力的增速又远远高于缓存本身规模的增速。这是一件非常划算的事情,成本下降非常明显,大概使用1台缓存服务器就可以完成以前4台服务器的工作,从而为整体集群节省3台服务器。
    缓存代表了高性能的一项技术,同时缓存也是系统架构里非常核心的部分,一个系统缓存承担着90%以上的热点流量,缓存出一点点问题,系统的可用性会马上受到影响。在阿里巴巴的系统架构讨论会上,一般都会把做缓存产品的同事叫上,要求其在了解系统架构规模的前提下给出流量规模、分区方案、热点节点等方面的建议。负责缓存产品的同事往往也需要对业务有所了解,否则就不能设计出更好的产品。缓存的使用也使得架构更加清晰、更容易理解,流量走向变得更简单,这使得系统持续可用性有了明显的提升。
    本书比较系统地介绍了缓存在各个层面的工作原理、作用和价值。理解了缓存的相关知识,会对架构一个高性能分布式系统有很大的帮助。
    —小邪(蒋江伟)阿里研究员Foreword 推荐序2无处不在的缓存,空间换时间的艺术Cache这个词,据说来自于法语,本意是当CPU处理数据时,先到Cache中去寻找,如果数据在之前的操作已经读取而被暂存其中,就不需要从主内存(Main memory)中读取。后来 Cache的范围有所扩大,凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,都称为Cache。
    现在,我们谈的缓存,已经远远突破了原有的概念,在我看来,缓存是一种通用的设计模式:这种模式利用增加存储空间的方式,实现低速部件与高速部件之间的解耦。换而言之,只要实现了解耦的地方,就有存在缓存的可能,既然解耦是计算机系统架构设计中最常用的手段,那么缓存就必将在计算机系统中无处不在。缓存用空间换时间的方式解决问题,而空间不可能无限使用,使用缓存时我们通常会考虑如何选择存储方式、如何使用多级缓存节省空间、如何有效提高缓存的命中率、如何确定有效的更新策略等问题,这些思考会有相当普遍的适用性。
    本书重点解读了分布式系统下如何使用缓存。分布式系统中大规模使用缓存是从早期互联网三大法宝(MemCache、反向代理、分库分表)开始的,利用这种集中式、大规模的缓存技术,我们解决了数据库低速IO与高速应用之间的矛盾。我们也发现,除了缓存的通用问题之外,分布式系统缓存还需要解决更多的问题,例如如何对多种类型数据选择不同的存储方式、如何保证数据一致性、如何提高缓存自身的可用性、如何增强系统的可维护性。为了系统性解决这些问题,分布式缓存逐渐变成了分布式架构系统中的一个基础设施。
    缓存的使用虽然广泛,但把缓存作为一种基础设施的发展历史并不长,大多数的商业化软件比较复杂,主要以内存数据库为主,而轻量型分布式缓存在不同场景下有不同的关注点和使用方式。君泽集合了一批老司机,为大家展示了多种分布式系统中缓存的使用场景与方案,既有新浪微博这样重量级社交平台信息聚合、分发缓存的方法,也有海量广告业务信息撮合的缓存模式;既有电商系统冷热数据分离的缓存策略,也有对完整分布式系统缓存的技术选型和总结。
    通过分布式、微服务架构,实现业务的云化/数字化,建立起的应用生态是一个复杂的体系,其中方方面面的著作很多,但专注在缓存方面的还没有,本书选择了这个方向,就是希望能帮助我们形成一个完整的技术视图,我相信这是作者们做这件事的初衷。
    —焦烈焱 普元信息CTOForeword 推荐序3缓 存 为 王君泽人很低调也很友善,第一次和他见面还是在2016年的年底。2017年的春夏之交,当我正在机场为飞机晚点心烦不已的时候,收到了君泽的一条微信。内容是说他自己正在忙着准备一本书,而且把主要的章节内容发给了我。在百无聊赖之间我就读了起来。
    这本书是君泽组织国内互联网技术领域具有实战经验的部分专家,分工合作联合撰写的技术专著。以最常用、最有效果也最容易出问题的缓存为主题。从基础概念、开源框架和应用案例三个层次进行了讨论。给我的感觉是既有理论也有实践,既有广度也有深度,既有国外的开源软件也有国内的具体实践案例,是非常值得深入阅读和细心揣摩的一本工具书。
    给我印象比较深刻的是开篇的“缓存为王”,因为今年年初我也专门写过一篇同名的文章,论述了从网络靠近用户端的CDN,到内部网络缓存,到应用缓存,再到数据库缓存的一系列缓存手段、技术和方法。不敢说英雄所见略同,至少大家的关注点差不多。我还记得在当初的文章中用了一句耐人寻味的话,“解决雪崩问题的最好办法是不发生雪崩”。不论是在硅谷互联网公司里还是在国内的互联网平台上。


 

与 BitTiger Community 的连接断开,我们正在尝试重连,请耐心等待