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

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

  •  1
     
  •   otakustay · 241 天前 · 2448 次点击
    这是一个创建于 241 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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。因为同时也是给自己产品用的,所以有毒就真的同归于尽了。
    17 回复  |  直到 2019-08-11 18:30:51 +08:00
        1
    missdeer   241 天前
    支持 github 么
        2
    missdeer   241 天前
    好吧,请忽略我的无脑提问
        3
    842891024   241 天前
    回源站是多层么?

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

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

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

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

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

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

    如果是百度官方提供的,,那 code.baidu.com 能关一次,这个 code.bdstatic.com 也一样能关一次???
        17
    otakustay   14 天前
    @longyongcai 事实上我根本不知道 code.baidu.com 是怎么泄露到外面的,这东西就是个公司内部的工具……你觉得一个 CDN 用的是 baidu.com 这种有 cookie 的域名能是正常现象么……
    另外,baidu.combdstatic.com 这域名可不是个人掏钱就能用到的。和原本的 code.baidu.com 最大的区别在于,code.baidu.com 事实上是一个手动维护的服务,维护的成本只会越来越高。而这一个是全自动无人值守的,全部基于云来实现的,放在那边都不用管它
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1974 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 15:42 · PVG 23:42 · LAX 08:42 · JFK 11:42
    ♥ Do have faith in what you're doing.