浅谈分布式系统常用的缓存技术
28
星期四
2021年1月
验“金”室
缓存是分布式系统中的重要组件,主要用于解决高并发、大数据场景下热点数据访问的性能问题,实现数据快速访问。
Forrester2010年技术报告中提出了弹性缓存平台的概念,强调了缓存对于平台可扩展和高可用的重要性。Searchsoa研究认为,对于数据密集型的Web应用,如果失去了分布式缓存这一关键技术的支撑,云的潜能将变得十分有限。
一、缓存概述
缓存最初是用于加速CPU数据交换的随机存取存储器。从广义上理解,凡是位于速度相差较大的两种硬件/软件之间,用于协调两者数据传输速度差异的结构,均可称之为“缓存”。
缓存主要通过以下几种方式实现:将数据放到更快的存储中、将数据缓存置于离应用最近的位置、将数据缓存置于离用户最近的位置。
二、缓存的优势
随着业务访问量的不断上升,单纯通过提升系统性能已难以满足需求。内存的访问性能明显优于磁盘,把数据放入内存中,可以获得更快的读取效率,但是基于成本考虑,不可能把数据全部装入内存。大部分的业务场景适用“二八原则”,即80%的访问量都集中在20%的热数据上。因此,通过引入缓存组件,将高频访问的数据放入缓存中,可以大大提高系统整体的承载能力。
图1 二八原则
通过引入缓存,可以获得以下好处:
(1)高性能
存储相应数据以避免数据的重复创建、处理和传输,可有效提高性能。缓存不改变的数据,可以明显提高程序的反应速度。
(2)稳定性
当用户基数很大时,同一个应用对同一数据、逻辑功能和用户界面的请求并发度会急剧上升,如果对每次请求都进行处理,不仅造成资源的极大浪费,也会影响系统的稳定。缓存数据可以有效减少对应用服务的访问次数,减轻系统的负担,提高系统的服务能力。
(3)高可用
当后台服务意外停止时,如果使用了缓存技术,在一定时间内系统仍能正常提供对用户请求的响应,增强系统的可用性。
三、缓存的类型
在分布式系统中,缓存的应用非常广泛,最常用的缓存有浏览器缓存、内容分发网络(Content Delivery Network,CDN)缓存、反向代理缓存、应用本地缓存、分布式缓存五大类。
1.浏览器缓存
浏览器缓存对最近请求过的文档进行缓存,当访问者再次请求该页面时,浏览器就可以从缓存中取出文档,加速页面的阅览,节约网络资源。
图2 浏览器缓存
浏览器缓存策略分为两种:强缓存和协商缓存,并且缓存策略都是通过设置HTTP Header来实现的。强缓存策略下,浏览器不会向服务器发送请求,直接从缓存中读取资源;协商缓存策略下,浏览器携带缓存标识向服务器发起请求,服务器根据缓存标识决定是否使用缓存。
2.CDN缓存
CDN缓存的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
部署CDN后,请求直接由运营商网络响应,少了服务器节点,在降低服务器压力的同时,也极大地提高了系统的响应速度。
图3 CDN缓存
CDN具有本地缓存加速、镜像服务、远程加速、带宽优化、集群抗攻击等特点。
CDN一般用于缓存静态资源,通过设置缓存失效时间和数据版本号等手段,保证数据的一致性和实时性。当使用CDN缓存动态资源时,用户需要注意实时性问题。
3.反向代理缓存
图4 反向代理缓存
反向代理一般用于缓存静态资源,动态资源转发到应用服务器处理。常用的缓存应用服务器有Nginx、Varnish、Squid等。
4.应用本地缓存
分布式系统一般由多级缓存构成,应用本地缓存是指应用内部的缓存,它是离应用最近的缓存,一般可以将数据缓存到内存或硬盘。
图5 应用本地缓存
内存缓存是直接将数据存储到本机内存中,通过程序直接维护缓存对象,是访问速度最快的缓存方式。
硬盘缓存是将数据缓存到硬盘,读取时从硬盘读取,减少了网络传输消耗,比通过网络读取服务器的速度更快,适用于对速度要求不是很高但需要大量缓存存储的场景。
5.分布式缓存
分布式缓存由一个服务端实现管理和控制,有多个客户端节点存储数据,可以进一步提高数据的读取速率。分布式缓存能够高性能地读取数据、动态地扩展缓存节点、自动发现和切换故障节点、自动均衡数据分区,在分布式、云计算等领域有广泛的应用。
分布式缓存通过数据分片实现,一般采用以下几种规则:区间分片、Hash分片、Slot分片。数据分片的实现方式可以分为客户端实现、proxy实现、服务端实现三种。
图6 分布式缓存
目前分布式缓存设计在大型网站架构中是必备的架构要素,常用的中间件有Memcache、Redis等。使用时需要注意避免缓存雪崩、缓存穿透、缓存预热等问题。
四、金融场景中的缓存应用
在金融领域,缓存有着十分广泛的应用:
一是在高并发、高负载的重要系统中,需要引入缓存组件用以提高和拓展整体应用系统性能。
二是通过分布在全球的CDN节点,利用智能调度、边缘缓存、传输协议优化等技术,使每个用户都能快速、可靠、安全地访问到最佳资源,保证多区域多运营商访问效果,成倍提升访问速率,大幅降低源站压力。
三是利用缓存网络请求资源,可以重复利用缓存文件,减少请求的次数,降低请求延迟,降低网络负荷。
四是消除数据库热点。在许多应用程序中,一小部分数据的访问频率远高于其他数据,这会导致数据库中产生热点,并且可能需要根据吞吐量要求,对最常用的数据超额预置数据库资源。将常用键存储在内存缓存中,可以降低数据库超额预置量,同时针对最常用数据提供快速、可预测的性能。
五、总结
缓存技术已成为分布式系统中广泛使用的技术能力,缓存的引入,为分布式系统的高性能、高可用、稳定性提供了保障,解决了访问热点数据时的性能瓶颈问题。
图7 分布式系统缓存全景
从用户请求数据到数据返回,数据经过了浏览器、CDN、反向代理、应用服务器、分布式缓存等环节,每个环节都可以运用相应的缓存技术,提升响应速度,提高系统的稳定性。
往期推荐
FCC30+
长按左边二维码