一、背景
CloudFront Origin Shield功能是在CloudFront区域缓存之下的一层额外缓存。当被加速的源站不在AWS上的时候,开启这个功能和优化访问体验。当被加速的源站是AWS上的资源时候,对源站请求会汇聚到Origin Shield所在的区域,可以起到优化缓存的作用。
开启了CloudFront Origin Shield之后,产生的云费用账单会有数条,此时如何分析每一项费用的产生是否合理、如何进行优化?
二、费用结构分析
以如下账单为例,首先进入账单页面,点击左侧菜单中的Billing
下的Bills
第一个菜单,展开费用账单。然后在Charged by service
位置,按服务找到CloudFront服务。如下截图。
以如下账单为例,这里将每一条账单项都标记了数字编号。如下截图。
现在将这些账单项,Mapping到CloudFront架构图。如下截图。
从客户端例如手机或者PC浏览器的访问体验上来分析:
- 标记为3和4的费用,是客户端浏览网页对CloudFront发起GET请求的请求次数费用。其对应的下行流量是标记为8的Data Transfer Out费用。这个费用也是访问网页/图片视频等资源下载量大时候的主要费用。
- 标记为1和2的费用,即账单里边带有PROXY字样,是从客户端向CloudFront发起的上传到源站的POST请求次数的费用。其流量费对应到6和9。如果不开启CloudFront Shield,则9不存在,6的费用会正常收取。
从源站例如ALB以及背后的EC2虚拟机、以及EKS容器等角度来说:
- 源站接收到GET请求时候(路径5),这个请求本身不收费流量。然后返回的流量是标记5。当源站是AWS的某一个服务的时候,因为源站和CloudFront都是AWS服务,因此本应该对ALB或者EC2收取标记5的DTO出站费用就免费不收取。如果源站是AWS之外的云,例如用CloudFront为IDC加速,那么路径5也会按照ALB的DTO互联网访问收流量费。
- 源站接受POST请求(路径6),这个请求在CloudFront已经收取过流量费了,对源站包括ALB、EC2等服务而言,这属于入站流量,因为AWS入站免费,因此路径6这个费用只在CloudFront上边产生,在源站的ALB等服务不收取流量费。
从改善客户访问体验而言,开启CloudFront Origin Shield会添加额外的缓存层。是否开启CloudFront Origin Shield,只有费用7的差别。
三、在CloudFront Origin Shield在何种场景生效/无效
对所有动态请求(POST/PUT),CloudFront Origin Shield一直生效。
对所有的静态请求(GET),CloudFront Origin Shield来自其他CloudFront Regional Cache Center的请求会生效,对本Region所属的Regional Cache Center请求无效。
以亚洲举例如下:
- 云资源部署在新加坡,配置了CloudFront Origin Shield在新加坡。最终用户在新加坡,此时访问如果是GET请求,则落在新加坡的Regional Cache Center。此时再访问到源站时候,GET请求将不会通过CloudFront Origin Shield。
- 云资源部署在新加坡,配置了CloudFront Origin Shield在新加坡。最终用户在香港,此时访问如果是GET请求,则落在新加坡的Regional Cache Center。此时再访问到源站时候,GET请求将不会通过CloudFront Origin Shield。
- 云资源部署在新加坡,配置了CloudFront Origin Shield在新加坡。最终用户在日本或者韩国,此时访问如果是GET请求,则落在东京的Regional Cache Center。由于东京的Regional Cache Center和当前配置的新加坡的CloudFront Origin Shield不是同一个区域,因此本GET请求将会通过CloudFront Origin Shield。
以欧洲举例如下:
- 云资源部署在法兰克福,配置了CloudFront Origin Shield在法兰克福。最终用户在德国慕尼黑,此时访问如果是GET请求,则落在法兰克福的Regional Cache Center。此时再访问到源站时候,GET请求将不会通过CloudFront Origin Shield。
- 云资源部署在法兰克福,配置了CloudFront Origin Shield在法兰克福。最终用户在英国,此时访问如果是GET请求,则落在英国伦敦的Regional Cache Center。由于英国伦敦的Regional Cache Center和当前配置的法兰克福的CloudFront Origin Shield不是同一个区域,因此本GET请求将会通过CloudFront Origin Shield。
四、参考文档
CloudFront 如何交付内容
解释 CloudFront 的 AWS 账单和 AWS 使用情况报告
估算 Origin Shield 成本