APP下载

高并发缓存机制的改进

2019-05-10肖剑伟广东省科技职业技术学校

数码世界 2019年4期
关键词:双极线程分布式

肖剑伟 广东省科技职业技术学校

目的

通过减少耗时的数据库数据访问,增加在缓存上分发数据达到高并发的数据请求需求。

整体架构图:

方案介绍:

1.从整体架构图可以看出,一个整体的架构需要多个架构层组成,而所有的架构组织都是为了系统的健壮性,可拓展性来设计。但是,这上面的架构也并不是适用所有的业务系统,这里只是方便理解,不做专门的分析,我们重点介绍缓存机制的改进。

2.对并发处理有过相关经验的人都知道,使用缓存机制一般都会使用到ehCache(本地缓存),redis(分布式缓存)等工具来实现,本文将以Java语言来进行描述,而对于哪一种方案的实现都会根据自有的业务来进行选择,其中ehCache本地缓存比较多的是用在实时性要求不高,处理速度要求却比较高的情况;redis分布式缓存则在实时性要求相对来说会比较高,而处理速度会由于网络带宽或者其他因素导致速度相对来说会慢一点。因此,可以把两种缓存机制加在一起,实现了二级缓存机制,也叫双极缓存机制。这样既提高了缓存速度,又提高了实时效应。

3.从上面架构图来看,双极缓存已经可以满足中型企业的数据访问需求了,一定程度上缓解了数据库的压力,在大部分企业上派得上用场,类似日活跃用户100万左右的企业应该是可以满足需求的。但是在超大型互联网企业中,日活跃用户超过上亿,例如BAT企业,他们这些企业在每秒钟的访问频率都是很惊人的几何级数增长。所以,当ehCache或者redis等数据超时的那一刻都会有庞大的数据穿透到数据库,给数据库造成极大的压力,甚至宕机(服务器不能正常工作)。在相同成本的情况下(指的是硬件设施相同),双极缓存仍然不能满足超大型企业的需求。因此,我们采用了“双极缓存+单点穿透”来实现缓存的无缝衔接,简称穿透式双极缓存。

4.穿透式双极缓存的原理是在数据访问缓存的时候,根据缓存的过期数据,让某一条线程去访问上一层服务器,其他线程保持不变,等该条线程返回的数据更新本地数据。例如:有一条数据通过ehcache的时候判断是否快到过期时间的某个数据,这时候会让这条数据去访问redis或者数据库、redis或者数据库返回的时候同时更新ehcache。逻辑图如下:

代码实现:

1.核心代码实现

说明:判断当前线程是否达到穿透的条件,如果满足条件,则线程单独访问分布式缓存并更新本地缓存,其他线程不做穿透、等该条缓存更新本地缓存后,所有的线程都访问同个数据。

2.ehCacheUtil

说明:封装EhCacheCacheManager类,实现本地缓存增删改查操作,并超时失效等。

3.RedisUtil

说明:封装RedisTempLate类,实现分布式缓存增删改查操作,并超时失效等。

4.jar包引用

说明:通过使用 maven引入第三部包

5 总结

该方案在本地缓存即将过期之前用单独一条线程重新拉取了最新数据,并更新了本地缓存的过期时间,既保证了数据的有效性,又确保了并发不会在同一时刻穿透上一层服务。因此,方案有效的解决了高并发,高实效的需求!

猜你喜欢

双极线程分布式
5G终端模拟系统随机接入过程的设计与实现
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
不同预处理方法对再生双极器械清洗效果研究分析
(i,k)-步双极单值中智竞争图
《思考心电图之171》
龙泉换流站极Ⅱ双极中性母线差动保护动作导致双极直流闭锁原因分析及整改
浅析分布式发电对电力系统的影响
基于预处理MUSIC算法的分布式阵列DOA估计
分布式并联逆变器解耦电流下垂控制技术