阿里云的 CDN 和对象存储,我用了差不多十年。博客的图片、视频,还有攒了多年的音乐,都放在那个存储桶里——八万多个对象,六十多 GB。
今年四月,我面试了阿里云一个和 CDN 相关的岗位,最后对方给出的理由是:年龄。
两件事凑在一起,我把用了十年的东西整体迁走了:域名全部从他们的 CDN 切走,对象存储正在清,明年服务器到期也不再续费。

一、别的理由我都能接受,唯独”年龄”不行
面试本来就是双向选择。你完全可以说我技术栈不匹配,可以说岗位方向变了,可以说我学历不亮眼,甚至可以直接告诉我”内部已经定人了”——这些我都能接受,因为它们是判断。
但”年龄大了”不是判断,是筛选,它和我能不能把活干好没有半点关系。
更让我不舒服的是那个落差:我实实在在付了很多年的钱,CDN 和对象存储年年续费,在我看来是老客户,最后换来的就是这么一句理由。我不要求谁道歉,我能做的只是调整自己的技术选择——这也是这篇文章唯一的动机。
二、一篇 2019 年的旧文,被内容安全拦了
除了人,还有规则。
我 2019 年写的一篇文章,被内容安全判定为问题内容,页面没法正常访问。那篇写的都是自己的生活,不涉及任何技术风险,安安静静放了好几年,某天突然就不合格了。
平台要合规,我理解,也从没想过绕过任何一条规则。但当一次正常写作的代价变成”反复申诉、改写、还不确定什么时候又被判定”,这个平台对我的效用就非常有限了。规则我改不了,能改的是我的东西存在哪儿。
三、迁走其实并不难,我做了什么
真正的迁移只花了几个晚上,前提是:你得有一台常开的机器,以及一条能回家的网络通道。我的做法分四层。
存储分两套。 音乐一套,图片、视频、文档一套,物理上分开存放,互不影响。迁移时先把对象按前缀整体拉回本地,逐条比对键列表,确认本地是完整镜像、既不缺也不多,再去删云端的对象。这一步不能图快——对象存储没开版本控制,删错了就真的没了。事实上第一轮比对就抓出两百多个”只在云端、本地没有”的文件,如果当时直接删,那些东西就丢了。
取文件要带签名。 静态文件由非特权的 nginx 提供,只有带着有效时效签名的 URL 才能取到文件;签名由一个很小的 Python 服务签发,两者都用用户级 systemd 托管,开机自启。这样就算链接被人转出去,过了有效期也就失效了。
入口复用现有的公网服务器。 公网这边不新买机器,用已经在跑的那台做反向代理,经内网隧道回到家里的机器;域名解析全部交给 Cloudflare 管。完整链路是:域名 → Cloudflare → 公网入口 → 内网隧道 → 家里的机器。
算一笔账。 原来最大的开销是对象存储的外网出流量,按 GB 计费,忙时单价并不便宜。迁完之后这部分变成家里宽带的固定月费,存储是自己硬盘的,签名规则是我自己定的。唯一逃不掉的是迁移时的一次性出网流量费,几十 GB 也就几块到十几块钱,比起长期的账单可以忽略。
四、自建的代价,以及我不建议谁这么做
迁完不是万事大吉,我更想说的是代价。
家里断网、或者那台机器关机,博客的图片和音乐就打不开。这是自建最硬的代价,接受不了就别自建。
维护责任也全部转移到我这边:证书、签名、备份、监控,原本都属于云厂商”服务”的一部分,现在都是我自己的活。所以我又写了一个每天跑一次的体检脚本,检查域名解析、反代上游解析、证书文件是否存在、nginx 配置语法是否通过,有问题就提醒我。
写这个东西的起因很具体:有一条上游域名的解析记录早就被删了,而 nginx 配置里还写死着它,导致配置检查一直失败,那台机器九天都没能正常 reload——这种坑云厂商不会替你踩,只能自己盯。
所以什么时候不建议自建:如果你只是放几张图、偶尔访问,云上确实更省心,别为了情绪去做运维。只有当你本来就有常开的机器、并且真的被平台规则卡住了,迁移才划算。
五、明年,服务器也不续了
迁移不是一次性的动作,而是一次选择:把我能控制的那部分拿回来。
现在 CDN 已经切干净,对象存储正在清,文件库已经完整同步到自己的机器上;明年服务器到期,我不再续费。
说到底就一句话:技术方案随时可以换,被尊重这件事不能省。
评论
0 条评论