V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
otakustay
V2EX  ›  分享创造

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

  •  1
     
  •   otakustay · 2018-12-27 10:17:58 +08:00 · 6628 次点击
    这是一个创建于 2184 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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   ·   实用小工具   ·   4060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:17 · PVG 13:17 · LAX 21:17 · JFK 00:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.