前言

缓存和算法一样,几乎是所有大厂的敲门砖。对于后端开发来说,算***影响你是否可以接到 Offer,而你对缓存知识的理解程度,则会影响你 Offer 的薪资水平。可以说,对缓存的掌握程度,在某种意义上决定了后端开发者的职业高度

之前和很多大厂面试官聊天,大家都有这个共识。因为互联网公司基本都是直面用户的业务,要想改善用户体验,就要持续确保系统的访问性能和可用性,而使用缓存最常见且有效的手段。你要是不懂缓存,就很难写出高性能大并发的代码来满足业务需求。所以,面试官通常会通过应聘者对缓存相关知识的理解深入程度,来判断其开发经验和学习能力。

在这里推荐一份数位一线用阿里P7联手京东T6自己的项目经验编写的:深入分布式缓存从原理到实践,深度解构分布式缓存技术原理及其在电商、社交、广告等

典型场最中的应用

 

 

在文章开始前先放一份知识点图谱,整个图谱以 10 年分布式缓存经验分享为主,相信有不少干货,值得一看。

 

文章简介

本书围绕分布式缓存的基础概念、开源框架、应用案例三方面进行讲解,从理论到实战,循序渐进,深入浅出。

  • 首先介绍分布式缓存的背景知识,对“分布式”和“缓存”这两个关键词进行了全面阐述,从而为后续章节的叙述打下基础;
  • 接着介绍业界主流的缓存,关注其原理与实现,囊括了Ehcache.Memcached, Redis、Tair, EVCache,Aerospike等六个缓存或类缓存系统;
  • 最后讨论缓存在互联网系统中的实践。从广告、社交、新闻、电商、营销等五类典型的互联网应用入手,分析它们面临的性能稳定性问题以及如何利用分布式缓存解决这些问题。

第一章

在商业的世界中,常说的一句话是“现金为王"。在互联网、移动互联网乃至整个软件技术世界中,与之相近的一一个说法就是“缓存为王”。什么是缓存呢?

 

私信小编【资料】即可获取这份阿里P7联手京东T6出版的深入分布式缓存从原理到实践PDF版。

  • 什么是缓存?
  • 为什么使用缓存?
  • 从用户体验说起
  • 关于系统的性能
  • 从网站的架构发展看缓存
  • 客户端缓存
  • 页面缓存
  • 浏览器缓存
  • APP上的缓存
  • 网络中的缓存
  • Web代理缓存
  • 边缘缓存
  • 服务端缓存
  • 数据库缓存
  • 平台级缓存
  • 应用级缓存

 

 

第二章

分布式理论体系宏大精深,可以通过一大厚本专著来专门阐述,本书难以尽述之,本章拟从分布式系统概论、分布式系统概念、分布式系统理论,比如Paxos、分布式系统设计策略、心跳检测、分布式系统设计实践、全局ID生成等几个方面略勾画之。

  • 分布式系统概论
  • 分布式系统概念
  • 进程与线程
  • 并发
  • 并行
  • 集群
  • 状态特性
  • 系统重发与幂等性
  • 硬件异常
  • 分布式系统理论
  • CAP理论
  • CAP理论澄清
  • Paxos
  • 2PC
  • 3PC
  • Raft
  • Lease机制
  • 解决“脑裂”问题
  • Quorum NWR
  • MVCC
  • Gossip
  • 分布式系统设计策略
  • 心跳检测
  • 高可用设计
  • 容错性
  • 负裁均衡
  • 分布式系统设计实践
  • 全局ID生成
  • 哈希取模
  • 一致性哈希
  • 路由表
  • 数据拆分

 

 

第三章

目前市面上已经有很多开源的缓存框架,比如Redis、Memcached. Eheache 等,那为什么还要自己动手写缓存?本章将带领大家从0到1写一个简单的缓存框架,目的是让大家对缓存的类型、缓存的标准、缓存的实现及原理有- -个系统的了解,做到知其然,知其所以然。

  • 缓存定义的规范
  • 新规范的主要内容及特性
  • ?新规范的API介绍
  • 缓存框架的实现
  • 前期准备
  • 缓存的架构介绍
  • 设计思路以及知识点详解
  • 缓存框架的使用示例

 

 

第四章

GuavaCache和Ehcache本地缓存,但在细分领域也有不同的应用场景,4.5节中将做详细介绍。

  • Ehcache的主要特性
  • Ehcache使用介绍
  • Ehcache架构图
  • 缓存数据过期策略
  • Ehcache缓存的基本用法
  • 在Spring中使用Ehcache
  • Ehcache集群介绍
  • 集群的方式
  • 如何配置集群
  • Ehcache的适用场景
  • Guava Cache的使用
  • Guava Cache的适用场景
  • Guava Cache的创建方式
  • 缓存数据删除
  • 并发场景下的使用

 

 

第五章

许多Web应用程序都将数据保存到RDB中,但随着数据量的增大,RDB的负担加重,数据库响应恶化,性能严重下降。Memcached 是高性能的分布式内存缓存服务器,一般用来缓存访问的热点数据,减轻数据库的负担。

  • Memcached基本知识
  • Memcached的操作命令
  • Memcached使用场景
  • Memcached特征
  • Memcached的一些问题
  • Memcached内存存储
  • Slab Allocation机制
  • 使用Growth Factor进行调优
  • Item
  • 典型问题解析
  • 过期机制
  • 哈希算法
  • 热点问题
  • 缓存与数据库的更新问题
  • 别把缓存当存储
  • 命名空间
  • CAS
  • Memcached客户端分析
  • Memcached的Client
  • Spymemcached设计思想解析
  • Memcached周边工具发展

 

 

 

第六章

本章主要介绍基于Memcached的周边技术,重点对Memcached的定制版Twemcache,对开源的缓存集群方案Twemproxy,以及Mcrouter等进行解析,以便充分地利用分布式缓存服务。

  • Twemcache
  • Twemcache的设计原理
  • Twemcache的安装及命令行详解
  • 基于Java的Twemcache用法
  • Twemproxy
  • Twemproxy的常用部署模式
  • Twemproxy的可扩展性
  • Twemproxy源代码简析
  • Mcrouter
  • Mcrouter路由算法
  • 典型的使用场景
  • Mcrouter的可扩展性
  • 源码简要解析

 

 

 

 

第七章

Redis运行于独立的进程,通过网络协议和应用交互,将数据保存在内存中,并提供多种手段持久化内存数据。Redis具备跨服务器的水平拆分、复制的分布式特性。

  • 数据结构
  • value对象的通用结构
  • String
  • List
  • Map
  • Set
  • Sorted-Set
  • 客户端与服务器的交互.
  • 客户端/服务器协议
  • 请求/响应模式
  • 事务模式
  • 脚本模式
  • 发布/订阅模式
  • 单机处理逻辑
  • 多路复用
  • 定时任务处理
  • 持久化
  • 基于全量模式的持久化
  • 基于增量模式的持久化
  • 基于增量模式持久化的优化

 

 

 

第八章

本章的编写目的就是,帮助读者了解如何通过Redis实现上述解决方案,本章包含的主要知识如下:

  • 水平拆分(sharding)
  • 数据分布
  • 请求路由
  • 主备复制(replication)
  • 主备复制流程
  • 断点续传
  • 故障转移(failover)
  • sentinel间的相互感知
  • master的故障发现
  • failover决策
  • Redis Cluster
  • 拓扑结构
  • 配置的一致性
  • sharding
  • failover
  • 可用性和性能

 

 

 

 

第九章

Tair分为持久化和非持久化两种使用方式。非持久化的Tair可以看成是-一个分布式缓存。持久化的Tair将数据存放于磁盘中。在最新版本的Tair项目中实现了以下4种存储引擎。

非持久化: mdb

持久化: fdb、kdb和ldb

这4种存储引擎分别基于四种开源的key/value 数据库: Memcached、 Firebird、 KyotoCabinet和LevelDB。其中Firebird 是关系型存储数据库,Memcached、Kyoto Cabinet和LevelDB是NoSQL数据库。

私信小编【资料】即可获取这份阿里P7联手京东T6出版的深入分布式缓存从原理到实践PDF版。

  • Tair总体架构
  • Config Server简介
  • Data Server简介
  • Tair高可用和负载均衢
  • !对照表
  • ?数据迁移
  • 存储引擎
  • Tair的API
  • key/value相关API
  • prefix相关的API

 

 

第十章

云服务不仅为软件系统的开发和部署带来了更多的敏捷性,而且提供了更多创新的可能性。当分布式缓存技术遇到云服务会是怎样的情形呢?EVCache就是这样的一种技术。

  • EVCache项目介绍
  • EVCache的由来
  • EVCache的发展
  • EVCache的演进
  • EVCache的使用场景
  • 典型用例
  • 典型部署
  • EVCache的性能
  • EVCache集群的性能
  • 全局化复制时的性能问题
  • Moneta项目中的组件性能
  • EVCache的高可用性
  • AWS的多可用区
  • EVCache对AWS高可用性的增强
  • 源码与示例
  • 源码浅析
  • EVCache示例

 

 

 

 

第十一章

本章将会介绍Aerospike的架构原理,集群部署,基本用法以及在广告行业中的具体应用;本章基于Aerospike的3.8.4版本(主要针对具体的部署操作部分,而对于原理,架构的描述则不局限于此)。接下来开始介绍Aerospike整体的架构实现和原理。

  • Aerospike架构
  • Aerospike具体实现
  • Aerospike集群管理
  • 数据分布
  • Aerospike集群配置和部署
  • 搭建集群的方式与配置
  • 部署集群
  • Aerospike与Redis的对比
  • Aeropsike在广告行业的具体应用
  • Aerospike在个性化推荐广告中的应用
  • Aerospike在实时竞价广告中的应用

 

 

 

第十二章

本章以一个典型的社交类应用为例,基于-一个简化的领域模型和业务场景,叙述该应用在面临不断增加的业务吞吐量时,传统的基于数据库的方案将面临的性能风险,随后阐述如何利用缓存技术对这些典型的性能问题进行解决。

  • 社交业务示例
  • 业务模型
  • 业务场景
  • 业务特点
  • 关系(relation) 的存储
  • 基于DB的最简方案
  • DB的sharding方案
  • 引入缓存
  • 缓存的优化方案
  • 帖子(post) 的存储
  • 基于DB的方案
  • 引入服务端缓存
  • 本地缓存
  • 时间线(timeline) 的存储
  • 基于DB的方案一push模式
  • 基于DB的方案一pull模式
  • 增量查询引入服务端缓存

 

 

 

 

第十三章

本章将以新浪微博Feed系统架构的发展历程作为背景,基于一个典型的社交网络Feed系统架构,介绍Feed系统的缓存模型、缓存体系架构,以及缓存体系如何伴随业务规模来扩展及演进。

  • Feed系统架构
  • Feed缓存模型
  • Feed缓存架构的设计
  • 简单数据类型的缓存设计
  • 集合类数据的缓存设计
  • 其他类型数据的缓存设计
  • Feed缓存的扩展
  • Redis的扩展
  • 计数器的扩展
  • 存在性判断的扩展
  • Feed缓存的服务化

 

 

 

 

第十四章

分布式系统的CAP理论首先把分布式系统中的三个特性进行了如下归纳:

一致性(C):在分布式系统中的所有数据备份,在同- -时刻是否是同样的值(等同于所有节点访问同一份最新的数据副本)。

可用性(A):在集群中一部分节点故障后,集群整体是否还能响应客户端的读写请求(对数据更新具备高可用性)。

分区容忍性(P):以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。

  • 电商类应用的挑战及特点
  • 应用数据静态化架构高性能单页Web应用
  • 整体架构
  • CMS系统
  • 前端展示系统
  • 控制系统
  • 应用多级缓存模式支撑海量读服务
  • 多级缓存介绍
  • 如何缓存数据
  • 分布式缓存与应用负载均衡
  • 热点数据与更新缓存
  • 更新缓存与原子性
  • 缓存崩溃与快速修复
  • 构建需求响应式亿级商品详情页
  • 商品详情页前端结构
  • 产品页技术架构发展
  • 详情页架构设计原则
  • 遇到的一些问题

 

 

 

 

第十五章

本章和大家分享一下同程凤凰缓存系统在基于Redis方面的设计与实践。在本章中除了会列举我们工作过程中遇到各种问题和误区外,还会给出我们相应的解决办法,希望能够抛砖引玉为大家带来一定的启示。

  • 同程凤凰缓存系统要解决什么问题
  • Redis用法的凌乱
  • 从实际案例再看Redis的使用
  • 如何改变Redis用不好的误区
  • 凤凰缓存系统对Redis系统化改
  • 用好Redis先运维好它
  • 传统的Redis运维方式
  • Redis的Docker化部署
  • 凤凰缓存系统对Redis的监控
  • 凤凰缓存系统对Redis的集群分片优化
  • 客户端在运维中的作用
  • 凤凰缓存系统在Redis运维上的工具
  • 凤凰缓存系统的使用效果

 

 

 

 

第十六章

在介绍了分布式理论体系、自己动手写缓存、若干开源缓存框架等内容之后,如同一段美好的旅程,本书也需要-一个总结性的停顿。谈及缓存我们会情不自禁地想起淘汰算法过期处理等,但开发设计中如何更好地引入缓存技术,完整的缓存知识体系又是怎样的,笔者尝试梳理一下,算是为本书做-一个收尾。

  • 更好的引入缓存技术
  • 缓存引入前的考量
  • 缓存组件的选择
  • 缓存架构的设计
  • 缓存系统的监控及演进
  • 缓存分类总结
  • 缓存知识结构更多Tips
  • 缓存使用模式
  • 缓存协议
  • 缓存连接池
  • 几个关注点
  • 管理缓存
  • 缓存可用性
  • 数据致性
  • 热点数据处理
  • 注意事项Tips

 

 

私信小编【资料】即可获取这份阿里P7联手京东T6出版的深入分布式缓存从原理到实践PDF版。