架构师训练营 W5 学习总结
分布式缓存
什么是缓存
缓存是一种位于数据访问者和数据源之间的一种高速存储,当数据需要需要多次读取的时候,用以加快读取的速度。
缓存常用 Hash 表作为实现的数据结构。
缓存的种类
代理缓存
反向代理缓存
多层反向代理缓存
CDN
Read-through Cache 通读缓存
缓存未命中时,由通读缓存连接到后端读取数据,客户端只与缓存连接
Cache-aside 旁路缓存
旁路缓存通常是一个独立的 k-V 存储
app 通常会询问 cache-aside 要访问的数据是否存在。如果不存在,app 直接访问主数据源,并将结果保存回 cache-aside 以供后续使用。
浏览器对象缓存
本地对象缓存
远程分布式对象缓存
Consistent Hashing 算法
解决分布式系统数据分布的问题
减轻了分布式系统水平扩容时的数据迁移问题
使用虚拟节点解决数据分布不均衡的问题
常用的存储介质的数据访问延迟
缓存为什么能提升系统性能:
通常来自内存
存储的是数据的最终形式,不需要计算
降低了 DB,磁盘,网络压力
合理地使用缓存:
频繁修改的数据不适合放在缓存,数据一般读写比例在 2:1 以上才有意义
要有热点数据,内存资源宝贵,不可能将所有数据放进缓存
应用要可以容忍一定程度的数据不一致
缓存雪崩
当缓存系统失效的时候,所有的请求瞬间流进 DB,DB完全不能承受巨大的压力宕机。
缓存预热
热点数据需要缓存利用 LRU 算法对不断访问的数据筛选出来,这个过程需要花费一段时间。在这段时间内,系统的性能和数据库的负载都不太好。最好在缓存系统启动之后,把一些热点数据加载进来。
缓存穿透
有攻击恶意访问不存在的缓存,所有的请求都落到了 DB 上。简单的对策就是将不存在的数据之间也缓存起来。
消息队列
异步调用,不阻塞应用线程。
2种模型
点对点
每个消息只被消费一次
Publish-subscribe
每个订阅者都会收到其订阅的 topic 的每条消息
好处
异步处理请求,不阻塞应用线程,提升系统性能
伸缩性好,消费者可以根据自己的消费能力,队列的消息量,动态的调节消费者的实例数量
削峰填谷。将高峰时间累积的海量请求,分到低谷时期在处理,防止海量请求压垮系统
模块之间解耦,生产者,消费者之间互不影响
负载均衡
种类
HTTP 重定向负载均衡
DNS 负载均衡
反向代理负载均衡
IP 负载均衡 (3层)
数据链路层负载均衡(2层)
分布式数据库
一主多从
主主复制
数据分片
版权声明: 本文为 InfoQ 作者【Kun】的原创文章。
原文链接:【http://xie.infoq.cn/article/6633b934052f38db930cc62f4】。未经作者许可,禁止转载。
评论