缓存概览

缓存可以大规模帮助应用程序显著提高执行速度并大大降低成本

什么是缓存?

在计算中,缓存是一个高速数据存储层,其中存储了数据子集,且通常是短暂性存储,这样日后再次请求该数据时,速度要比访问数据的主存储位置快。通过缓存,您可以高效地重用之前检索或计算的数据。

缓存如何运作?

缓存中的数据通常存储在 RAM(随机存取存储器)等快速存取硬件中,也可在软件组件相关操作中使用。缓存的主要目的是减少对底层速度较慢的存储层的访问需求,以此来提高数据检索性能。

在用容量换取速度方面,缓存通常是暂时存储数据子集,而数据库通常是完整且持久地存储数据。

ElastiCache 深入探究:最佳实践和使用模式

缓存概览

RAM 和内存中引擎:因为 RAM 和内存中引擎都支持较高的请求率或 IOPS(每秒输入/输出操作数),所以缓存可以大规模提高数据检索性能并降低成本。要使传统数据库和基于磁盘的硬件达到同样的规模,还需要使用额外的资源。这些额外的资源会增加成本,而且仍然无法实现内存中的缓存提供的低延迟性能。

应用程序:在操作系统、联网层(含内容分发网络 [CDN] 和 DNS)、Web 应用程序和数据库等各层技术中都可以应用和利用缓存。对于包含大量读取操作的许多应用程序工作负载(例如问答门户网站、游戏、媒体共享和社交网络),您可以使用缓存来大幅降低延迟并提高 IOPS。缓存的信息包括数据库查询结果、计算密集型计算、API 请求/响应和 Web 构件(例如 HTML、JavaScript 和图像文件)。用于处理数据集的计算密集型工作负载(例如推荐引擎和高性能计算模拟)也将从充当缓存的内存中数据层获益。在这些应用程序中,必须跨计算机集群实时访问非常大的数据集,而这些集群可能涵盖数百个节点。出于底层硬件速度的原因,在基于磁盘的存储中操作这些数据是这些应用程序的一个主要瓶颈。

设计模式:在分布式计算环境中,借助专用缓存层,系统和应用程序可以通过自己的生命周期与缓存相互独立地运行,也不存在影响缓存的风险。缓存作为中心层,可以从具有自己的生命周期和架构拓扑的不同系统对其进行访问。在应用程序节点可以动态缩减和扩展的系统中,这一点尤其重要。如果缓存驻留在与使用它的应用程序或系统相同的节点上,那么扩展可能会影响缓存的完整性。此外,使用本地缓存时,它们只对使用数据的本地应用程序有利。在分布式缓存环境中,数据可以跨多个缓存服务器,并存储在一个中心位置,供所有使用者使用。

缓存最佳实践:实施缓存层时,务必要了解待缓存数据的有效性。成功的缓存会产生较高的命中率,这意味着数据在提取时已存在。如果提取的数据在缓存中不存在,则说明缓存未命中。可以使用 TTL(生存时间)等控制措施根据相应情况令数据过期。另外还要考虑该缓存环境是否需要具有高可用性,如果需要,则可以通过 Redis内存中引擎来实现。在某些情况下,内存中的层可以用作独立的数据存储层,而不必从主位置缓存数据。在这种情况下,您必须为驻留在内存中引擎中的数据定义适当的 RTO(恢复时间目标 – 从中断中恢复所需的时间)和 RPO(恢复点目标 – 在恢复中捕获到的最后一时间点或事务),以便确定这是否合适。可以应用不同内存中引擎的设计策略和特性来满足大多数 RTO 和 RPO 要求。

diagram_cachingmicrosite
客户端 DNS Web 应用程序 数据库
使用案例

加快从网站(浏览器或设备)检索 Web 内容的速度

域到 IP 的解析 加快从 Web/应用程序服务器检索 Web 内容的速度。管理 Web 会话(服务器端) 提升应用程序性能并加快数据访问速度 减少与数据库查询请求相关的延迟
技术 HTTP 缓存头文件、浏览器 DNS 服务器 HTTP 缓存头、CDN、反向代理、Web 加速器、键/值存储 键/值数据存储、本地缓存 数据库缓冲区、键/值数据存储
解决方案 特定于浏览器 Amazon Route 53 Amazon CloudFront适用于 Redis 的 ElastiCache适用于 Memcached 的 ElastiCache合作伙伴解决方案 应用程序框架、适用于 Redis 的 ElastiCache适用于 Memcached 的 ElastiCache合作伙伴解决方案  适用于 Redis 的 ElastiCache适用于 Memcached 的 ElastiCache

使用 Amazon ElastiCache 进行缓存

Amazon ElastiCache 是一项 Web 服务,让用户能够在云中轻松部署、运行和扩展内存中的数据存储或缓存。该服务支持您从快速的托管内存中的数据存储检索信息,而无需完全依赖于速度较慢的基于磁盘的数据库,从而提高 Web 应用程序的性能。了解如何借助此内存中缓存技术白皮书实施有效的缓存策略。

缓存的优势

提升应用程序性能

因为内存比磁盘或 SSD 快几个数量级,所以从内存中缓存读取数据非常快(亚毫秒级)。这大大加快了数据访问速度,从而提升了应用程序的整体性能。

降低数据库成本

一个缓存实例可以支持数十万 IOPS(每秒输入/输出操作),有可能取代大量数据库实例,从而降低总成本。如果主数据库按吞吐量收费,这一点尤其明显。在这种情况下,费用可以降低数十个百分点。

减少后端负载

通过将读取负载的重要部分从后端数据库重定向到内存层,缓存可以减少数据库上的负载,防止其在负载情况下性能降低,甚至可以防止其在高峰期崩溃。

可预测的性能

现代应用程序的一个常见挑战是应对应用程序使用高峰期。例如超级碗或选举日的社交应用程序和黑色星期五的电子商务网站等。数据库负载增加会导致获取数据的延迟增加,使应用程序的整体性能无法预测。使用具有高吞吐量的内存中缓存可以减轻这一问题。

消除数据库热点

在许多应用程序中,可能只有一小部分的数据(例如名人简介或热门产品)的访问频率比其他数据高。这会导致数据库中产生热点,并且可能需要针对最常用的数据根据吞吐量要求超额预置数据库资源。将常用键存储在内存缓存中,可以减少超额预置的需要,同时针对最常用数据提供快速、可预测的性能。

提高读取吞吐量 (IOPS)

相对于同等的基于磁盘的数据库,除了更低的延迟之外,内存中系统还可以实现更高的请求速度 (IOPS)。用作分布式端缓存的单个实例每秒可以处理数十万个请求。

使用案例与行业

  • 使用案例
  • 行业
  • 使用案例
  • 了解各种缓存使用案例

    数据库缓存

    数据库在速度和吞吐量方面的表现是对应用程序整体性能最有影响力的因素。尽管目前许多数据库都可以提供相对较高的性能,但在很多使用案例中,您的应用程序可能需要更高的性能。借助数据库缓存,您可以显著提高吞吐量,降低与后端数据库相关的数据检索延迟,从而提高应用程序的整体性能。缓存充当邻近数据库的数据访问层,而应用程序可以利用它来提高性能。数据库缓存层可以应用于任何类型的数据库(包括关系数据库和 NoSQL 数据库)的前端。将数据加载到缓存中的常用方法包括延迟加载和直写式方法。有关更多信息,请单击此处

    内容分发网络 (CDN)

    如果您的 Web 流量是地理上分散的,那么在全球复制您的整个基础设施并不总是可行,当然也不具有成本效益。借助 CDN,您能够利用其边缘站点全球网络向客户分发视频、网页、图像等 Web 资产的缓存副本。CDN 使用距离客户或原始请求位置最近的边缘站点,以便缩短响应时间。从缓存中提供 Web 内容可以大幅提高吞吐量。对于动态数据,许多 CDN 都可以配置为从来源服务器中检索数据。

    Amazon CloudFront 是一项全球性的 CDN 服务,可以实现网站、API、视频内容或其他 Web 资产的快速分发。它可以与其他 Amazon Web Services 产品集成,让开发人员和企业能够在无最低使用承诺的条件下向最终用户轻松快捷地发布内容。要详细了解 CDN,请单击此处

    域名系统 (DNS) 缓存

    在 Internet 上发出的每个域请求都会查询 DNS 缓存服务器,以便解析与域名关联的 IP 地址。DNS 缓存可以在多个层面上进行,包括在操作系统中缓存以及通过 ISP 和 DNS 服务器进行缓存。

    Amazon Route 53 是一种可用性高、可扩展性强的云域名系统 (DNS) Web 服务。

    会话管理

    HTTP 会话包含站点用户与 Web 应用程序之间交换的用户数据,例如登录信息、购物车清单、先前查看过的项目等等。要在网站上提供优质的用户体验,必须记住用户的喜好并提供丰富的用户上下文,从而有效地管理 HTTP 会话。在现代应用程序架构中,利用集中式会话管理数据存储是一种理想的解决方案,原因包括可以在所有 Web 服务器上提供一致的用户体验、弹性的 Web 服务器队列可以实现更好的会话持久性以及在缓存服务器之间复制会话数据可以提供更高的可用性。

    有关更多信息,请单击此处

    应用程序编程接口 (API)

    现在的大多数 Web 应用程序都建立在 API 的基础之上。API 通常是一种 RESTful Web 服务,可以通过 HTTP 来访问,并且可以提供用户与应用程序交互所需的资源。设计 API 时,务必要考虑 API 上的预期负载、授予其的权限、版本变更对 API 使用者的影响,以及最重要的 API 易用性。API 并不总是需要针对每个请求都将业务逻辑实例化并且/或者向数据库发出后端请求。有时,提供缓存的 API 结果可以实现最经济高效的最佳响应。当您能够缓存 API 响应以便匹配底层数据的变化时,这一点尤为明显。例如,您向用户提供产品列表 API,而产品类别每天只更改一次。因为每次调用您的 API 时,对产品类别请求的响应在全天都是相同的,所以缓存当天的 API 响应就足够了。通过缓存 API 响应,您可以消除包括应用程序服务器和数据库在内的基础设施承受的压力。您还可以享受更快的响应速度带来的优势,并能交付性能更高的 API。

    Amazon API Gateway 是一种完全托管的服务,可以帮助开发人员轻松创建、发布、维护、监控和保护任意规模的 API。

    混合环境的缓存

    在混合云环境中,您的应用程序可能位于云中并需要频繁访问本地数据库。有许多网络拓扑可以在云和本地环境之间建立连接,例如 VPN 和 Direct Connect。虽然从 VPC 到本地数据中心的延迟可能会很低,但您最好在云环境中缓存本地数据,以便提升整体数据检索性能。

    Web 缓存

    向查看者提供 Web 内容时,通过缓存相关项目并消除磁盘读取操作和服务器负载,您可以大幅降低检索图像、html 文档、视频等 Web 资产所涉及的大部分延迟。在服务器端和客户端可以采用多种 Web 缓存技术。服务器端 Web 缓存通常使用 Web 代理,这种代理会保留来自其后方的 Web 服务器发出的 Web 响应,有效降低这些服务器的负载和延迟。客户端 Web 缓存可以是基于浏览器的缓存,保留先前访问过的 Web 内容的缓存版本。有关 Web 缓存的更多信息,请单击此处

    一般缓存

    从内存访问数据的速度远远高于从磁盘或 SSD 访问数据的速度,因此利用缓存中的数据有很多优势。对于不要求事务数据支持或基于磁盘的持久性的许多使用案例而言,将内存键值存储用作独立数据库是构建高性能应用程序的一种好方法。除了速度以外,应用程序还可以实现经济高效的高吞吐量。产品分组、类别列表和资料信息等可以引用的数据都适合使用一般缓存。有关一般缓存的更多信息,请单击此处

    集成缓存

    集成缓存是位于内存中的一个层,可以自动缓存源数据库中频繁访问的数据。如果数据保存在缓存中,底层数据库通常会利用缓存来响应入站数据库请求。这可以降低请求延迟并降低数据库引擎的 CPU 和内存使用率,从而显著提高数据库的性能。缓存的数据与数据库引擎在磁盘上存储的数据保持一致,这是集成缓存的一项重要特征。

  • 行业
  • 了解不同的行业和各种缓存使用案例

    移动

    随着消费设备的快速普及和传统计算机设备使用率的下降,移动应用程序形成了一个增长非常快的细分市场。无论是游戏、商业应用程序还是健康应用程序等等,目前几乎每个细分市场都有支持移动设备的应用程序。从应用程序开发的角度来看,构建移动应用程序与构建任何其他形式的应用程序都非常相似。关注领域、表示层、业务层和数据层都完全相同。虽然屏幕实际使用面积和开发工具不同,但提供卓越的用户体验是所有应用程序的共同目标。使用高效的缓存策略,您的移动应用程序可以提供用户需要的性能、进行大规模扩展,并降低总体成本。

    AWS Mobile Hub 是一个控制台,可以为构建和测试应用程序以及监控移动应用程序使用情况提供发现、配置和访问 AWS 云服务的一体化体验。

    物联网 (IoT)

    物联网是指通过设备传感器从设备和物理世界收集信息,然后将其传递给使用数据的 Internet 或应用程序。IoT 的价值在于能够近乎实时地理解捕获的数据,最终让使用数据的系统和应用程序能够快速响应这些数据。举例来说,某个设备可以传输其 GPS 坐标。您的 IoT 应用程序的响应方式可能是提供建议,给出这些坐标附近的兴趣点。此外,如果存储了与设备用户相关的偏好,那么您可以优化针对用户的建议。在这个示例中,应用程序响应坐标的速度对于实现卓越的用户体验至关重要。而缓存可以在这里发挥重要作用,例如,兴趣点可以随地理坐标一起存储在 Redis 等键/值存储中,以实现快速检索。从应用程序开发的角度来看,如果能够以编程方式来响应任何事件,那么您可以通过编码让 IoT 应用程序实现这一点。构建 IoT 架构时需要考虑的重要事项包括分析提取的数据所需的响应时间、构建可扩展 N 台设备的解决方案以及提供经济高效的架构。

    AWS IoT 是一种托管的云平台,让互联设备可以轻松安全地与云应用程序及其他设备交互。

    其他阅读材料:借助 Amazon ElastiCache for Redis 管理 IoT 和时间序列数据

    广告技术

    现代广告技术应用程序对性能的要求非常高。实时竞价 (RTB) 是广告技术中发展迅猛的一个领域,这是一种基于拍卖的方法,用于在最细粒度的印象级别上实时处理数字显示广告。根据 eMarketer 的分析,2015 年,RTB 是美国最主要的交易方法,在以编程方式购买的广告中占 74.0% 的比例,对应着 110 亿美元的价值。构建实时竞价应用程序时,按时提交出价与出价无效之间的差别可能只有一毫秒。这意味着必须极快地从数据库中获取竞价信息。数据库缓存可以在不到几毫秒的时间内访问竞价详细信息,是实现高性能的优秀解决方案。

    游戏

    交互是几乎所有现代游戏的基本要求。玩家最不喜欢的就是速度缓慢或者反应迟钝的游戏,而这种游戏很少能够获得成功。移动多人游戏对性能要求更加苛刻,在这种游戏中,任何一个玩家的操作都需要与他人实时共享。缓存可以针对频繁访问的数据提供亚毫秒级查询响应,在保持游戏流畅方面发挥着重要作用。当相同的数据被多次查询时,例如“谁是当前分数排在前 10 位的玩家?”,缓存也有助于缓解热键问题。

    要详细了解如何在 AWS 上开发游戏,请单击此处

    媒体

    媒体公司通常需要向客户发送大量静态内容,而读者/观众的数量在不断变化。例如,Netflix 或 Amazon Video 等视频流式传输服务将大量视频内容发送给观众。这种企业非常适合使用内容分发网络,其中的数据存储在全球分布的一组缓存服务器中。媒体应用程序的另一个特点在于,负载往往会出现高峰,而且不可预测。想象一下某个名人在推文中提到的一篇网站博客,或者超级碗大赛期间某个橄榄球队的网站。对一小部分内容的如此大的需求对于大多数数据库来说都是一项挑战,因为每个键的吞吐量有限。内存的吞吐量比磁盘高很多,因此数据库缓存可以通过将读取重定向到内存缓存中来解决这种问题。

    电子商务

    现代电子商务应用程序变得越来越复杂,它们可以提供个性化的购物体验,包括根据用户数据和购物历史记录提供的实时建议。此类应用程序通常还可以查看用户的社交网络,根据其好友的喜好或购买过的物品提供建议。虽然需要处理的数据量在增加,但客户的耐心却没有提高。因此,保持应用程序的实时执行不是一种奢侈,而是一种必需;有效执行的缓存策略是应用程序性能的一个关键方面,可能决定着应用程序的成败,决定着是达成交易还是失去客户。

    社交媒体

    社交媒体应用程序已经风靡全球。Facebook、Twitter、Instagram 和 Snapchat 等社交网络拥有大量的用户,他们使用的内容量越来越大。用户打开自己的订阅时,希望能够近乎实时地看到最新的个性化内容。这种内容不是静态内容,因为每个用户都有不同的好友、图像和兴趣等等,这加剧了底层平台的工程复杂性需求。社交媒体应用程序还很容易出现与重大娱乐、体育和政治事件相关的使用高峰。有多种缓存层可以实现此类高峰期弹性和实时性能,包括适用于背景图像等静态内容的内容分发网络、用于跟踪用户当前会话数据的会话缓存和用于存储频繁访问的数据(例如来自最亲密朋友的最新新闻和图像)的数据库缓存

    医疗保健和健康

    医疗保健行业正在经历一场数字革命,让世界各地越来越多的患者能够获得医疗服务。某些应用程序让患者能够视频问诊,而大部分主要提供商提供的应用程序让患者能够查看检验结果并与医护人员互动。健康方面的应用程序也有很多,从跟踪用户的特定传感器活动(例如如 FitBit 和 Jawbone)到提供全面的健康指导和数据都包含在其功能范围内。这些应用程序的互动性催生了对执行速度以及业务层和数据层的需求。使用有效的缓存策略,您能够提供快速的性能、降低整体基础设施成本并随着使用量的增加而扩展。

    要详细了解如何在 AWS 上构建医疗保健应用程序,请单击此处

    金融和金融技术

    近年来,我们使用金融服务的方式发生了巨大变化。应用程序实现了很多功能,例如使用银行和保险服务、欺诈检测、投资服务以及通过实时算法优化资本市场等。提供对客户金融数据的实时访问,让客户能够进行转账或付款等交易,这是一项挑战。首先,在用户想要近乎实时地与应用程序交互的其他应用程序中,也存在类似限制。此外,金融应用程序可能会提出额外的要求,如提高安全性和加强欺诈检测。高效的架构(包括多层缓存策略)对于实现用户所需的性能至关重要。缓存层可能包括用于存储用户会话数据的会话缓存、用于提供静态内容的内容分发网络和用于存储频繁访问的数据(例如客户最近的 10 次购买活动)的数据库缓存,具体取决于应用程序需求。

    要详细了解 AWS 上的金融服务应用程序,请单击此处

Amazon ElastiCache 入门

Step 1 - Sign up for an AWS account

注册 AWS 账户

立即享受 AWS 免费套餐
icon2

通过简单教程进行学习

了解如何创建 Redis 集群

icon3

开始构建

借助用户指南开始构建。