作者 | 金鹏,单位:中国移动智慧家庭运营中心
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,它的依赖包如下:
Part 04 外部缓存或分布式缓存
与本地缓存相对应的就是外部缓存或分布式缓存,它独立于应用进程部署,并可以设计成集群模式来保证数据读写分离、高性能、高可用。Andlink云平台项目中落地的分布式缓存是基于Spring Boot Cache框架整合Redis集群的方案,该方案可以很好的解决数据丢失、业务并发能力、故障恢复和动态存储扩容等常见业务痛点。结合业务的需求Redis提供了比较全的应对方案,比如单机模式、主从模式、集群模式或哨兵模式,其中哨兵模式可以实现健康检测和自动恢复,是保障高并发业务稳定运作的首选模式。方案的依赖包如下:
当然,主流的缓存技术方案有很多,但总的方向是为了减少底层性能开销、提高业务的高并发能力。目前Andlink云平台支撑着亿级的用户量和千万级的设备请求等,缓存技术在其中扮演着举足轻重的角色。