在互联网场景中, 对象存储 和CDN是紧密相连组合使用的一对服务,鉴于很多客户使用了多家CDN厂商甚至使用了多家 云存储 ,本文针对单云模型和多云模型的成本构成进行详细分析,并给出建议的最佳实践。
一、单一云厂商模型
对象存储的下行流量按业界通用模式一般分为三类:内网流出流量(免费)、公网流出流量(价格最高)、回源流量(指自家CDN回源到自家对象存储的流量,在 定价 上有优惠,价格较低)。所以在使用同一云厂商的对象存储和CDN时,架构及成本模型如下:
其中可能产生的流量收费项包括:
1)CDN流量,为CDN产品的计费项
2)回源流量,为对象存储的计费项
3)公网流出流量(当客户端直接访问对象存储时),为对象存储的计费项
以华为云为例,CDN的流量计费为阶梯模式,在10TB以内为0.2元/GB,OBS的回源流量单价为0.15元/GB,而OBS的公网流出流量则是闲时0.25元/GB+忙时0.5元/GB。
一般而言,当存储在OBS中的数据需要进行互联网分发且存在多个客户端经常访问同一个文件(即存在热点文件)的场景,建议使用CDN来做分发加速,同时可降低整体的流量费用。
二、多家云厂商模型
在实际项目中,很多客户会使用多家CDN厂商+一家对象存储,或者使用多家CDN厂商+多家对象存储,那么我们举几个例子来分析下不同场景的成本模型并给出建议的最佳实践。
1.A厂商CDN+B厂商对象存储
比如使用华为云CDN+其他云对象存储,则架构及成本构成如下:
此时产生的流量收费项包括:
1)华为云CDN的流量,为华为云CDN的计费项
2)其他云对象存储公网流出流量(华为云CDN回源到其他云对象存储),为其他云对象存储的计费项
这种架构相比使用单云厂商的CDN和对象存储,会增加CDN回源链路的流量成本,且通过公网回源到云存储会有一定的性能下降。
2.多厂商CDN+单厂商对象存储
比如使用其他云对象存储+其他云CDN+华为云CDN,则架构及成本构成如下:
此时产生的流量收费项包括:
1)其他云CDN的流量,为其他云CDN的计费项
2)华为云CDN的流量,为华为云CDN的计费项
3)回源流量(其他云CDN回源到其他云对象存储),为其他云对象存储的计费项
4)其他云对象存储公网流出流量(华为云CDN回源到其他云对象存储),为其他云对象存储的计费项
注意,该场景下使用华为云CDN,回源到其他云对象存储的流量在其他云看来为公网流出流量,以Ali为例官网目录价为闲时0.25元/GB+忙时0.5元/GB,而CDN回源流量目录价则是0.15元/GB。
假设业务在华为云CDN上产生了1TB月流量且为忙时流量,而回源率为10%,则因为跨云回源而额外增加的成本为 (0.5-0.15)元/GB*100GB=35元,这部分费用如果用于购买OBS标准存储则可以买到353GB。这也说明如果文件总容量小于353GB时,使用两家CDN分别回源到两家对象存储是最划算的,即其他云CDN回源到其他云对象存储+华为云CDN回源到华为云OBS。
3.多厂商CDN+多厂商对象存储
一般而言使用多厂商CDN+多厂商对象存储的原因有以下几种:
1)减少使用A厂商CDN回源到B厂商对象存储所带来的额外公网流出成本
2)使用多家CDN避免单一CDN故障影响,形成多家CDN容灾架构
3)数据存储在多家云厂商,形成多云 存储容灾 架构
此时架构及成本构成如下:
1)其他云CDN流量,为其他云CDN的计费项
2)其他云对象存储回源流量,为其他云对象存储的计费项
3)华为云CDN流量,为华为云CDN的计费项
4)华为云OBS回源流量,为华为云OBS的计费项
该架构在业务上可以有几种使用模式:
1)不同的加速 域名 配置在不同的云厂商(如图片加速域名使用其他云、视频加速域名使用华为云)
2)同一域名在两家云厂商都进行配置而在不同的运营商/地区解析到不同云厂商的CNAME地址上(如在北京电信将 域名解析 到其他云CDN、在上海联通将域名解析到华为云)
3)同一域名在两家云厂商都进行配置,但只解析A厂商,当A厂商故障时将域名切换解析到B厂商
这时可极大地提高整体的业务连续性,任何一家云厂商故障对整体业务的访问影响基本在可控范围之内。但同时也带来了一个问题,如何实现多云存储之间的数据同步。
三、多云存储数据同步方案
应用双写
如果数据是在应用服务侧产生,或者数据在客户端产生但通过服务端将数据写入对象存储,则建议使用双写方案,架构如下:
此时业务应用可对接两家对象存储的SDK,将文件以同步模式或者异步模式写入两家对象存储。对象存储的上行流量免费,所以该架构不会增加任何成本。
数据回源
如果数据上传逻辑不做改变,则可使用OBS的“数据回源”功能,在文件访问请求到达OBS而OBS桶里没有该文件时,可通过“数据回源”将客户端请求重定向到设定的源站并异步地从源站将数据拉取到OBS存储下来,架构如下:
详细流程说明:
客户端向华为CDN发起获取文件的请求
华为CDN回源到华为OBS请求文件,OBS侧事先配置好数据回源,当请求的文件不存在时,会响应302重定向到配置的源站(此处为其他云对象存储)
华为CDN接收到OBS返回的302请求
OBS异步从客户配置的源站请求文件
华为CDN处理302跳转到其他云对象存储侧获取数据
其他云对象存储响应华为CDN的文件请求
华为CDN将文件内容返回给客户端,当下次客户端请求同样的文件时,华为CDN直接回源到OBS获取。
“数据回源”功能是被动触发式,即只有向OBS发起请求后OBS才会到设置的源站将数据拉取过来,所以当一个新文件上传到其他云对象存储后,建议业务应用程序向OBS触发一个GET请求来请求数据(发起GET请求后可关闭连接,无需接收实体数据)。另外该架构会在其他云对象存储侧产生两份数据流量(针对同一个文件,CDN拉取一次,OBS拉取一次)。
Serverless触发式上传
不改变原有的上传逻辑,当文件上传到其他云对象存储后,触发函数计算服务,通过Serverless方式将文件同步到华为云OBS,架构如下:
该架构需要客户在其他云启用函数计算服务并部署上传文件到OBS的代码,会产生函数计算服务的费用。
版权声明:本文章文字内容来自第三方投稿,版权归原始作者所有。本网站不拥有其版权,也不承担文字内容、信息或资料带来的版权归属问题或争议。如有侵权,请联系contentedit@huawei.com,本网站有权在核实确属侵权后,予以删除文章。