承载高并发的缓存技术究竟是什么?

网络
缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。那么缓存的运行逻辑是什么,以及缓存有哪些方案,将是本文的介绍重点。

作者 | 金鹏,单位:中国移动智慧家庭运营中心

​Labs 导读

缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。那么缓存的运行逻辑是什么,以及缓存有哪些方案,将是本文的介绍重点。

缓存(Cache)是将目标数据存储到一个具备高度可访问性的高速运行层的技术。它旨在快速读取使用率较高的、不经常更新的数据,避免在存取之前的请求重复访问源数据层,产生额外的I/O资源消耗,继而提升业务的并发度。为了提升数据访问的运行速率,缓存数据也要权衡资源容量、数据刷新频率设置过期时间或设置合理的缓存淘汰策略。主流的缓存方案有CDN缓存、浏览器缓存、本地缓存、外部缓存等。

Part 01  CDN缓存 

CDN指的是内容分发网络,将资源缓存在CDN节点上,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近去CDN缓存节点上获取内容,降低网络延迟,提高访问速度。运用到此项缓存技术的业务场景有:前端项目中的HTML、CSS、JS等静态文件、物联网中下载固件包、异地多活架构中的资源请求等等。将这些文件部署或缓存在CDN节点上,提升资源访问速度的同时又保证资源访问的稳定性。

Part 02  浏览器缓存 

浏览器缓存是指浏览器与后端服务器通过HTTP协议下的请求-响应模式来通信时,第一次向服务器发送请求并拿到结果后,会根据响应报文中的缓存规则来实现缓存。比如HTTP/1.1协议下会根据Cache-Control实现强制缓存规则;会在强制缓存失效下根据请求中的缓存标识决定缓存规则。浏览器会话持也是一种缓存实现,目前主流的技术方案有Cookie机制、Session机制、Token机制等。

图片

Part 03  本地缓存 

本地缓存是指将响应数据缓存在服务器的应用进程内存空间里,减少查询持久化层的I/O消耗。优点是数据不需要跨网络传输,读取性能更好,支持的QPS更高;缺点是会占用应用进程的内存空间,故不能进行大数据量的数据存储,而且当所在的应用进程重启时,本地缓存的数据会丢失。在Andlink云平台项目中落地的本地缓存解决方案Caffeine,它的依赖包如下:

<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>${caffeine.version}</version>
</dependency>

Part 04 外部缓存或分布式缓存

与本地缓存相对应的就是外部缓存或分布式缓存,它独立于应用进程部署,并可以设计成集群模式来保证数据读写分离、高性能、高可用。Andlink云平台项目中落地的分布式缓存是基于Spring Boot Cache框架整合Redis集群的方案,该方案可以很好的解决数据丢失、业务并发能力、故障恢复和动态存储扩容等常见业务痛点。结合业务的需求Redis提供了比较全的应对方案,比如单机模式、主从模式、集群模式或哨兵模式,其中哨兵模式可以实现健康检测和自动恢复,是保障高并发业务稳定运作的首选模式。方案的依赖包如下:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<version>${redis.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
<version>${cache.version}</version>
</dependency>

当然,主流的缓存技术方案有很多,但总的方向是为了减少底层性能开销、提高业务的高并发能力。目前Andlink云平台支撑着亿级的用户量和千万级的设备请求等,缓存技术在其中扮演着举足轻重的角色。​

责任编辑:未丽燕 来源: 移动Labs
相关推荐

2012-05-28 22:49:50

PureView

2011-02-16 16:13:40

Debian

2015-08-26 09:54:19

物联网

2018-09-10 13:47:21

数据科学统计学决策

2015-09-29 09:47:14

2019-05-27 15:30:44

Node.jsJavaScript前端

2011-08-04 13:24:28

IT运维

2022-06-13 09:51:35

UWB超宽带无线载波通信技术

2020-07-08 08:09:08

边缘计算边缘云云平台

2018-07-05 16:15:26

缓存数据cache miss

2014-08-07 10:32:02

Windows微软

2009-07-30 14:43:30

认识BSM

2014-07-28 08:28:38

Windows

2021-08-09 05:19:08

Provider 前端前端代码

2012-09-17 09:52:20

云计算云存储公有云

2010-03-19 17:30:18

云计算

2020-12-17 17:33:47

MLOps大数据数据

2019-09-29 19:12:13

区块链密码学技术零知识证明

2022-04-02 17:20:00

微前端应用技术

2015-06-04 10:26:50

点赞
收藏

51CTO技术栈公众号