缓存,原来我们一直都用错了!

缓存,是互联网分层架构中,非常重要的一个部分,通常用它来降低数据库压力,提升系统整体性能,缩短访问时间
 
有架构师说“缓存是万金油,哪里有问题,加个缓存,就能优化”,缓存的滥用,可能会导致一些错误用法。
 
4类缓存常见误用,你中招了吗?
 
误用一:把缓存作为服务与服务之间传递数据的媒介。
缓存,原来我们一直都用错了!
如上图:
(1)服务1和服务2约定好key和value,通过缓存传递数据;
(2)服务1将数据写入缓存,服务2从缓存读取数据,达到两个服务通信的目的;
 
该方案存在的问题是:
(1)数据管道,数据通知场景,MQ更加适合;
(2)多个服务关联同一个缓存实例,会导致服务耦合;
误用二:使用缓存未考虑雪崩。
缓存,原来我们一直都用错了!
常规的缓存玩法,如上图:
(1)服务先读缓存,缓存命中则返回;
(2)缓存不命中,再读数据库
 
什么时候会产生雪崩?
如果缓存挂掉,所有的请求会压到数据库,如果未提前做容量预估,可能会把数据库压垮(在缓存恢复之前,数据库可能一直都起不来),导致系统整体不可服务。
 
如何应对潜在的雪崩?
提前做容量预估,如果缓存挂掉,数据库仍能扛住,才能执行上述方案。
 
否则,就要进一步设计,更具体的,有两类常见方案。
 
方案一:高可用缓存
缓存,原来我们一直都用错了!
如上图:使用高可用缓存集群,一个缓存实例挂掉后,能够自动做故障转移。
 
方案二:缓存水平切分
缓存,原来我们一直都用错了!
如上图:使用缓存水平切分,一个缓存实例挂掉后,不至于所有的流量都压到数据库上。
 
误用三:调用方缓存数据。
缓存,原来我们一直都用错了!
如上图:
(1)服务提供方缓存,向调用方屏蔽数据获取的复杂性(这个没问题);
(2)服务调用方,也缓存一份数据,先读自己的缓存,再决定是否调用服务(这个有问题);
 
该方案存在的问题是:
(1)调用方需要关注数据获取的复杂性;
(2)更严重的,服务修改db里的数据,淘汰了服务cache之后,难以通知调用方淘汰其cache里的数据,从而导致数据不一致;
(3)有人说,服务可以通过MQ通知调用方淘汰数据,额,难道下游的服务要依赖上游的调用方,分层架构设计不是这么玩的;
 
误用四:多服务共用缓存实例。
缓存,原来我们一直都用错了!
如上图:
(1)服务A和服务B共用一个缓存实例(不是通过这个缓存实例交互数据);
 
该方案存在的问题是:
(1)可能导致key冲突,彼此冲掉对方的数据;
画外音:可能需要服务A和服务B提前约定好了key,以确保不冲突,常见的约定方式是使用namespace:key的方式来做key。
(2)不同服务对应的数据量,吞吐量不一样,共用一个实例容易导致一个服务把另一个服务的热数据挤出去;
(3)共用一个实例,会导致服务之间的耦合,与微服务架构的“数据库,缓存私有”的设计原则是相悖的;
 
建议的玩法是:
缓存,原来我们一直都用错了!
如上图:各个服务私有化自己的数据存储,对上游屏蔽底层的复杂性。
 
总结
缓存使用小技巧:
(1)服务与服务之间不要通过缓存传递数据;
(2)如果缓存挂掉,可能导致雪崩,此时要做高可用缓存,或者水平切分;
(3)调用方不宜再单独使用缓存存储服务底层的数据,容易出现数据不一致,以及反向依赖;
(4)不同服务,缓存实例要做垂直拆分;
这些坑,你踩过吗?
架构师之路-分享可落地的技术文章
相关文章
架构师之路,20年干货精选

发布者:糖太宗,转载请注明出处:https://www.qztxs.com/archives/science/technology/5811

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年5月10日 下午10:20
下一篇 2022年5月10日 下午10:21

相关推荐

  • 我C,MySQL双主架构,原来能这么玩

    经常有朋友问,MySQL双主的一致性问题,今天简单聊一聊。   MySQL为什么要使用双主架构? MySQL最常见的集群架构,是一主多从,主从同步,读写分离的架构。通过这种方式,能够扩充数据库的读性能,保证读库的高可用,但此时写库仍然是单点。   为了保证MySQL写库的高可用,可以在一个MySQL数据库集群中可以设置两个主库,并设置双向同步,以冗余写库的方...

    2022年5月14日
    1800
  • Linux虚拟屏幕Xvfb的介绍

    Xvfb是流行的虚拟现实库,可以使很多需要图形界面的程序虚拟运行; 使用原因 淘宝列表页爬取经常会跳滑动验证码,需要使用puppeteer控制浏览器模拟人工滑动,而在无头模式下,无论怎么滑动都无法通过,必须使用有头模式,而CentOS服务器上没有界面,所以只能使用虚拟屏幕,使浏览器运行在虚拟屏幕上。 安装及使用 # 安装 yum install Xvfb #...

    技术 2022年5月7日
    58900
  • HTTPS 安全最佳实践(转发)

    0x00 前言 SSL/TLS 是一种简单易懂的技术,它很容易部署及运行。但想要部署的安全通常是不容易的。这也使系统管理员和开发者不得不去了解 SSL 和 TLS 相关的技术,掌握如何配置一个安全的 web 服务器或应用。无疑会耗费很大的精力去看相关的技术文档,乏味且宽泛。 本篇文档的目的在于如何让系统管理员或开发者用尽可能少的时间部署一个安全的 web 站...

    技术 2022年6月1日
    5700
  • 旁路监控

    常见的网络监控模式可以分为两种:一种是旁路监控模式,另一种是串联监控模式。 “旁路监控模式”一般是指通过交换机等网络设备的“端口镜像”功能来实现监控,在此模式下,监控设备只需要连接到交换机的指定镜像端口,所以形象的称之为“旁路监控”。 而串联模式一般是通过网关、网桥或者代理服务器的模式来进行监控,由于监控设备做为网关或者网桥串联在网络中,所以称之为“串联监控...

    技术 2022年5月28日
    14800
  • xhs某书shield逆向破解(一) | 寻找Native函数

    shield是xhs请求header中的一个加密参数,具体算法是在so中计算的,so文件是libshield.so。我这边主要就讲一下如何利用unidbg调用so生成shield参数。因篇幅可能较长,这篇文章就讲下如何找到Native函数和函数所对应的偏移位置。 一、寻找Native函数 老规矩,首先反编译apk后用JD-GUI工具打开(也可使用jadx等工...

    2022年6月2日
    58600

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信