Cloudflare近日宣布,已将开源JavaScript与CSS库CDN服务cdnjs全量迁移至自家Developer Platform。这意味着原来分散运行在Cloudflare与Google Cloud Platform(GCP)上的发布基础设施,现已由Workers、R2、Workflows、Queues、Durable Objects、KV及Containers等组件全面替代。 在这一迁移过程中,R2成为已发布包文件的唯一真源(source of truth),同时保留了原有URL结构、包内容及子资源完整性(SRI)哈希值。显然,这一设计的核心目标是保持对存量用户的零干扰兼容。 Cloudflare方面披露,cdnjs当前每日处理约90亿次请求,平均每秒约10.8万次,流量覆盖全球330多个Cloudflare数据中心。该服务的缓存命中率高达98.6%,全球约12%的网站都在使用cdnjs。Cloudflare表示,这次迁移本身也是对其开发者平台的一次“吃自家狗粮”(dogfooding)式的大型实战验证——以一个高流量公共服务为场景,测试自家平台的承载极限与稳定性。 实际上,这不是cdnjs第一次进行架构改造。2020年时,Cloudflare就已经将cdnjs的文件分发迁移至Workers与Workers KV,用这套组合替代了传统的专用源站服务器,同时仍保留外部源站作为兜底。彼时还引入了预压缩的Brotli与gzip资源,以提升传输效率。 不过,当时的发布链路仍然高度依赖Google Cloud。具体来说,Google Cloud Functions定期检查npm上是否有新包版本,Google Cloud Storage承担包文件的存储,Pub/Sub负责消息传递,另有一台运行git-sync的虚拟机负责同步仓库内容。整个系统使用26个按字母序分片的Cloud Functions来监控各包的更新。与此同时,cdnjs的GitHub仓库体量已膨胀至超过1.1 TB的打包存储,发布文件同时以两套形式存在于GitHub与KV之中。 新的架构则彻底扭转了这一局面:R2作为发布文件唯一真源,KV负责存储包元数据、版本信息及SRI哈希,Worker处理所有请求,Workers Cache提供缓存层,而已发布的包内容还会额外进行镜像备份。整个体系不再依赖任何Google Cloud组件。

打开网易新闻 查看精彩图片