前言

距离上一次更新似乎又过去了很久,而我也成为了无聊的大人,被实习的工作压的喘不过气来。(此中又有不少波折,待尘埃落定,我再找机会记录它吧。)

我的青春更是早在不知何时已经结束了。

看,简单吧,谁也没有受伤的世界,达成了。

upyun

又拍云并非我的第一个 CDN,但它的确是我截至今日使用最久的 CDN。

而我相信它也是新站长值得一试的服务。

此中玄机,我们不妨先从 CDN 说起。

引子

拜前些日子的便携小空调所赐,我的网站骤然迎来了前所未有的访问量。👴🔥 了。

以至于依托于 LeanCloud 的评论区,每日总是早早超过免费调用限额,而瘫痪不起。

小空调最初最火的几天并没有添加谷歌统计,而 Cloudflare 显示的单日数据便已 UV 破千万,PV 更是破亿。
依靠小空调页脚灰色不起眼的文字链接,我的小站从 2021-05-07 至 2021-06-07 的一个月里,谷歌统计中的用户数也达到了 411357,最高同时在线人数也见过上万的数字。

那么我是如何依靠一己之力(低成本)抗下所谓「千万级」高并发呢?

首先从架构上来说我的整个站点是一个静态网站,这也是最为重要的一点。

我的博客采用 hexo(一个静态博客框架-生成器) + hexo-theme-yun(我自定义的功能主题)进行搭建。
所有的文章在使用 Markdown 编写后,都会被编译为纯静态的 HTML 文件,也就是说它可以作为纯静态文件托管在如 GitHub Pages 等平台,而无任何后端。

这也是相比其他诸如 Wordpress、Typeecho 等博客系统最大的区别,因为此类博客系统往往意味着你需要一台额外的服务器来部署后端。
而一旦你的博客与后端产生交互,用户数不断攀升之时,对你服务器的性能(你的钱包)要求也无疑是巨大的挑战。

现在有许多可以提供静态站点托管的服务商(大善人)。(谢谢你们!)

  • GitHub Pages: 学生免费申请 Pro 账户后,可支持私有个人仓库(GitHub 国内速度欠佳)
  • Netlify: 支持私有个人/组织仓库(国内速度可能欠佳)
  • Vercel: 支持公开仓库(私有仓库须付费)(最近域名同样开始被屏蔽,国内速度可能欠佳)
  • Cloudflare Pages: 支持私有个人/组织仓库

你仅需提供静态文件,他们便可以为你托管网站,而且可以自定义域名,而无须操心其他任何后端维护的事情。

当然他们也不是万能的,这些网站免费账号往往会有一个流量带宽的限制,以及并发数的限制,且国内速度欠佳。
我此前的一个托管在 GitHub Pages 的站点,还曾见过页面出现超出并发限额的提示。

这时候便该轮到 CDN 出马了。

什么是 CDN?

CDN 的全称是 Content Delivery Network,即内容分发网络。
CDN 是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。

更多的内容您可以参见 CDN | 百度百科

简而言之,CDN 做的事情就是将你的站点静态文件缓存在各个城市的节点,一旦有人访问你的站点,CDN 便会让其去最近的节点取资源,使得网站的访问速度尽可能提高。也分担了站点的访问压力。

小空调最终采取的方案是 Cloudflare,Cloudflare 是一家云服务商,它同时提供了 DNS 解析、CDN、安全防护等服务。

我的域名解析便托管在其上,而其对解析的域名也默认提供了 CDN 的服务。(可自由选择开启关闭)
也正是借此,面对千万/上亿的流量我也毫无惧色,Cloudflare 本身也为很多著名网站提供了 CDN 和防护,算是值得信赖的老牌厂商。

使用 CDN 加速你的 GitHub Pages 网站 | 云游君的小站

为什么是又拍云?

诶,既然我这么夸 Cloudflare,为什么标题还是又拍云?

因为种种特殊原因,Cloudflare 在国内并无免费节点,因此在国内又被戏称为「减速 CDN」。

因此我的博客采用了又拍云的 CDN 服务,你也许可以发现我的主站点访问速度,相比同样内容但是托管于 Netlify 的镜像站要略快。

而国内同样也有不少云服务商,我也曾尝试过腾讯云、七牛云、阿里云的 CDN 服务。

对了,它们都有很重要的一点,那就是需要备案。所以你需要先确保的你可以接受实名备案,且你的域名是可以备案的。(即为 .com, .cn 等主流顶级域名,可参见 备案域名

  • 七牛云,每月赠送 10 GB HTTP 流量(HTTPS 收费),使用需要预充值 10 元,我充了后,其实基本就没怎么用了。
  • 阿里云通过购买流量包(有时限)进行计费,无免费额度,节点数量和速度应当是几个云服务商中的前列,但考虑到个人站长往往流量不大、且需要持续使用,很不划算。
  • 腾讯云每月赠送 10 GB CDN 流量,但此前网站被人刷了 CDN,且是后付费(意味着不是欠费立刻停止),所以便停用转至了又拍云。

此前我也曾在腾讯云和又拍云之间、反复横跳。但后来发现又拍云的确相比腾讯云多出了几个吸引我的地方。

又拍云联盟

又拍云有一个名为「又拍云联盟」的活动。

即在页脚挂上又拍云的 LOGO(就像本站页脚一样),便会每月赠送 10 GB 存储空间和 15 GB 流量。
而现在则直接折算为等额的代金券,按年发放,这相比其他的(白嫖)方案赠送额度更多,且更为方便。

譬如倘若某一个月流量较少,某一个月流量较多,都可以共享这张代金券。
而若是按照腾讯云按月 10 GB 的制度,某个月没有用到 10 GB,就显得亏了,某个月不小心用超了,却又需要多付上一些钱财。

WebP 自适应

又拍云支持 WebP 自适应功能

Webp 是谷歌针对网页推出的新一代图片格式,进一步减少了图片(动图也可)大小,虽然我也不知道他们怎么做到的,但是 WebP 格式的图片的确往往比 JPG 图片要小上许多。

对了,顺便安利一个谷歌出品的在线图片压缩工具 Squoosh

当然与之对应的是解码时间的增加以及兼容性。

但谷歌已在 Chrome 浏览器中提供了 WebP 原生支持,而解码的时间相比图片压缩节约的传输时间可谓小巫见大巫。

目前基本所有主流浏览器都支持了 WebP 格式,但是仍有冥顽不化者,没错,那就是苹果家的 Safari。(IE:我已经连主流都不配了吗?)

连 IE 都有勇气问你 是否要将它设成预设浏览器 你他妈的却跟我说你没勇气和喜欢的人告白

2020 年 macOS 11 Big Sur 和 iOS 14 上的 Safari 14 也已经支持 WebP 了。

我也将博客内的部分图片全部转为 WebP 格式,但是后来朋友告诉我苹果手机无法正常加载图片,最后不得不作罢。
而又拍云提供的 WebP 自适应功能无疑是我期待的。根据设备来决定返回 JPG 还是 WebP 格式,而我要做的只是把图片托管在又拍云的云存储中。

云存储 - 图床

说到云存储,其实各大云服务商都有各自类似的服务。腾讯云的叫作为对象存储(Cloud Object Storage,COS),阿里云的则叫作对象存储 OSS(Object Storage Service)。

博客图片对于站长来说有时是一个大难题,一是图片逐渐增多时、体积和备份的问题,二则是图片加载往往会占用不少带宽。
所以我的博文也总是尽量以文字为主,偶尔穿插进几张图片。

写 Markdown 时,图片往往是使用链接的方式放在文章中,这是便会用到我们所说的图床。
即上传自己的图片,它提供一个可以访问的链接给你。

有一些公共的图床服务,譬如 sm.ms路过图床
你可以使用它们,但是图片往往会被审核、而在你毫不知情的情况下被删除,而使用的图床服务较为小众,还有跑路的风险。
我博客此前不少的图片放在了 sm.ms 上,但是后来一段时间它在国内常常无法正常加载。

所以最后我基本都将其迁移至了又拍云的云存储,一是我可以享受又拍云独有的 WebP 自适应功能,二则是我可以共用我的代金券(继续白嫖),且在国内能有一个还不错的访问速度。

全球加速

虽然咱的博客基本都是中文,面向国内的,但是谁不想走向世界国际化呢?我自然也希望她(我的博客)能在国外同样可以流畅地打开。

而腾讯云赠送的 CDN 流量则只支持国内加速。又拍云则同样提供了全球加速的选项。

源站资源迁移

我的博客本质还是托管于 GitHub Pages 上的,而解析上 CNAME 解析到了又拍云的 CDN,又拍云的 CDN 去回源(也就是加载我 yunyoujun.github.io 的资源),并缓存迁移到又拍云的服务器上。

这意味着,即便 GitHub 突然宕机(出现好几次了,哈哈哈),我的站点仍然可以借助又拍云缓存的站点内容得以正常访问。
这也一并解决了 GitHub 拒绝百度爬虫的问题,让站点可以被百度正常检索。

详情可参见我的这篇文章 让百度收录你的 GitHub Pages 博客 | 云游君的小站


其他

此外,我潜伏进了又拍云联盟群,参与过一次抽奖活动,幸运地抽到了一个又拍云马克杯。(杯子在家,木有照片)
我也在一些知名开源项目的赞助商列表里看到了又拍云的身影,譬如 APlayer 等。
因此,又拍云给我留下的印象挺还算不错。

好,说了这么多优点,本着一分为二的辩证思维,有没有什么缺点?

仔细想来,也有几个。

  • 又拍云从体量上来说,自然不能和腾讯云、阿里云这些国内大厂商相比,因此节点/访问速度/稳定性可能略逊一筹,但对于我们(白嫖的)个人站长来说,却几乎可忽略不计
  • 还有一点就是我并没有找到一个按钮来设置超额自动停止 CDN 服务的功能,当使用费用超过我的代金券时,它会变为欠款,而不是自动停止你的 CDN 服务,回源 GitHub Pages (当然其他几个云服务商这一点上也半斤八两)

当然,最最后还有最重要的一点,也是让我确信我会继续使用又拍云的原因。

因为小空调的大火(我此前是走的又拍云 CDN),我害怕我的钱包吃不消,于是联系了又拍云,对面很爽快地给了 1000 元代金券的赞助。
所以今年的 CDN 费用基本可以衣食无忧。
这此前也是我一直烦恼的事情,以前赠送的额度基本绰绰有余,但随着站点的访问量越来越大,开始有些入不敷出了。也算解了我的燃眉之急。

又拍云 1000 元代金券

而这也毫无疑问是本篇文章诞生的原因。

在此插播一则广告~

又拍云 CDN

然后这里是咱的 又拍云返利链接,从这里注册并消费我会吃到回扣!(当然其实又拍云联盟赠送的量对于个人来说就基本够用了。赠送的额度不够用的时候,说明有很多人在关注你啦,就去找又拍云合作吧!)

又拍云大使介绍

如何使用 CDN ?

也许你可以参考这篇文章 使用 CDN 加速你的 GitHub Pages 网站 | 云游君的小站

之后也许会在这里再详细介绍一下我的又拍云 CDN 解析是如何设置的?


好,就是这样,下次见!

也祝你的站点访问速度越来越快!


To Be Continued.