写点什么

第五周总结

用户头像
秦宝齐
关注
发布于: 2020 年 07 月 08 日

分布式缓存架构

缓存是什么?

什么是缓存?缓存是存储在计算上的一个原始数据复制集,以便于访问。

缓存是数据访问者和数据源之间的一种高速存储,当数据需要多次读取的时候,用于加快读取的速度。


缓存有哪些应用?

CPU 缓存

操作系统缓存

数据库缓存

JVM 编译缓存


CDN 缓存

代理与反向代理缓存

前端缓存

应用程序缓存

分布式对象缓存


缓存的指标

缓存命中率:缓存是否有效依赖于能多次重用同一个缓存响应业务请求,这个度量指标被称为缓存命中率

影响缓存命中率的因素:

  • key 大小

  • 缓存可用内存空间

  • 缓存对象生命周期

缓存两种形式

  • 通读缓存(read-through)

代理缓存、反向代理缓存、CDN 都是通读缓存,通读缓存给客户端返回缓存资源,并在未命中缓存时获取实际数据,客户端连接的是通读缓存而不是生成响应的原始服务器

  • 旁路缓存(cache-aside)

对象缓存是一种旁路缓存,旁路缓存是一个独立的 key-value 存储。应用代码通常会访问

if cache.contains(key){

return cache.get(key)

}else{

value:=datasource.get(key)

cache.put(key,value)

return value

}

浏览器对象缓存:localstorage,应用程序缓存:进程内 memory

远程分布式对象缓存

一致性 hash,hash 环+虚拟节点(再次印证计算机科学领域的问题都可以通过增加一个虚拟层来解决,烧烤!?)


各种介质数据访问延迟


技术栈各层次缓存

缓存为什么能显著提升性能

  • 速度快

  • 无需计算,减少 cpu 使用

  • 分担数据库、磁盘、网络的负载压力,使其有更好的响应性

缓存为何百试不爽?

  • 简单

  • 性能提升显著

  • 场景多

使用缓存的条件

  • 适合读多写少的数据,读写比大于 2:1 才有意义

  • 有热点访问

  • 具备一定的不一致的耐受性

使用缓存需面对的问题

  • 缓存雪崩

  • 缓存预热

  • 缓存穿透

Redis 集群

  • redis 集群预先分好 16384 个桶,put 时 CRC16(key)mod 16384,决定桶

  • 物理节点映射到[0-16384]上,cluster 维护映射关系

  • 客户端与 redis 节点直连,无需连接所有节点,只连接任何一个可用节点

  • 所有 redis 节点彼此互联


用户头像

秦宝齐

关注

还未添加个人签名 2020.03.26 加入

还未添加个人简介

评论

发布
暂无评论
第五周总结