进程内缓存使用技术方案

前言

计算和数据交互在高并发系统中,往往存在很大的访问压力和通信代价。

数据和计算离得越近,这个代价就越小,所以引入单机进程内缓存可以大大提高访问效率。

进程内缓存可以采用带锁的Map或者第三方库,或者自己实现进程内缓存管理,如ConcurrentHashMap,ThreadLocal,guava cache等。

进程内缓存,相比较分布式缓存,可以减轻分布式缓存服务器的访问压力,同时进程内访问,提高数据访问速度,降低系统时延。

但是进程内缓存的缺点是受限于单机内存,同时单机缓存的数据一致性维护也是一道难题,在分布式系统中很难维护缓存命中率,会造成一定的资源浪费。

分布式系统架构中的设计原则之一是:应用层,服务层需要做到无状态。 进程内缓存设计则和这一原则相背。 如果是非高并发系统不建议采用此方案。

方案

RPC通信

进程内缓存的维护,可以基于RPC服务进行数据通知,多个单机服务接收到RPC请求后维护自身进程内缓存,方案的缺点显而易见,一旦通知失败,将会造成局部机器缓存数据不一致问题。

MQ通信

类似于第一个方案,引入MQ方式后,可以基于MQ的持久化及可靠性机制进行进程内缓存更新,但是并没有从根本上解决单机缓存一致性问题,同时引入MQ造成系统复杂度提升。

进程主动拉取

单机节点定时主动拉取数据,定期更新进程内数据,此方案可以解决上述的局部单机数据不一致问题,同时降低了数据更新复杂度,但是在定时更新时间窗口内,应用可能使用到脏数据问题,无法保证数据更新的实时性。

具体采用哪种方式需要结合系统对于一致性,实时性,时间窗口等特点进行针对性设计。

场景

缓存数据本身有期使用特点,如数据只读,数据更新频繁,数据一致性要求高等特点。

只读数据

只读数据我们只需要将其加载到进程内即可,不用担心脏数据问题,无需维护其数据一致性。 我们可以在系统启动时进行数据拉取放入进程内。

高并发要求

进程内缓存可以作为高并发场景下对于集群压力保护的第一道闸门,抵挡一部分流量,但是在数据一致性,集群稳定性,业务压力预估,运营策略等多角度评估系统负载能力。

允许一定数据不一致

上面几种进程内缓存方案都会面对不同数据不一致问题,理论上业务系统一般不会有极强一致的数据一致性要求,所以进程内缓存数据通过定时更新拉取进行数据同步,可以满足大部分业务系统的需求。

原文发布于微信公众号 - 服务端技术杂谈(develop_king)

原文发表时间:2018-09-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏诸葛青云的专栏

这份Python标准异常表 你应该了解!

异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示...

4600
来自专栏about云

构建高并发高可用的电商平台架构实践1

问题导读: 1.如何构建高并发电商平台架构 2.哈希、B树、倒排、bitmap的作用是什么? 3.作为软件工程师,该如何实现读写? 4.如何实现负载均衡、反向代...

488100
来自专栏张伟博客

windows 内外网都能ping通却无法上网的解决方法

21060
来自专栏领域驱动设计DDD实战进阶

领域驱动设计之聚合与聚合根实例二

37350
来自专栏大数据和云计算技术

高速数据总线kafka介绍

1. Kafka的作用 在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。有没有一个系统可以同时...

49940
来自专栏架构师之路

服务读写分离(读服务,写服务),是否可行?

系统分层架构有一个迭代和演进的过程,早期,系统分层架构如下: ? 上游是需要数据的业务调用方 下游是存储数据的数据库 随着架构的演进,可能要抽取出服务层(详见《...

40260
来自专栏web前端教室

【视频5分钟】如何保持不同页面间的统计数据一致性?

温馨提示:视频请点此观看 // 视频原文: 为了更好的掌握用户的需求,我们经常需要统计: 1、统计用户在站点的停留时长 2、收集页面链接的点击数量等 3、统...

217100
来自专栏应兆康的专栏

Processon 免费在线流程图

55260
来自专栏Java成神之路

Java企业微信开发_07_总结一下企业微信的配置

13720
来自专栏程序员互动联盟

【答疑解惑第九讲】如何在linux下面编译一个简单的c语言程序

存在问题: 习惯了用IDE,习惯了点击执行按钮。在linux就不能这样了,该咋办? 解决方案: 随着android的大热,在linux下搞开发的人也越来越多,好...

391110

扫码关注云+社区

领取腾讯云代金券