做了一个 unpkg CDN,有没有人有兴趣试用

2018-12-27 10:17:58 +08:00
 otakustay
https://code.bdstatic.com/npm/jquery@3.3.1/dist/jquery.js
基本规则是 https://code.bdstatic.com/npm/{package}@{version}/{path}
可以不写 path,如 https://code.bdstatic.com/npm/jquery@3.3.1 会重定向到主文件,但不建议现在使用,CDN 不会缓存 301,正在跨部门地合作增加这个能力

我们不支持 @latest 等范围型版本,因为我们相信这是不符合生产环境对依赖的稳定性要求的。
当前因为服务刚完成不久,CDN 没有足够的热度,首次访问可能会需要几秒,CDN 上有缓存以后就快了

Q:技术上的实现?
A:没有直接使用 unpkg,后面是一个 NPM 的同步服务,它同时用于我们内部的 NPM 镜像的同步,以及 CDN 服务。同步正常延迟为 5 分钟,上游为淘宝镜像。

Q:为什么不用 unpkg ?
A:unpkg 是按需加载,即第一次访问一个包的时候进行同步并提供文件。我们的初始目的是配合内部的 NPM 镜像使用,“顺手”解压并变成了 CDN,所以是一个定时同步。

Q:稳定性等如何保证?
A:所有服务均由百度云提供,存储是百度云的对象存储,计算是百度云的函数计算,CDN 是百度云的 CDN,域名是百度的域名。这个服务同时支持百度自身的产品,因此是作为主流服务维护的。

Q:和 jsdelivr 的区别?
A:为了防止所谓的“投毒”事件出现,我们 CDN 回源也全部 HTTPS。因为同时也是给自己产品用的,所以有毒就真的同归于尽了。
6633 次点击
所在节点    分享创造
30 条回复
missdeer
2018-12-27 14:07:31 +08:00
支持 github 么
missdeer
2018-12-27 14:08:31 +08:00
好吧,请忽略我的无脑提问
842891024
2018-12-27 14:25:50 +08:00
回源站是多层么?

比如第一层是存放文件的静态服务器,第二层是用来从 npm 获取文件的后端服务,第三层直接是内部的 npm 或者 cnpm

毕竟 cdn 的逻辑能力较差,无法主动去爬取文件,如果定时主动爬取 npm 的文件同步到静态文件服务器,会产生大量的冗余,如果是有第二层的后端服务存在,收到请求时被动的爬取并同步文件到静态文件服务器,且 cdn 做了缓存就会好很多。

亦或者第二层的后端服务支持搜索功能,搜索时主动爬取文件同步到 cdn

= = 瞬间想了很多 2333
yanaraika
2018-12-27 15:21:39 +08:00
没有白名单感觉会被玩坏 不过百度估计也不差这些钱
otakustay
2018-12-27 15:36:35 +08:00
@842891024 回源只有第 1 层静态的,后面有定时任务从 NPM 获取增量同步到静态层里,是个生产和消费的关系,中间不耦合
就是你说的有大量冗余的模式,但这些冗余对我们内部是有用的,比如做代码分析、漏洞检查等,所以不算冗余
842891024
2018-12-27 16:04:25 +08:00
@otakustay 全量定时同步到静态层么,不然的话会出现 cdn 回源到静态层 404 的情况出现吧
842891024
2018-12-27 16:05:35 +08:00
@otakustay 看了下 jsdelivr 的原理,他们似乎就是多层源站,如果静态层没有文件的话,回源到 s3 的服务器上去拉取文件,防止静态层文件 404 直接结束了
otakustay
2018-12-27 16:29:11 +08:00
@842891024 对,全量同步到静态层,还没同步到的就会回源 404,404 不缓存下一次还回源
jsdelivr 是多层的,遇到了就同步,但老实说我们的这个同步没那么高的成功率(因为我用了函数计算,只有 128M 的内存和 5 分钟的时长),可能会比较惨……
好在同步基本是 5 分钟一次,放到 1 分钟一次问题也不大
842891024
2018-12-27 19:22:30 +08:00
@otakustay npm 那么多的包全量同步这个时间感觉很可怕呀😂,要是之后的增量同步倒也还行,第一次同步会比较困难

其实如果要是全量同步到静态层,是不是更应该在 cnpm 那一层做,没网的 npm 同步官方库的时候一起把这个事给做了
shiny
2018-12-27 19:26:33 +08:00
这是百度云官方提供的吗,有没有介绍入口,收藏了。
otakustay
2018-12-27 22:33:40 +08:00
@842891024 因为有云函数计算,能达到非常高的并发量,所以 4 天同步完的。不过我们内部的 NPM 不是用 CNPM 的,所以也没有你说的 CNPM 那一层,用了一套自己的工具来做同步……

@shiny 是官方形式的,以前有一个 code.baidu.com ,后来种种原因没有继续维护,这个 CDN 就是以后的 code.baidu.com 服务,年底事情过多,所以官网还没做好
masahiro
2019-05-02 09:08:13 +08:00
楼主太赞了,全部换成你的啦
masahiro
2019-05-02 09:31:02 +08:00
悲剧了,通过 type=module 引用,直接跨域报错
DawnLight
2019-05-16 22:48:00 +08:00
有个日本 Softbank 的用户反馈响应超时,方便排查下问题嘛
code.bdstatic.com 可以正常响应,具体到某个文件就超时了
otakustay
2019-05-17 10:01:15 +08:00
@DawnLight 国内的吗?百度的 CDN 和海外 CDN 是分开的,所以事实上这东西并没有海外加速的能力……另外可以给我具体的 URL 我看一下
longyongcai
2019-08-11 14:03:35 +08:00
不明白是官方出的还是你个人自己掏钱用百度云产品+百度的域名来提供服务....

如果是百度官方提供的,,那 code.baidu.com 能关一次,这个 code.bdstatic.com 也一样能关一次???
otakustay
2019-08-11 18:30:51 +08:00
@longyongcai 事实上我根本不知道 code.baidu.com 是怎么泄露到外面的,这东西就是个公司内部的工具……你觉得一个 CDN 用的是 baidu.com 这种有 cookie 的域名能是正常现象么……
另外,baidu.combdstatic.com 这域名可不是个人掏钱就能用到的。和原本的 code.baidu.com 最大的区别在于,code.baidu.com 事实上是一个手动维护的服务,维护的成本只会越来越高。而这一个是全自动无人值守的,全部基于云来实现的,放在那边都不用管它
netnr
2020-08-13 07:45:18 +08:00
小站 all in
netnr
2021-08-21 07:21:10 +08:00
@otakustay 个人的好几个 npm 包被 ban,看心情吗,以前正常访问的包也 ban 了
otakustay
2021-08-21 13:44:43 +08:00
@netnr 访问不了的包可以和我说,邮件给我就行 otakustay gmail

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/521411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX