服务端应用多级缓存架构方案 | 京东云技术团队
一:场景
20w的QPS的场景下,服务端架构应如何设计?
二:常规解决方案
可使用分布式缓存来抗,比如redis集群,6主6从,主提供读写,从作为备,不提供读写服务。1台平均抗3w并发,还可以抗住,如果QPS达到100w,通过增加redis集群中的机器数量,可以扩展缓存的容量和并发读写能力。同时,缓存数据对于应用来讲都是共享的,主从架构,实现高可用。
三:如何解决缓存热点(热key)问题
但是如果出现缓存热点,比如10w流量来自同一个key,打到同一个redis实例,那么就有可能出现CPU被打满,这种增加redis集群数量解决不了问题。
本地缓存可以解决热key问题,主要原因是本地缓存可以避免redis单台缓存服务器的高负载。通过复制多份缓存副本,将请求分散到多个缓存服务器上,可以减轻缓存热点导致的单台缓存服务器压力。此外,本地内存缓存也具有更快的访问速度,因为数据存储在应用程序的内存中,无需跨网络传输数据。
四:通用多级缓存方案
请求优先打到应用本地缓存,本地缓存不存在,再去r2m(redis)集群拉取,同时缓存到本地
五:多级缓存同步方案
1 运营后台保存数据,写入r2m缓存,同时通过redis的发布订阅功能发布消息
2 本地应用集群作为消息订阅者,接受消息后,删除本地缓存,C端流量请求打过来的时候,如果本地缓存不存在,则将r2m中缓存加载到本地缓存。
3 定时任务是防止极端情况下,r2m缓存失效,将数据重新加载到r2m缓存。
六:缓存同步组件选型
采用redis的发布订阅。
Redis的发布订阅模式是推模式。在Redis中,SUBSCRIBE命令用于订阅一个或多个频道,以便在有消息发布到这些频道时接收通知。PUBLISH命令用于向一个或多个频道发布消息。当有消息发布到某个频道时,所有订阅该频道的客户端都会收到该消息。在推模式下,每个频道维护一个客户端列表,发送消息时遍历该列表将消息推送给所有订阅者。拉模式则相反,发送者将消息放到一个邮箱中,所有订阅这个邮箱的客户端可以在任意时刻去收取。确保所有客户端都成功收取完整的邮件后,才删除该邮件。
Redis的发布订阅是异步的。当有消息发布到某个频道时,Redis会异步地将消息推送给所有订阅该频道的客户端。这意味着,客户端不会阻塞等待消息,而是继续执行其他任务,直到需要接收消息时才会去获取。这种异步方式可以提高系统的并发性和效率。
七:使用本地缓存注意事项
1 本地缓存占用java进程的jvm内存空间,故不能进行大数据量存储,需要进行缓存大小评估。
2 业务能接受短暂数据的不一致,更适用于读场景。
3 缓存更新策略,主动更新和被动更新,本地缓存一定要设置有效期
4 定时任务同步缓存机制,根据业务情况考虑极端情况数据丢失
5 rpc调用避免本地缓存污染,可通过深拷贝解决。
6 本地缓存随着应用重启而失效,注意加载分布式缓存时机
7 redis的pub,sub模式更新缓存策略(删除本地缓存key,避免在pub,sub模式下传递大value,pub,sub模式不会持久化消息数据,导致消费者对应redis的缓冲区超限,从而导致数据丢失),本地缓存失效时,加锁synchronized,由一个线程加载r2m缓存,避免并发更新。
备注:r2m底层由redis实现。
作者:京东科技 张石磊
来源:京东云开发者社区

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
一次元数据空间内存溢出的排查记录 | 京东云技术团队
在应用中,我们使用的SpringDataES的ElasticsearchRestTemplate来做查询,使用方式不对,导致每次ES查询时都新实例化了一个查询对象,会加载相关类到元数据中。最终长时间运行后元数据出现内存溢出; 问题原因:类加载过多,导致元数据OOM。非类实例多或者大对象问题; 排查方式: 查看JVM运行情况,发现元数据满导致内存溢出; 导出内存快照,通过OQL快速定位肇事者; 排查对应类的使用场景和加载场景(重点序列化反射场景); 起源 06-15 下午正摩肩擦掌的备战着晚上8点。收到预发机器的一个GC次数报警。 【警告】UMP JVM监控 【警告】异步(async采集点:async.jvm.info(别名:jvm监控)15:42:40至15:42:50【xx.xx.xx.xxx(10174422426)(未知分组)】,JVM监控FullGC次数=2次[偏差0%],超过1次FullGC次数>=2次 【时间】2023-06-15 15:42:50 【类型】UMP JVM监控 第一时间诧异了下。该应用主要作用是接MQ消息和定时任务,同时任务和MQ都和线上做...
- 下一篇
【ACL 2023】面向轻量化文图检索的Dual-Encoder模型蒸馏算法ConaCLIP
近日,阿里云机器学习平台PAI与华南理工大学金连文教授团队合作在自然语言处理顶级会议ACL 2023上发表面向轻量化文图检索的dual-encoder模型蒸馏算法ConaCLIP( fully-Connected knowledge interaction graph for CLIP)。ConaCLIP针对轻量化的图文检索任务进行设计,是一种通过全连接的知识交互图学习方式将知识从dual-encoder大模型中蒸馏到dual-encoder小模型的算法。 论文: Jiapeng Wang, Chengyu Wang, Xiaodan Wang, Jun Huang, Lianwen Jin. ConaCLIP: Exploring Distillation of Fully-Connected Knowledge Interaction Graph for Lightweight Text-Image Retrieval. ACL 2023 (Industry Track) 背景 文本-图像检索(Text-Image Retrieval)的目的是在给出一个特定的文本查询时,从一个大型...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS关闭SELinux安全模块
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Linux系统CentOS6、CentOS7手动修改IP地址