点击关注我的Telegram群组和微信公众号

MENU

CDN优化:如何通过引入多个CDN服务商以降低40%的流量费用

2022 年 08 月 01 日 • 阅读: 5211 • 网络,分析,云服务,教程

还有第二篇,内容不仅如此 OωO

前言

自 2014 年开始写博客以来,我都尽力保证用户能以较快的速度加载这个博客的每一个页面。CDN 在这其中起了很大的作用,它能明显降低源站服务器的带宽压力。最早的时候,因为我的域名备案在腾讯云,所以使用的是腾讯云的 CDN 的免费额度。随后又使用了一小段时间七牛,但当时七牛和腾讯云还没有图片处理功能,所以我很快换到了专注于 CDN 服务的又拍云。又拍云通过其联盟为开发者提供了一定量的免费储存空间和 CDN 流量,并且该项福利一直持续至今。
又拍云联盟代金券

时光荏苒,我的博客也从当年的日均 0 IP 变成了现在每月数千的用户,算不上多大的成功但也是一番不错的结果。用户数量的增加使得 CDN 的流量不断增长,从去年开始又拍云联盟赠送的代金券就不够我使用的了。我尝试购买资源包来覆盖超出额度的流量计费,但我的站点流量也没有多到足以在资源包有效期内充分利用其价值,所以不得不少量地往帐号中充值。既然 CDN 功能开始成为一个需要付费的项目,我自然需要更加认真地对待其计费内容,故在前两个月开始分析起了 CDN 的数据,并做了一番调整。时至今日,算是卓有成效,所以写此文记录分享一下经历。

站点结构

在最早开始使用 Typecho 时我便没有使用其自带的附件管理系统来用于放置图片,而是额外创建了 blogpic.irain.in 图床站点。在又拍云控制面板中,我也是分别为 blog.irain.inblogpic.irain.in 分别创建了 CDN 资源。博客主站的 CDN 目的主要是动态加速,以及 css, js 等少量静态资源的加速;而图床站则因为主要传递图片这样的较大的资源,会有更加明显的流量。

CDN 价格表

本文的内容将涉及到下面几个 CDN 服务商,下面这个表格和备注是我个人总结制作的,仅供数据参考

又拍云腾讯云华为云 G-Core Labs
中国大陆流量 0.29/GB0.21/GB0.2/GB 无节点(接入台湾 / 香港 / 韩国 / 日本节点)
中国大陆动态请求 0.02 / 千次 00 无节点
中国大陆 HTTPS0.05 / 万次 00 无节点
亚太流量 0.89/GB0.55/GB0.67/GB€0.03/GB
亚太动态请求 0.06 / 千次 00€0.0075 / 万次
亚太 HTTPS0.15 / 万次 000
欧美流量 0.39/GB0.31/GB0.5/GB€0.03/GB
欧美流量请求 0.03 / 千次 00€0.0075 / 万次
欧美 HTTPS0.07 / 万次 000
图片处理免费数据万象(付费) 1 万次免费处理,€1 / 万次
中国大陆 100GB 流量套餐 20/3 个月 19 元 / 12 个月
中国大陆 500GB 流量套餐 100/3 个月 94 元 / 12 个月 88 元 / 6 个月
免费额度全年 67 元代金券每月 10GB (仅限老用户)每月 1TB + 100 万次请求
  1. 华为云海外 CDN 若需要分区域计费,需要开工单,否则按 0.79/GB 计费所有海外区域流量
  2. 华为云若启用全站加速,会产生动态请求和静态请求计费
  3. 腾讯云数据万象很贵的,你不会想买的
  4. 腾讯云老用户若有每月 10GB 流量,则计费必须为按日结算,不可调整

优化 1:减少海外流量的花费

打开又拍云的费用中心,进入账单管理,在这里我们可以按月或按日来查看所有的账单

账单分析

我首先选定了 2022-05-01 - 2022-05-31 这一月的时间,查看日账单,平均每日账单金额为 0.5 元。
每日账单大约是0.5元

其中 2022 年 5 月 3 日这天为该月账单金额最高的一天,为 0.7 元。打开该账单的计费项清单,可以看到海外地区的 CDN 服务所产生的费用占了很大的比例。
海外流量费用占了很大比例

而在 2022 年 5 月 28 日这一天,即使中国大陆 CDN 服务为主要的账单计费来源,但我们仍然可以看出来海外地区 CDN 服务更高的单价会产生不少的费用。
海外流量费用单价高是问题的关键

解决方案

根据经验和一些行业报告,海外(尤其是欧美地区)的流量费用是很低的。如果不使用 AWS/Azure 那样的一线大厂 CDN,海外 CDN 成本应该是远远低于中国大陆地区的。所以我们解决方案应该是直接拒绝又拍云这样的国内 CDN 服务商接管海外的 CDN 服务,让海外的服务商来解决海外地区的加速问题。

我的站点使用的是 G-Core Labs 的 CDN,其免费方案包含了全球(不含中国大陆)超过 140 个节点的累计 1TB 流量,这对于我的博客而言是绰绰有余了。以图床站点为例,在 G-Core Labs 的后台中,我们为图床站创建一个 CDN 资源,源站 IP 设置为一个又拍云的节点 IP,并设置回源 Host 为 blog.irain.in。这样 G-Core CDN 就会将又拍云节点作为源站,缓存已经经过又拍云处理过的图片资源。

随后,我们在域名解析服务中,将原有的全网默认至又拍云的 cname 解析删除;将中国大陆地区的解析设置为又拍云的 cname 地址;将海外地区解析地址设置为 G-Core Labs CDN 的 cname 地址。该项设置于 2022 年 6 月 12 日完成,我们现在查看该日期前后的又拍云账单,可以看到明显的账单金额下降。
6月12日后日账单金额明显下降

以 2022 年 6 月 15 日的账单为例,海外地区的流量、HTTPS 加速和动态资源加速都降低到了一个非常低的数量,远远低于之前的数据。剩余的这些数据是由 G-Core Labs CDN 请求所产生的,虽然不能完全排除海外用户因 DNS 服务器错误地被分配到又拍云节点或刻意连接又拍云节点的情况,但宏观上我的操作是达到了预期的效果。
成功解决问题

成果

海外地区的加速不再由又拍云负责,每日的账单金额从大约 0.5 元降至 0.1 元。

虽然 G-Core Labs CDN 没有免费的图片处理服务,但由于源站是又拍云节点,海外用户能获取到和国内用户一样的经过优化处理的图片。

优化 2:中国大陆地区的成本

在解决了高额的海外 CDN 费用问题后,我们接下来可以再将注意力集中在中国大陆地区的 CDN 流量消耗上了。根据我在本文上方总结的 CDN 费率表格中,我们可以发现又拍云虽然有免费不限量的图片处理功能,但是其流量费用相比其它 CDN 服务商是更高的,并且对 HTTPS 请求有额外的计费。

分析

在浏览华为云 CDN 产品页面时,发现其提供了一种闲时流量包的产品,该产品将北京时间 0 点至 18 点的流量归为闲时流量。其价格为 1TB 76.5 元,有效期半年。而在其活动页面,华为云提供了普通 CDN 流量包和闲时流量包混合的组合包,比如 6:4 的 500G 流量包中含有 300G 的闲时流量和 200G 的普通流量,价格 48.3 元。这个价格和流量额度对于小站点还是很友好的。那么,接下来就需要判断,当前的站点需要怎样比例的组合包。
华为云的闲时流量组合包拥有很高的性价比

打开 Jupyter Notebook,我们来分析一下数据。

  • # 加载博客主站和图床站的数据
  • df_blog = pd.read_excel("UPYUN-masterain-blog.xlsx",sheet_name="FlowStatistic")
  • df_pic = pd.read_excel("UPYUN-masterain-blog-pic.xlsx",sheet_name="FlowStatistic")
  • # 数据清洗
  • df_blog = df_blog.rename(columns={"日期":"time", "流量(bytes)":"flux-bytes",
  • "带宽(bit/second)": "bandwidth-bitPerSecond",
  • "峰值带宽时间":"max-bandwidth-time"})
  • df_pic = df_pic.rename(columns={"日期":"time", "流量(bytes)":"flux-bytes",
  • "带宽(bit/second)": "bandwidth-bitPerSecond",
  • "峰值带宽时间":"max-bandwidth-time"})

接下来,我们写两个方法,来将每小时的流量进行合并

  • # 判断是否为闲时
  • def isHappyHour(datetimeObj):
  • if datetimeObj.hour >= 0 and datetimeObj.hour < 18:
  • return True
  • else:
  • return False
  • # 统计数据的方法
  • def getIdleDataSum(df):
  • new_df = df.copy()
  • new_df.time = new_df.time.apply(lambda x: datetime.datetime.strptime(x, '%Y-%m-%d %H:%M:%S'))
  • new_df["type"] = np.nan
  • new_df["type"] = new_df.time.apply(lambda x: "idle" if isHappyHour(x) else "busy")
  • new_df = new_df.groupby("type").agg({"flux-bytes":"sum", "bandwidth-bitPerSecond":"max"}).rename(columns={"flux-bytes":"flux-bytes-sum", "bandwidth-bitPerSecond":"bandwidth-bitPerSecond-Max"}).reset_index()
  • new_df["flux-MB"] = new_df["flux-bytes-sum"] / 1024 / 1024
  • total_flux = new_df["flux-bytes-sum"].sum()
  • new_df["percentage"] = new_df["flux-bytes-sum"].apply(lambda x: x*100/total_flux)
  • return new_df

对博客主站数据和图床站数据使用 getIdleDataSum 方法

  • getIdleDataSum(df_blog)
  • """
  • type flux-bytes-sum bandwidth-bitPerSecond-Max flux-MB percentage
  • 0 busy 1463708407 143683 1395.901114 32.691739
  • 1 idle 3013595198 134938 2873.988340 67.308261
  • """
  • getIdleDataSum(df_pic)
  • """
  • type flux-bytes-sum bandwidth-bitPerSecond-Max flux-MB percentage
  • 0 busy 1818381068 409968 1734.143322 33.453746
  • 1 idle 3617126957 510284 3449.561078 66.546254
  • """

可以看到站点的普通时段流量和闲时时段流量比例大约为 3:7

解决方案

在华为云官网上购买一个 500G 6 个月 6:4 比例的组合包(因为另一个流量消耗巨大的站点比例接近于 6:4

在华为云 CDN 控制台中创建 CDN 资源。在添加域名的时候,我们将源站类型选择为源站IP,其中填入又拍云的节点 IP。如果此时华为云提示你需要验证该 IP 的所有权,直接开工单说清楚问题,让客服将你的域名拉入白名单即可绕过验证

配置好 CDN 资源;将中国大陆地区的域名解析修改为华为云 CDN 提供的 cname 地址
配置好华为云CDN

写一个自动化程序在每日 0 点将域名解析切换到华为云 CDN,18 点将域名解析切换到又拍云(见下一篇文章)

成果

在海外地区的加速不再由又拍云负责的前提下,华为云和又拍云根据时间段分别承担中国大陆地区的 CDN 服务,又拍云每日的账单金额从大约 0.1 元降至 0.03 元。
又拍云的日账单金额进一步下降

虽然华为云 CDN 没有图片处理服务,但由于源站是又拍云节点,华为云向用户传递的数据也已经是经过又拍云处理过的图片数据了。

在又拍云的费用中心的日账单中,我们可以发现中国大陆的请求数量和流量都大幅下降了。
国内流量也大幅下降了

总结:省了多少钱

在进行调整前

在又拍云,我们每天大约有 0.5 元的日账单,180 天则为 90 元,365 天为 182.5 元

在调整后

在又拍云,我们每天大约有 0.03 元的日账单,180 天则为 5.4 元,365 天为 10.95 元

在华为云,我们需要在一年内购买两次组合包,价格总计为 96.6 元

总计价格为 96.6 + 10.95 = 107.55 元,相比原始价格,成本下降了 41.06%

但这并不是全部,在我们最初有 0.5 元的日均账单的时候,我们的流量合计大约只有 0.3G,以这一数据推测半年的流量也仅 54G。而在方案调整后,我不再是后付费,而是变成了先付费购买了一个总计 500G 的流量包,这使得我在未来一段时间可以 “零成本” 地将 CDN 带入其它项目。

最后编辑于: 2022 年 09 月 10 日
返回文章列表 文章二维码 打赏
本页链接的二维码
打赏二维码
添加新评论

  • OωO
  • |´・ω・)ノ
  • ヾ(≧∇≦*)ゝ
  • (☆ω☆)
  • (╯‵□′)╯︵┴─┴
  •  ̄﹃ ̄
  • (/ω\)
  • ∠( ᐛ 」∠)_
  • (๑•̀ㅁ•́ฅ)
  • →_→
  • ୧(๑•̀⌄•́๑)૭
  • ٩(ˊᗜˋ*)و
  • (ノ°ο°)ノ
  • (´இ皿இ`)
  • ⌇●﹏●⌇
  • (ฅ´ω`ฅ)
  • (╯°A°)╯︵○○○
  • φ( ̄∇ ̄o)
  • ヾ(´・ ・`。)ノ"
  • ( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
  • (ó﹏ò。)
  • Σ(っ °Д °;)っ
  • ( ,,´・ω・)ノ"(´っω・`。)
  • ╮(╯▽╰)╭
  • o(*////▽////*)q
  • >﹏<
  • ( ๑´•ω•) "(ㆆᴗㆆ)
  • (。•ˇ‸ˇ•。)
  • 妖梦
  • 泡泡
  • 阿鲁
  • 颜文字

已有 2 条评论
  1. 其实我最近在用,多吉云,每个月 20G 流量,还有 HTTPS 免费流量。我在想,是否可以用很多身份证去注册 多吉云账户,然后去白嫖免费流量?

  2. 收藏了,以后可能会用到