type
status
date
slug
summary
tags
category
icon
password
原文
What Makes This Hard?
单副本语义实现的困难
Physical master copy may not exist 物理主副本可能不存在
- hosts track who has most recent copy 主机跟踪谁拥有最新副本
- more likely in P2P scenarios than client-server scenarios 在 P2P 场景中比在客户端-服务器场景中更有可能出现
- also common in multiprocessor hardware caches 在多处理器硬件缓存中也很常见(CPU 缓存一致性 MESI)
如果各个节点是对等,没有主副本,当需要确保数据一致性时,各个节点需要通过交互来确认谁持有最新版本的副本。
Network may break between some users and master copy 某些用户和主副本之间的网络可能会中断
- disconnected sites see no further updates 断开连接的站点没有进一步的更新
- other sites don’t see updates by disconnected site 其他网站看不到断开连接的网站的更新
Intense read-and write-sharing across sites 跨站点的密集读写共享
多个站点之间频繁对同一批数据进行读取和写入操作(比如多个节点共享一份核心数据,且都需要频繁读写)
- generates huge amount of cache propagation traffic 产生大量的缓存传播流量
由于要保持各个站点数据一致性(一个站点修改了数据,其他站点的缓存也必须同步更新),频繁的读写会导致大量缓存同步数据在站点之间传输,产生巨大的传播流量。
- interconnect becomes bottleneck for cache access 互连成为缓存访问的瓶颈
站点之间的连接(如网络链路、内部通信通道)会因为大量同步流量被占满,称为缓存访问的瓶颈。
- neither writer-bias(write-back) nor reader-bias(write-through) helps
写偏见(回写)和读者偏见(直写)都无济于事
write-back : 指缓存修改后不立即同步到主存,等空闲时批量写入。
write-through: 修改缓存时立即同步到主存。
如果大量的同步流量被占满,write-back 会导致同步延迟引发数据的不一致。而 write-through则会瞬间产生大量同步请求。
- caches effectively useless 缓存实际上无用
缓存本应通过“本地存储热点数据” 提升效率,但在这种场景(指的是跨站点的密集读写)下,缓存不仅无法提速,甚至可能因同步开销拖慢整体效率,也就相当于缓存失去了作用,
1. Broadcast Invalidations
广播无效
Basic Idea
Every potential caching site notified on every update 每次更新时,所有可能的缓存站点都会收到通知
- No check to verify caching site actually contains object 不检查和验证站点是否包含该对象
发送广播前,无论缓存站点是否缓存了该对象,
- Notification includes specific object being invalidated - 通知包括被失效的特定对象
通知中明确标注失效的具体对象
- Effectively broadcast of address being modified 有效广播正在修改的地址
告知所有缓存站点 这个地址的数据已变,如果你们的缓存如果有该对象,就不能使用了
At each cache site , next reference to object will cause a miss 在每个缓存站点,下次访问该对象时会触发缓存未命中
CPU 缓存一致性设计(MESI)就是如此。MESI 不仅可以广播失效还可以传输新的值。 总线传播比网络传播要更可靠、更快速(不是一个量级)。
广播的速度是一个显著的瓶颈。
广播失效机制在适度规模的硬件中表现优异。
Strengths 优势
- very strict emulation of “one-copy” semantics 非常严格地模拟 "单拷贝 "语义
- no race conditions if updater blocked until all caches invalidated 如果更新程序在所有缓存失效前被阻止,则不会出现竞争条件
- simple to implement
Limitations 缺点
- wasted traffic if no readers elsewhere 如果其他地方没有读者,就会浪费流量
如果缓存中的值广播失效,而没有读取者,则浪费了同步所需的流量
- updating process blocked until invalidation complete 更新过程受阻,直至失效完成
(更新者被阻塞至所有缓存失效)的机制,会让更新者在完成 “所有缓存站点确认失效该数据” 前,
不允许后续操作(包括自身的后续修改或其他节点的读取)继续 。
- not a scalable design 不是可扩展性的设计
2. Check on Use
Basic Idea
- reader checks master copy before each use 读者在每次使用之前检查主副本
conditional fetch , if cache copy stable 有条件的获取,如果缓存复制稳定
- has to be done at coarse granularity(e.g. entire file or large block) 必须在粗粒度(例如整个文件或大块)上完成
otherwise every read is slowed down excessively 否则每次读取都会过慢
- at whole file granularity → “session semantics” 当以整个文件为粒度 → 会话语义
open{read|write} close → “session”
approximation to strict one-copy semantics at bit-granularity 对位粒度的严格单副本语义的近似
读取前检查主副本,缓存有效则直接使用。
无需实时同步每一个细小修改,只需在 “打开 / 关闭” 时同步一次,既能保证 “会话内操作的一致性”(本地副本稳定),又避免了频繁检查主副本的开销,因此是对 “严格单副本语义” 的高效近似 —— 用可接受的 “一致性延迟”(需重新打开才见新修改)换来了读写效率的提升。
会话语义 = “整个文件粒度 + 会话周期”
Advantages 优势
- strict consistency at coarse granularity 粗粒度的严格一致性
- easy to implement, no server state 易于实现,无需服务器状态
- servers don’t need to know of caching sites
Disadvantages
- slows read access on loaded servers & high-latency networks 在服务器负载较高或网络延迟较大的场景中,会显著减慢读取访问的速度
- check is almost always success - > frivolous traffic 检查几乎总是成功的 ->无意义流量
—由于检查结果 “几乎总是成功”(即缓存副本与主副本一致),这类检查会产生大量 “无意义的流量”
- load on network and server
“Up to date” is relative to network latency "最新 "是相对于网络延迟而言的

因为没有锁定机制,在延迟高的客户端可能出现图中情况
Q:如果client 在本地访问并修改了一个文件,随后尝试将其发送到服务器,但此时文件已不再是最新版本,客户端该如何处理该文件?
A:在现今的系统中,如这里描述,它会毫不犹豫的覆盖那个文件。
Callback
Basic Idea
- targeted notification of caching sites 缓存站点的有针对性的通知
- master copy tracks sites with cached data 主副本跟踪具有缓存数据的站点
- typically done at coarse granularity(e.g. entire file) 通常以粗粒度完成(例如整个文件)
can be made to work with byte ranges
- on update ,all sites with cached data notified(”callback”) 更新时,通知所有具有缓存数据的站点(“回调”)
Advantages
- excellent scalability for Unix workloads 对 Unix 工作负载具有出色的可扩展性
- zero network traffic for read of cached-valid objects 读取缓存有效对象时网络流量为零
- precursor to caching for disconnected operation 断开操作缓存的先驱
- biases read performance in favor of write-performance 读取性能偏向于写入性能
Disadvantages
- sizable state on server 服务器上有大量状态
- complexity of tracking cached state on clients 客户端跟踪缓存状态的复杂性
- silence ambiguous for client
network failure →lost callbacks
periodic “keepalive” probes
data cloud be stale between probes
- NAT networks with masquerading firewalls
论文:Scale and performance in a distributed file system
虽然课上教授讲的大多都以分布式文件系统为案例,但是也可以借鉴到以“小数据”缓存的案例上,需要自己发挥独立思考。
缓存不止是Redis这样的中间件,还包括 CPU cache line ,磁盘页缓存,buff pool 、 local cache 、http cache 、CDN cache等等。
- Author:newrain-zh
- URL:https://alex.sh.cn/article/cmu-15-440/cache-3
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!