给网站配图这件事,很多人的起步都是找一个所谓的免费图床。用得越久越会发现,免费的那一类往往在最要命的地方打折:有的给图片偷偷压一道,有的访问速度时快时慢,还有的用着用着外链就失效了,首页一夜之间全是碎图。等你回过头去翻它的条款,才发现真正收费的那一项是流量,而图片站最费的恰好就是流量。这笔账平时看不出来,等到账单超出预期才追悔,而那时图片早就铺满全站了。
换个思路,把图片当成对象存储来放,再让CDN去分发,成本结构会清楚很多。Cloudflare R2就是这一类里被讨论得比较多的方案,原因也很直接:它的官方定价页把最重要的那一项标成了免费,出网流量不收钱。对图片挂在页面上被反复读取的场景来说,这一条几乎决定了整套方案的性价比。对任何一个靠图片内容撑起来的站点,这个差别足以改变整年的运营成本。
先把免费额度摆出来。按官方定价页的说明,R2每月免费提供10 GB-month的存储、100万次Class A操作和1000万次Class B操作,出网流量免费。需要留意的是,这一档免费只针对标准存储,不适用于低频访问存储那一档,后者的计费和读取规则都不一样,别把两档的额度混着算。选档之前先想清楚访问频率,图床这种天天被读的场景,标准档才合适。
Class A和Class B不是术语游戏,它对应的是两种不同性质的动作。Class A偏向写入和改变状态,典型的是上传对象、列出对象、复制对象;Class B偏向读取,典型的是下载对象、读头信息。免费额度里写的那两个数字,一个管写一个管读,所以你的图片站被访问得越频繁,消耗的主要是Class B那一千万次,这也是为什么小站的额度通常用不完。
还有一类操作是完全不计费的。官方把删除对象、删除存储桶、中止分片上传这三项列为免费操作。对图床这种会不断替换旧图的场景来说,这一点比看上去重要——你删掉的每一张旧图都不产生费用,清理历史图片不会变成一笔额外支出,也就没人会因为怕花钱而不敢删。
免费额度用完之后的单价也算清楚:标准存储是每GB每月0.015美元,Class A每百万次4.50美元,Class B每百万次0.36美元。把这几个数字和图片站的用量对一下会发现,读操作的单价远低于写操作,而真正贵的那一项,也就是出网流量,恰好被免掉了,整个成本结构因此变得很好预估。对小站而言,很多时候你连免费额度都用不满,账单长期稳定在零。
计费口径有个容易误算的地方。存储用的是GB-month,它按计费周期内每天的存储峰值取平均来算,不是简单看月底剩多少。举个例子,前五天存1GB、后二十五天存3GB,算下来是1乘5/30加上3乘25/30,约等于2.66 GB-month。另外官方明确,用量会向上取整到下一个计费单位,比如做了100万零1次操作,就按200万次算,误差永远朝着供应商那一侧走。
为什么出网免费这件事值得单独拎出来说?因为图片站的开销结构决定了流量才是大头。一个普通页面挂二十张图,一天几万次访问,日积月累的出网流量在按量计费的对象存储上是一笔真实的、而且随流量线性增长的钱。把这项免掉,等于把最不好预估的那部分成本固定住,你不会因为某天上了首页而收到一张意料之外的账单。这一点对付费能力有限的小站尤其友好,流量涨了不会立刻变成压力。
但免费不等于可以什么都不管。出网免费免的是流量费,不是访问本身。如果你的存储桶是公开可读的,别人把图片外链到自己的站上,或者有人拿你的地址当免费图床刷,消耗的是你的操作次数和后续的计费额度。所以存储桶的访问策略、防盗链、必要的限流该配还是要配,这些和用不用得出费用是两回事,前者管的是被谁用,后者管的是花多少钱。两件事分开处理,才不会顾此失彼。
实际部署时,常见的做法是把R2配上Cloudflare的缓存,让图片在边缘节点就近返回,源站只在缓存没命中的时候才会被读取。这样既压低了Class B的操作次数,也让首图加载快了一截。对以图片为主、访问又集中在几个热门页面的站点,缓存命中率通常很可观,源站的压力会比你预想的小。对于改版频繁的站点,缓存刷新也只需要针对变化的文件,不必整站重来。
图床选型的账其实不难算:存储是明面上的小钱,出网流量是暗处的大钱。R2的思路是把暗处那一笔直接免掉,让图片站的成本回到你实际存了多少这一个变量上。真正需要自己做功课的地方,反而回到了最基础的两件事——把访问权限收好,别让人拿去当公共图床;把图片在边缘缓存好,别让源站天天重复出力。
申请创业报道,分享创业好点子。点击此处,共同探讨创业新机遇!
