当前位置: 首页 > 科技观察

什么是CDN缓存命中率,如何计算和优化?

时间:2023-03-13 00:35:49 科技观察

本文重点介绍AmazonCloudFrontCDN缓存以及如何使用它们来实现更好的缓存命中率。在了解缓存中的命中率和未命中率之前,最好先了解什么是缓存。什么是缓存?例如,缓存是一种高速存储器,可以暂时保存网页中的数据或内容,以便下次访问该页面时内容可以更快地出现。它有助于更??快地加载网页以获得更好的用户体验。对于数据库和其他存储,使用类似的方法。在AWSCloud中,缓存分为:内容分发网络(CDN)缓存-CDN是几乎所有Web应用程序的关键组件。过去,CDN仅通过在全球分布的一组缓存服务器上复制通常请求的文件(静态内容)来改进内容的交付。Web缓存-Web缓存是通过在缓存中保留HTTP响应和Web资源来执行的,以满足来自缓存而不是来自原始服务器的未来请求。数据库缓存-内存数据缓存是提高整体应用程序性能和降低数据库成本的最有效策略之一。缓存可以应用于任何类型的数据库,包括关系数据库,例如AmazonRDS或NoSQL数据库。更多...-AWS缓存解决方案_亚马逊云缓存服务-AWS云服务(https://aws.amazon.com/cn/caching/aws-caching/)这些缓存通常由以下AWS服务提供:AmazonElastiCache,AmazonDynamoDB加速器(DAX)、AmazonCloudFrontCDN和AWSGreengrass。什么是缓存命中率?缓存命中率是适用于任何缓存的重要指标,不限于CDN。缓存命中率描述了从缓存而不是从原始存储(原始服务器)提供内容的成功程度。这是CDN的一个重要指标,但它不是唯一要监控的指标;对于内容变化频繁的动态站点,缓存命中率会略低于静态站点。但是,AmazonCloudFront等现代CDN也可以执行动态缓存。许多CDN服务提供商应该在他们的性能报告中包含他们的缓存命中分数。什么是缓存未命中率?它通常以百分比表示,例如5%的缓存未命中率。缓存未命中通常是指在搜索缓存时,没有找到数据。发生这种情况时,应将请求转发到原始存储/服务器,并将内容交付给用户并在可能的情况下写入缓存。缓存命中和未命中示例缓存命中示例用户打开您网站的主页,例如,从用户附近的缓存服务器加载图像(静态内容)的副本,因为之前的用户已经使用过相同的内容。这就是缓存命中率需要时间积累的原因。最初,缓存命中百分比将为0%。然后随着缓存服务器创建数据副本,它慢慢开始增加。但是对于许多缓存服务器来说,这可能需要一段时间。缓存未命中示例用户在电子商务网站上打开产品页面,如果产品图像的副本当前不在CDN缓存中,则此请求会导致缓存未命中,并且请求将传递到原始图像的源服务器.CDN服务器将在原始服务器响应后缓存照片,因此对它的任何额外请求都会导致缓存命中。大多数网站的良好CDN缓存命中率是多少?一般来说,95-99%的命中率和1-5%的未命中率是大多数网站的理想选择。您应该记住,这些数字是特定于用例的,并且对于动态内容或可能经常更改的特定文件可能会有很大差异。您应该了解使用CDN的不同优势,例如安全性和成本优化。如何计算缓存命中率计算缓存命中率的最佳方法是用缓存命中总数除以缓存命中总数与缓存未命中数之和。该值通常表示为对适用缓存的请求或命中的百分比。缓存命中率公式和例子如下。例如,如果您有43次缓存命中(请求)和11次未命中,这意味着您将43(总缓存命中)除以54(11次缓存未命中和43次缓存命中的总和)。结果将是0.796的缓存命中率。并将其表示为百分比,将最终结果乘以100。这给出了79.6%的缓存命中率。如何衡量CDN缓存命中率?您应该能够在CDN的统计信息中找到缓存命中率。如果找不到确切的缓存命中率,可以尝试使用上一节中的公式进行计算。对于AmazonCloudFrontCDN,您可以通过两种可能的方式在AWS管理控制台中获取此信息:使用AmazonCloudFront缓存统计信息(https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cache-statistics。html)AmazonCloudWatch缓存中的实时指标命中率和未命中率问题缓存适用于各种用例,但在对每段内容使用CDN缓存之前需要回答几个可能的问题:1.数据结构适合做缓存吗?简单地缓存数据库记录通常足以提供显着的性能优势。然而,通常情况下,最好以组合多个记录的格式缓存数据。因为缓存是简单的键值存储,您可能还想以几种不同的格式缓存数据记录,以便您可以通过记录中的不同属性访问它。2.缓存是否对每条数据都有效?某些应用程序生成不适合缓存的访问模式——例如,扫描频繁更改的大型数据集。在这种情况下,使缓存保持最新可能会抵消缓存可能提供的任何优势。3.使用缓存的内容(值、对象)总是安全的吗?同一份数据在不同的上下文中可能会有不同的一致性要求。例如,在线结帐时,您需要产品的权威价格,因此缓存可能不合适。但是,在产品页面上,价格可能会过时几分钟而不会对用户产生负面影响。高缓存命中率是否总是意味着CDN正常工作?缓存命中率是CDN的一个重要指标,但其他指标对于CDN的有效性也很重要,例如RTT(往返时间)或其他因素,例如缓存内容的存储位置。理想情况下,CDN服务应尽可能靠近最终用户和尽可能多的用户缓存内容。如何提高CDN的缓存命中率一般可以通过以下建议来提高CDN的缓存命中率:1.优化缓存控制头。Cache-Control头字段指定请求和响应情况下缓存机制的指令。这些标头用于设置对象的最长期限、到期时间(TTL)或对象是否已完全缓存等属性。根据内容更改的频率,您需要指定此属性。优化这些属性值可以帮助增加CDN上的缓存命中率。示例:设置最适合您的内容的生存时间(TTL)。例如,如果资产大约每两周更改一次,则7天的缓存期可能比较合适。但是,如果资产被频繁访问,您可能希望使用一天或更短的生命周期。2.忽略cookiecookies往往是不可缓存的,所以包含它们的文件也是不可缓存的。因此,有规则很重要。例如,忽略您希望通过CDN传送的资产请求中的所有cookie。3.忽略查询字符串查询字符串有多种用途:它们有助于与Web应用程序和API交互、聚合用户指标并向对象提供信息。当查询字符串包含在静态对象URL中时,就会出现问题。在这种情况下,CDN会将它们误认为是唯一对象,并将请求定向到源服务器。因此,即使请求的内容在CDN缓存中可用,每个请求都将被归类为缓存未命中。这会导致不必要的低缓存命中率。其他如果您使用的是AmazonCloudFrontCDN,您可以遵循这些AWS推荐(https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/cache-hit-ratio.html)以获得更高的缓存命中率。本文重点介绍如何设置和管理对象缓存以提高性能并满足您的业务需求。指定CloudFront缓存对象多长时间使用CloudFrontOriginShield基于查询字符串参数的缓存基于Cookie值的缓存基于请求标头的缓存在不需要压缩时删除Accept-Encoding标头使用HTTP提供媒体内容