使用AWS Lambda,S3和AWS CloudFront进行动态内容缓存

快速提供内容对于任何网站或应用程序具有更好的客户体验至关重要。 如果您将网站或应用程序托管在AWS Cloud中,那么无论从何处访问应用程序,都可以以较低的延迟快速提供内容。 AWS提供了CloudFront服务,用于将内容缓存在每个用户地理位置本地的边缘位置。

在此示例中,我们将向您展示如何使用AWS Lambda函数检索和转换图像,如何在CloudFront边缘位置本地缓存以及如何在原始服务器中更新缓存的图像时使这些缓存无效。 该方法可以应用于任何其他类型的内容。

1.什么是Amazon CloudFront?

Amazon CloudFront是AWS(Amazon Web Services)提供的内容交付网络(CDN)Web服务,它允许通过全球范围内的多个边缘位置访问内容。 Amazon CloudFront当前提供149个边缘位置和11个区域边缘缓存 。

2.什么是AWS Lambda?

AWS Lambda是一个事件驱动的无服务器计算平台,该平台运行代码而无需置备或管理服务器。 AWS Lambda根据事件触发器执行代码(功能)。 例如,一个简单的用例是,每次将图像上传到S3存储桶时,都可以触发Lambda函数来转换和调整图像大小。 AWS Lambda函数也可以通过AWS API Gateway内置的API执行。

3.什么是Amazon S3?

AWS S3(简单存储服务)是一种低成本,安全,耐用,高可用性和水平可扩展的对象存储服务,可以在其中存储,访问和轻松备份数据。 您可以从任何地方存储任何数量的信息。

4.从Origin Server获取图像并将其存储在S3中

假设您有一个媒体服务器,该服务器托管您的网站所需的所有图像,并假定该服务器能够在更新现有图像或添加新图像时触发通知。 使用AWS Lambda,可以对这些图像进行检索,转换,调整大小并将其存储到S3存储桶中。

动态内容缓存-从原始服务器获取图像
图1:使用Lambda从Origin Server获取图像

上图图1显示了AWS Lambda函数,该函数从Media服务器检索原始图像,进行转换并将其发布到S3存储桶。 它还会侦听Message Queue以获取Media Server发布的图像更新,并在S3中刷新图像。

5.使用Amazon CloudFront缓存内容

Amazon CloudFront可以通过边缘缓存加快内容的交付速度。 当用户访问您的网站或应用程序并请求内容时,请求将被路由到最近的CloudFront边缘位置。 仅对于第一个用户,在检索内容时会有延迟,并且相同内容的所有后续用户将能够快速检索内容,因为内容将被缓存在边缘位置。

以下是用户对内容的请求发生的过程:

  • CloudFront会在其缓存中检查所请求的对象。 如果在缓存中找到了所请求的对象,则将其返回。
  • 如果在CloudFront缓存中找不到请求的对象,
    • 该请求将被重定向到配置的原始服务器
    • CloudFront将从Origin Server返回的对象缓存在最近的边缘位置,然后返回给用户。

可以将CloudFront中的对象缓存为已配置的TTL(生存时间),并且TTL过期后,该对象将不再可用于从缓存中提供服务,如图2所示。

动态内容缓存-缓存图像内容
图2:使用CloudFront缓存图像内容

6.如何在AWS控制台上配置CloudFront

要配置CloudFront,必须先创建CloudFront分配。 选择“ Web分发”进行内容分发,并选择“ RMTP”分发进行流媒体文件。 对于这种情况,让我们选择Web分发。

6.1创建CloudFront分配

登录到AWS控制台->选择CloudFront服务->创建分配->选择Web分配->入门

要将S3用作原始服务器,请为原始域名选择已创建的S3存储桶。 对于“ 原始路径”,输入存储对象的目录路径。 要将自定义HTTP Server用作原始服务器,请为“ 原始域名”输入自定义原始服务器的DNS名称,为“ 原始路径 ”输入上下文路径。

要将S3用作原始服务器,请为原始域名选择已创建的S3存储桶。 对于“ 原始路径”,输入存储对象的目录路径。 要将自定义HTTP Server用作原始服务器,请为Origin Domain Name输入自定义原始服务器的DNS名称,并为Origin Path输入上下文路径,如图3所示。

动态内容缓存-创建CloudFront分发
图3:从AWS控制台创建CloudFront分配

6.2缓存行为设置

如果只允许HTTPS访问,则启用将HTTP重定向到HTTPS。对象缓存中,如果选择了“使用原始缓存标头”,则CloudFront将使用原始服务器响应中的缓存控制标头( max-age ),除非还返回了“ s-max-age ”,在这种情况下为s-max-使用年龄

如果选择Customize (针对Object Caching ),则可以配置Minimum TTL,Maximum TTL和Default TTL,如图4所示。

  • 最小TTL是对象在CloudFront将请求转发到Origin Server之前对象保留在缓存中的时间(以秒为单位)。 即使Origin Server的Cache-Control标头的值较低,对象也会被缓存最少的时间。
  • 最大TTL是在CloudFront将请求转发到Origin Server之前,对象停留在缓存中的时间(以秒为单位)。 最大TTL仅在原始服务器返回缓存控制标头时才有效。 即使Origin Server的Cache-Control标头具有更高的值,对象的缓存时间也不会超过此时间。
  • 仅当Origin Server不返回任何缓存控制标头时,默认TTL才有效。
动态内容缓存-缓存行为设置
图4: CloudFront分发上的缓存行为设置

6.3查询参数白名单

当您不想按“ 所有”查询参数缓存图像或内容,而仅按几个查询参数缓存时,可以将CloudFront配置为仅通过“ 查询字符串白名单”按选定的查询参数缓存,如图5所示,因此只有那些查询参数会包含在缓存键中。 仍然将所有查询参数转发到原始服务器。

动态内容缓存-白名单查询参数
图5 :CloudFront中的白名单查询参数

创建一个Alias记录以使用CloudFront分布Url映射Route53 CNAME记录,因此对Alias的请求将映射到CloudFront分布,然后再映射到原点。

7.使CloudFront中的缓存对象无效

一旦将对象缓存在CloudFront中,它们将保留在缓存中,直到缓存TTL过期为止。 如果在原始服务器中更新了一个对象,CloudFront不会知道这一点,但是会继续从其缓存中为过时的对象提供服务。 为了避免提供过时的数据对象,CloudFront允许通过不同方式使对象缓存无效。

在AWS文档中 ,您一次可以对每个分发进行最多3,000个文件的失效请求,每个失效请求可以包括多达3000个URL。 请注意,启动CloudFront缓存失效后,CloudFront需要花费几分钟的时间从所有边缘位置删除对象。 即可能需要一些时间才能获得无效的结果。 失效所需的时间取决于失效请求中包含的对象URL的数量。

7.1通过AWS控制台使对象无效

以下是使来自AWS Console的缓存对象无效的步骤。

  • 登录到AWS管理控制台并打开CloudFront控制台
  • 选择您要使文件无效的分发。
  • 选择分发设置,然后选择无效选项卡。
  • 选择创建无效并输入无效路径,例如“ originserver / image / IMG54330080 *”。 此通配符路径将删除为imageId“ IMG54330080

7.2使用CLI(命令行界面)使对象无效

以下命令为给定分发ID的CloudFront分发创建无效。 命令语法:

aws cloudfront create-invalidation --DistributionId --paths

例:

aws cloudfront create-invalidation --distribution-id K14EK9G5DZUEWO  --paths /originserver/image/IMG54330080*

{"Location": "https://cloudfront.amazonaws.com/2019-01-25/distribution/K14EK9G5DZUEWO/invalidation/IUNZX941WYQR8","Invalidation": {"Id": "IUNZX941WYQR8","Status": "InProgress","CreateTime": "2019-01-17T17:07:57.636Z","InvalidationBatch": {"Paths": {"Quantity": 1,"Items": ["/originserver/image/IMG54330080*"]},"CallerReference": "cli-324234242-463845"}}}

7.3通过AWS开发工具包使对象无效

以下Java代码段用于通过Amazon SDK使对象无效。

AWSCredentials awsCredentials = new DefaultAWSCredentialsProviderChain().getCredentials();AmazonCloudFrontClient client = new AmazonCloudFrontClient(awsCredentials);Paths invalidation_paths = new Paths().withItems("/originserver/image/IMG54330080*", "/image/path/imageA.jpg").withQuantity(1);InvalidationBatch invalidation_batch = new InvalidationBatch(invalidation_paths, "Asset_Image_Cache");CreateInvalidationRequest invalidation = new CreateInvalidationRequest("distributionID", invalidation_batch);CreateInvalidationResult ret = client.createInvalidation(invalidation);System.out.println("Invalidation result: " + ret.toString());

如果您将CloudFront配置为将查询参数转发到Origin Server,则在使文件无效时必须包括查询参数,因为CacheKey是使用创建缓存时包含的查询参数创建的。 例如

http://cdn.originserver.com/image/IMG54330080?category=headshot&type=high-resolution&width=220&height=330&aspectRatio=3.5

另外,您可以在无效网址中使用通配符*。 请注意,在这种情况下,所有具有与URL(带有通配符)匹配的CacheKeys的缓存条目都将失效。 例如

http://cdn.originserver.com/image/IMG54330080*

当新对象/更新对象上载到S3时,AWS Lambda函数还可用于使CloudFront对象无效。

如图6所示,当将更新的对象上传到S3时,它将触发Lambda函数,该函数会使CloudFront缓存中的对象无效。

动态内容缓存-使CloudFront对象无效
图6 :通过Lambda函数使CloudFront对象无效

8.总结

AWS CloudFront是一项功能强大的内容缓存服务,可将内容快速提供给您的网站或应用程序的用户,而无需担心网站或应用程序的托管位置以及用户从何处访问您的应用程序。 将此服务与Lambda,S3等其他AWS服务一起使用可帮助创建动态缓存,因此可以将近实时数据快速提供给用户。 如果需要,还可以使CloudFront对象缓存无效。

翻译自: https://www.javacodegeeks.com/2019/02/dynamic-content-caching-with-aws-lambda-s3-and-aws-cloudfront.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343861.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[渝粤教育] 西南科技大学 组织行为学 在线考试复习资料

组织行为学——在线考试复习资料 一、单选题 1.( )是指一个团队的综合情绪控制调节能力。 A.团队学习 B.团队情商 C.团队成员角色 D.团队创建 2.在沟通过程中,由信息发送者选择来向接收者传送信息的媒介物,叫( )。 A.编码 B.解码 C.反馈 D.通道 3.组织风俗属于组织文化的( )。…

php获取页面指定内容,php获取页面指定标签内容的实现代码分享

php获取页面指定标签内容的实现代码分享可以匹配任意可闭合带id标签header ( "Content-type: text/html; charsetutf-8" );/** 参数说明: $tag_id:所要获取的元素Tag Id $url:所要获取页面的Url $tag:所要获取的标签 $data*/function getWebTag($tag_id, $url false…

数据光端机设备性能指标介绍

作为安防监控工程,设备的可靠性应该是第一考虑要素。而数据光端机设备的可靠性是设备厂商在产品设计时就必需考虑的,但是,有些厂商可能会因为某些原因而不愿做或不知道怎么做这方面的工作,在这里着重从工程的角度简单地讨论以下问…

[渝粤教育] 西南科技大学 行政法学与行政诉讼法学 在线考试复习资料(1)

行政法学与行政诉讼法学——在线考试复习资料 一、单选题 1.某省工商局与税务局联名对某公司作出处罚,吊销其营业执照,罚款100万元。该公司提起复议,复议机关是( ) A.国家工商总局 B.国家税务总局 C.国务院 D.省政府 2.行政相对人对下列行为不能申请行政复议的是哪一种?( ) A…

光电转换器有什么作用?光纤收发器如何保养?

光电转换器可以使原来的快速以太网平滑升级,并能充分保护用户原来的网络资源,它也可以称为光纤收发器。光电转换器可以实现交换机和计算机之间的互联,也可以作为传输中继,还可以进行单多模转换。光纤收发器在应用过程中&#xff0…

php中id如何与删除关联,ThinkPHP查询语句与关联查询用法实例

这篇文章主要介绍了ThinkPHP查询语句与关联查询用法,以实例的形式常见的查询方法,包括数组作为查询条件及对象方式来查询等技巧,需要的朋友可以参考下本文实例讲述了ThinkPHP查询语句与关联查询用法。分享给大家供大家参考。具体如下:在thinkphp框架页面中我们可以直…

[渝粤教育] 西南科技大学 货币银行学 在线考试复习资料

货币银行学——在线考试复习资料 一、单选题 1.最严重的恶性通货膨胀的最终结果是( )。 A.突发性的商品抢购 B.挤兑银行 C.货币制度崩溃 D.投机盛行 2.凯恩斯的货币需求函数非常重视( )。 A.恒久收入的作用 B.货币供应量的作用 C.利率的作用 D.汇率的作用 3.下列西方的中央银…

latex段落悬挂缩进_使用正则表达式在Java中悬挂缩进段落

latex段落悬挂缩进这篇文章显示了如何使用正则表达式将缩进的长段落挂起。 该方法将考虑单词边界,这意味着它不会破坏缩进单词。 为了说明此问题,请考虑以下示例: 近年来,人们越来越努力从自然语言文本中提取实体之间的关系。 在…

【渝粤教育】电大中专会计电算化 (2)作业 题库

1下列有关会计电算化狭义概念的说法正确的是()。 A以会计理论为主体的电子信息技术在会计工作中的应用 B与实现电算化有关的所有工作 C以电子计算机为主体的电子信息技术在会计工作中的应用 D与实现电算化有关的主要工作 错误 正确答案:左边查询 学生答案&#xff1…

光纤模块与光纤收发器的区别

随着科技的发展,城市信息化速度的加快,对于通信技术的要求越来越高,光纤以其传输速度快、距离远、安全稳定、抗干扰、扩容便捷等优点越来越成为人们在通讯敷设时的首选。我们经常看到在建筑智能化项目中的远距离数据传输需求,基本…

html中输出PHP的下拉列表,html中关于下拉列表select的图文代码详解

HTML中的下拉列表:Html代码VolvoSaabOpelAudi其中select是显示一个下拉列表(drop down list)出来,option是下拉列表中的项目(item),而option的文本内容(text content)是下拉列表项目中显示到页面上的值,value是真正需要提交到服务…

【渝粤教育】电大中专学前儿童语言教育 (2)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 认为儿童天生就有学习语言能力且体现在一种语言获得装置(LAD)中的教育家是( )。 A.皮亚杰 B.乔姆斯基 C.伍顿 D.斯金纳 错误 正确答案:左边查询 学生答案:未作答 2.语言是( )…

光纤收发器tx和rx的区别?

光纤收发器,是一种将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元,在很多地方也被称之为光电转换器(Fiber Converter)。产品一般应用在以太网电缆无法覆盖、必须使用光纤来延长传输距离的实际网络环境中…

【渝粤教育】电大中专幼儿园课程论 (10)作业 题库

作业视频教务托管,壹叁路路贰陆陆壹〇肆〇 下列哪种不是具有代表性的课程定义( ) A.课程即知识 B.课程即目标 C.课程即科目 D.课程即经验 错误 正确答案:左边查询 学生答案:未作答 2.幼儿园课程目标要素不包括( ) A.内容 B.目标 C.特征 D.评价…

php缓存实例,一个PHP缓存类实例

一个PHP缓存类实例发布于 2014-08-05 21:44:28 | 104 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门…

[渝粤教育] 中国地质大学 金融保险业会计 复习题

《金融保险会计》模拟题 单选题 1.下列不符合外汇分账制基本要求的有(). A.对各种外币的收付凡有人民币牌价的平时都按原币填制凭证登记账簿编制报表 B.对各种外币的收付凡有人民币牌价的平时都按人民币填制凭证登记账簿编制报表 C.设置”外汇买卖”科目 D.各种外币分别设置一…

光纤收发器常见指示灯的意义

光纤收发器是一种常见的网络设备,主要用于延长网络传输距离。它有很多指示灯,其中LAN指示灯、POWER指示灯、POTS指示灯、LOS指示灯、PON指示灯比较常见,不同指示灯代表着不同的意义,我们可以通过指示灯的闪烁情况和开关情况&#…

php mysql_query预处理,php+mysqli使用预处理技术进行数据库查询的方法

本文实例讲述了phpmysqli使用预处理技术进行数据库查询的方法。分享给大家供大家参考。具体如下:代码有些难度,需要基础知识比较扎实才能好理解,代码先放上来:这里实现查询所有 id>5 的 id,title,conten…

[渝粤教育] 中国地质大学 高级会计学 复习题

《高级会计学》模拟题 一单选题 1.2007年1月1日甲公司以一台固定资产和银行存款400万元向乙公司投资()占乙公司注册资本的60%该固定资产的账面原价为8000万元已计提累计折旧500万元已计提固定资产减值准备200万元公允价值为7600万元.同日乙公司可辨认净资产公允价值为13000万元…

实现函数克隆_哪个更好的选择:克隆或复制构造函数?

实现函数克隆这就是我开始撰写本文的方式。 我已经读过很多次这样的声明: “当对象引用可变的最终字段时,克隆变得很困难。” 每次我在Google上搜索它时,都要了解它的确切含义,并且在此过程中也忘了它。 因此以为我会将其写在博客…