架构师训练营 W5 学习总结

用户头像
Kun
关注
发布于: 2020 年 07 月 08 日
架构师训练营 W5 学习总结

分布式缓存



什么是缓存

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



缓存常用 Hash 表作为实现的数据结构。



缓存的种类

  • 代理缓存

  • 反向代理缓存

  • 多层反向代理缓存

  • CDN



Read-through Cache 通读缓存

缓存未命中时,由通读缓存连接到后端读取数据,客户端只与缓存连接



Cache-aside 旁路缓存

旁路缓存通常是一个独立的 k-V 存储

app 通常会询问 cache-aside 要访问的数据是否存在。如果不存在,app 直接访问主数据源,并将结果保存回 cache-aside 以供后续使用。



  • 浏览器对象缓存

  • 本地对象缓存

  • 远程分布式对象缓存

Consistent Hashing 算法

  • 解决分布式系统数据分布的问题

  • 减轻了分布式系统水平扩容时的数据迁移问题

  • 使用虚拟节点解决数据分布不均衡的问题



常用的存储介质的数据访问延迟



缓存为什么能提升系统性能:



  1. 通常来自内存

  2. 存储的是数据的最终形式,不需要计算

  3. 降低了 DB,磁盘,网络压力



合理地使用缓存:

  1. 频繁修改的数据不适合放在缓存,数据一般读写比例在 2:1 以上才有意义

  2. 要有热点数据,内存资源宝贵,不可能将所有数据放进缓存

  3. 应用要可以容忍一定程度的数据不一致



缓存雪崩



当缓存系统失效的时候,所有的请求瞬间流进 DB,DB完全不能承受巨大的压力宕机。



缓存预热



热点数据需要缓存利用 LRU 算法对不断访问的数据筛选出来,这个过程需要花费一段时间。在这段时间内,系统的性能和数据库的负载都不太好。最好在缓存系统启动之后,把一些热点数据加载进来。



缓存穿透



有攻击恶意访问不存在的缓存,所有的请求都落到了 DB 上。简单的对策就是将不存在的数据之间也缓存起来。



消息队列



异步调用,不阻塞应用线程。



2种模型

  • 点对点

每个消息只被消费一次

  • Publish-subscribe

每个订阅者都会收到其订阅的 topic 的每条消息



好处

  • 异步处理请求,不阻塞应用线程,提升系统性能

  • 伸缩性好,消费者可以根据自己的消费能力,队列的消息量,动态的调节消费者的实例数量

  • 削峰填谷。将高峰时间累积的海量请求,分到低谷时期在处理,防止海量请求压垮系统

  • 模块之间解耦,生产者,消费者之间互不影响



负载均衡

种类

  • HTTP 重定向负载均衡

  • DNS 负载均衡

  • 反向代理负载均衡

  • IP 负载均衡 (3层)

  • 数据链路层负载均衡(2层)



分布式数据库

  • 一主多从

  • 主主复制

  • 数据分片

发布于: 2020 年 07 月 08 日 阅读数: 29
用户头像

Kun

关注

Life is short. 2018.01.13 加入

Software Developer

评论

发布
暂无评论
架构师训练营 W5 学习总结