当前位置: 移动技术网 > 网络运营>服务器>Linux > 华为架构师与你一起探索高并发缓存架构(有示例代码)

华为架构师与你一起探索高并发缓存架构(有示例代码)

2020年07月23日  | 移动技术网网络运营  | 我要评论

华为架构师与你一起探索高并发缓存架构(有示例代码)

对于高并发的系统,所有的请求都打在数据库上是不明智的选择。一般的做法是通过缓存来缓解数据库的压力。缓存是用于解决高并发场景下系统的性能及稳定性问题的银弹。最主要的就是要考虑到缓存的穿透性和数据一致性问题。

先来看一个示例:

华为架构师与你一起探索高并发缓存架构(有示例代码)

这是一个简单应用缓存的示例,存在以下几个问题:

1:高并发的情况下,大部分请求会直接访问数据库。多线程的情况下,缓存还没及时写入,就会有大部分请求直接访问数据库。

2:业务逻辑与缓存之间解耦性太高。

先来解决第一个问题。就是利用锁的机制。但是要考虑加锁的地方,加的不对会导致性能问题,比如不能加到整个方法上。

华为架构师与你一起探索高并发缓存架构(有示例代码)

接下来解决第二个问题,这就是解耦问题,让别的人也可以轻松使用这个缓存方法。那就是使用模板设计模式,做一个缓存模板。

华为架构师与你一起探索高并发缓存架构(有示例代码)

调用方式:

华为架构师与你一起探索高并发缓存架构(有示例代码)

目前为止,是一个相对比较完美的方案了。

但是作为架构师,眼界还需要再开阔一下,那就是需要实现一个更加方便的架构供更多的人灵活调用。给大家提示一下,借鉴Spring cache的思想使用AOP + Annotation等技术实现缓存与业务逻辑的解耦。

大概的流程如下:

1 . 获取到拦截方法的 @Cache 注解,并生成缓存 key;

2 . 通过缓存 key,去缓存中获取数据;

3 . 如果缓存命中,执行如下流程:

  • 如果需要自动加载,则把相关信息保存到自动加载队列中;

  • 否则判断缓存是否即将过期,如果即将过期,则会发起异步刷新;

  • 最后把数据返回给用户。

4 . 如果缓存没有命中,执行如下流程:

  • 选举出一个 leader 回到数据源中去加载数据,加载到数据后通知其它请求从内存中获取数据(拿来主义机制);

  • leader 负责把数据写入缓存;如果需要自动加载,则把相关信息保存到自动加载队列中;

  • 最后把数据返回给用户。

华为架构师与你一起探索高并发缓存架构(有示例代码)

 

本文地址:https://blog.csdn.net/python8989/article/details/107487863

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网