做了一个 unpkg CDN,有没有人有兴趣试用 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
otakustay
V2EX    分享创造

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

  •  1
     
  •   otakustay 2018-12-27 10:17:58 +08:00 7342 次点击
    这是一个创建于 2485 天前的主题,其中的信息可能已经有所发展或是发生改变。
    https://code.bdstatic.com/npm/[email protected]/dist/jquery.js
    基本规则是 https://code.bdstatic.com/npm/{package}@{version}/{path}
    可以不写 path,如 https://code.bdstatic.com/npm/[email protected] 会重定向到主文件,但不建议现在使用,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。因为同时也是给自己产品用的,所以有毒就真的同归于尽了。
    30 条回复    2022-06-10 11:09:01 +08:00
    missdeer
        1
    missdeer  
       2018-12-27 14:07:31 +08:00
    支持 github 么
    missdeer
        2
    missdeer  
       2018-12-27 14:08:31 +08:00
    好吧,请忽略我的无脑提问
    842891024
        3
    842891024  
       2018-12-27 14:25:50 +08:00
    回源站是多层么?

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

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

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

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

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

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

    如果是百度官方提供的,,那 code.baidu.com 能关一次,这个 code.bdstatic.com 也一样能关一次???
    otakustay
        17
    otakustay  
    OP
       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
        18
    netnr  
       2020-08-13 07:45:18 +08:00
    小站 all in
    netnr
        19
    netnr  
       2021-08-21 07:21:10 +08:00
    @otakustay 个人的好几个 npm 包被 ban,看心情吗,以前正常访问的包也 ban 了
    otakustay
        20
    otakustay  
    OP
       2021-08-21 13:44:43 +08:00
    @netnr 访问不了的包可以和我说,邮件给我就行 otakustay gmail
    netnr
        21
    netnr  
       2021-08-21 14:09:09 +08:00
    不用了,谢了,我麻烦,你也麻烦
    otakustay
        22
    otakustay  
    OP
       2021-08-21 21:24:47 +08:00
    @netnr 也不是 ban,有些包根据文件数量、尺寸之类的,同步会失败,失败多次以后就会自动进墓地了,但可以手动去捞出来,也可以在配置里声明此类包用特殊的同步逻辑确保同步
    netnr
        23
    netnr  
       2022-06-09 13:13:33 +08:00
    @otakustay Gzip 关了?流量暴涨近 10 倍
    otakustay
        24
    otakustay  
    OP
       2022-06-09 16:20:43 +08:00
    @netnr #23 没有啊,我用 Chrome 和 Safari 试了下现在是默认给 br ,应该 br 没有就会 gzip 。你看到的 Content-Encoding 头是啥?
    netnr
        25
    netnr  
       2022-06-09 18:56:40 +08:00 via Android
    我用的 edge 测试 sql.js 下载 10M+
    otakustay
        26
    otakustay  
    OP
       2022-06-09 20:27:27 +08:00
    @netnr #25 要不你给我个具体 URL ,sql.js 的入口文件本身也没这么大
    otakustay
        28
    otakustay  
    OP
       2022-06-10 09:34:59 +08:00
    @netnr #27 我改了一下配置,强开了 br 应该会好很多,现在手头上没有 edge 还没测,但 chrome 已经正常了
    netnr
        29
    netnr  
       2022-06-10 10:06:53 +08:00
    显示 br 正常了 1.5M ,别家的 gzip 才 1.1M ,怎么还没有 gzip 效果好
    otakustay
        30
    otakustay  
    OP
       2022-06-10 11:09:01 +08:00
    @netnr #29 只能说很神奇,技术上我得研究研究……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5421 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 08:28 PVG 16:28 LAX 01:28 JFK 04:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86