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

做了一个快速(300M+)、不贵($1/TB)的文件下载分发服务

  •  8
     
  •   hzcer · 2022-11-21 08:24:30 +08:00 · 7605 次点击
    这是一个创建于 762 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于复杂的网络环境,分发大文件即痛苦又昂贵。因此做了一个快速、不贵的文件下载分发服务: FastBlob,目前速度可达 300M+。

    📚 原理

    服务端有多个遍布世界各地的节点,对源站的文件进行反向代理。客户端将下载进行分片,利用多线程进行同时下载,再通过现代浏览器的 stream 组合成一个 Response ,从而实现和 fetch 同样的接口。

    ✨ 特点

    • 用的是你自己的域名,支持 HTTPS ,后期会支持 SNIProxy
    • 目前提供了 JavaScript SDK ,可以直接替换 fetch ,无需修改代码
    • 适应电信、联通、移动等不同运营商的网络环境
    • 设置简单,只需要将域名 CNAME 一下即可
    • 修改 Request 和 Response 的 Header 设置
    • 没有单点故障,一个节点挂掉了也没关系
    • 可以快速的扩容,不用担心用的人多了导致速度变慢
    • IPv4 + IPv6

    ⚡ 性能

    试运行阶段目前只有 6 个节点,在电信测试下载速度达到了 300M+,后期会继续增加节点,提高下载速度。

    💸 价格

    目前试运行期间 $1/TB ,后期会根据运行情况进行调整。注册提供 50GB 的免费流量供尝试。

    📝 备注

    建议使用 Cloudflare R2 来作为源站,因为 Cloudflare 不收流量费,且 R2 在全球进行分发。

    🏖️ 尝试一下

    https://zh.fastblob.com/try

    59 条回复    2023-04-17 17:08:55 +08:00
    huyujievip
        1
    huyujievip  
       2022-11-21 08:58:46 +08:00 via iPhone   ❤️ 1
    ui 挺好看的
    xiangchen2011
        2
    xiangchen2011  
       2022-11-21 09:00:24 +08:00
    确实速度很快啊,赞
    star7th
        3
    star7th  
       2022-11-21 09:01:18 +08:00
    思路很好,国外的机器都能多线程到这个速度,确实让人眼前一亮。
    搭车宣传下,如果有需求国内网络的便宜 cdn 需求可以看看这个 https://www.dfyun.com.cn
    速度没有 lz 的文件下载分发快,不适合大型文件。但是国内线路稳定可靠,可用作各种小文件加速。
    star7th
        4
    star7th  
       2022-11-21 09:20:38 +08:00
    我再看了下,你这个仅仅做反向代理,不做内容缓存或者托管啊。这样算下来,源服务器的成本和带宽都可能成为瓶颈了。
    你多进程反向代理我源站,速度也是取决我的源站速度。而且流量层面都是要走一遍我的源站,我得付两次流量费用。
    再者,下载文件不能直接弹出来,需要等然后再点击一下,用户体验没那么友好。
    hteen
        5
    hteen  
       2022-11-21 09:26:15 +08:00
    "注册提供 50GB 的免费流量供尝试。"

    为什么我只有 5G 呢
    hccsoul
        6
    hccsoul  
       2022-11-21 09:27:12 +08:00
    没有中文为啥网址用 zh 开头
    hzcer
        7
    hzcer  
    OP
       2022-11-21 09:30:25 +08:00 via iPhone
    @hccsoul 因为 Cloudflare 速度太慢了,所以用 hk 的机器反代了
    ClarkAbe
        8
    ClarkAbe  
       2022-11-21 09:31:55 +08:00 via Android
    稳不稳, 会不会接受大陆机关审查......要是已经润了当我没说
    hzcer
        9
    hzcer  
    OP
       2022-11-21 09:34:06 +08:00 via iPhone
    @star7th 所以建议使用 Cloudflare R2 或者 Cloudflare over B2 ,或者找个流量联盟的机器套上 CF ,也都不收流量费用。做内容缓存和托管的话,因为服务器数量多,很容易碰到缓存不一致的问题。下载可以直接弹出来,新建 atag 并 atag.click 就可以。
    hzcer
        10
    hzcer  
    OP
       2022-11-21 09:37:12 +08:00 via iPhone
    @ClarkAbe 稳定性方面,这个项目脱胎于我自己其他项目的需求,所以不会随便放弃,其他项目也还需要这个项目。另外一个节点挂掉了也没关系,其他节点可以无缝顶上。隐私方面,之后会加上 SNIProxy 模式,这样的话 FastBlob 只是一个 TCP 的 relay ,不负责 TLS 。
    yehoshua
        11
    yehoshua  
       2022-11-21 09:41:22 +08:00
    测试下载直连无法下载.似乎挂梯子也不行.
    hzcer
        12
    hzcer  
    OP
       2022-11-21 09:46:35 +08:00 via iPhone
    @hteen 修复了
    hzcer
        13
    hzcer  
    OP
       2022-11-21 09:48:48 +08:00 via iPhone
    @yehoshua 系统和网络环境是啥?我这没问题
    yehoshua
        14
    yehoshua  
       2022-11-21 09:54:58 +08:00
    @hzcer Mozilla/5.0 (X11; Linux x86_64; rv:106.0) Gecko/20100101 Firefox/106.0 错误好像是 CORS Failed 网络是广东移动
    xdeng
        15
    xdeng  
       2022-11-21 09:56:51 +08:00
    思路不错 有同样的开源实现可以自己搭的那种吗
    hzcer
        16
    hzcer  
    OP
       2022-11-21 09:58:09 +08:00 via iPhone
    @yehoshua Firefox 对 CORS 的处理确实和其他浏览器不太一样,我需要再修改下源站的 CORS header 设置
    yanwen
        17
    yanwen  
       2022-11-21 09:58:56 +08:00
    @yehoshua 我也是这样的问题。无法下载。

    系统是 macos 10.15.7 浏览器 firefox 广州电信。
    hzcer
        18
    hzcer  
    OP
       2022-11-21 09:59:15 +08:00 via iPhone
    @xdeng 随便使用一个 web server 反代就可以了
    yehoshua
        19
    yehoshua  
       2022-11-21 10:00:39 +08:00
    @hzcer 这么一说,我换 chrome 确实是好的.
    hzcer
        20
    hzcer  
    OP
       2022-11-21 10:01:40 +08:00 via iPhone   ❤️ 1
    @yanwen
    @yehoshua
    你们可以先用 Chrome 测试一下,这个是背后源站的设置问题,跟 FastBlob 中间层没啥关系。
    suyuyu
        21
    suyuyu  
       2022-11-21 10:36:04 +08:00
    要科学才能访问么
    hzcer
        22
    hzcer  
    OP
       2022-11-21 10:57:47 +08:00 via iPhone
    @suyuyu 不需要
    maggch97
        23
    maggch97  
       2022-11-21 13:28:35 +08:00 via Android
    使用境外服务器总是会遇到,某些城市的某个运营商的网络下无法访问。
    hzcer
        24
    hzcer  
    OP
       2022-11-21 13:42:04 +08:00
    @maggch97 所以使用了多个不同地点不同服务商的服务器同时提供服务,这样就不会出现在某些城市的某个运营商的网络下无法访问的情况
    maggch97
        25
    maggch97  
       2022-11-21 13:44:59 +08:00 via Android
    @hzcer 你提供的 sdk 总是需要去读 server list 的
    swhhaa
        26
    swhhaa  
       2022-11-21 14:16:40 +08:00
    我还以为是类似 115 / 6 盘之类的工具...细看才知道是分发...
    hzcer
        27
    hzcer  
    OP
       2022-11-21 14:37:45 +08:00
    @maggch97 提供的 SDK 不需要读 Server List 的,靠的是 DNS CNAME 运行的。全程与用户交互的都是你自己的域名,没有涉及到 FastBlob 的 API 。
    ClarkAbe
        28
    ClarkAbe  
       2022-11-21 14:50:52 +08:00
    @hzcer 好吧...但还是希望能有一份 TOS 文件来列出服务范围......看了下支付是加密货币....感觉挺适合用来做资源分发的.....
    1423
        29
    1423  
       2022-11-21 15:01:44 +08:00
    明明支持 h2 ,为什么会有这么多连接,有必要吗?
    1423
        30
    1423  
       2022-11-21 15:04:10 +08:00
    感觉挺有意思的,mega.nz 的下载也是类似的玩法,不过 mega 的服务器似乎都在欧洲,而且感觉有限速。
    ftxg
        31
    ftxg  
       2022-11-21 15:06:14 +08:00 via Android
    马克一下,最近可能有需要
    hzcer
        32
    hzcer  
    OP
       2022-11-21 15:26:25 +08:00
    @1423 支持 H2 的,这个应该是 Surge 的显示问题?或者 Chrome 的调度问题?理论上 Chrome 应该会自动复用同一个 H2 链接的。
    1423
        33
    1423  
       2022-11-21 15:32:52 +08:00
    @hzcer 看起来是 7.proxy.fastblob-endpoint.com. 这些没有 A 记录,所以在重试
    1423
        34
    1423  
       2022-11-21 16:08:19 +08:00
    未来的 SNIProxy 模式难道不会被用于翻墙吗
    这个服务目标是作为 cf 或其他 cos 的前端,但 cf 本身就可以这么玩吧
    尤其 cf 的 ip 们虽在海外很容易都 anycast 到同临近地域,但在国内往往是不同的海外地域
    是不是可以直接用本项目的思路直接给 cf 做加速
    hzcer
        35
    hzcer  
    OP
       2022-11-21 16:22:31 +08:00 via iPhone
    @1423 sniproxy 确实有这样的问题,至于怎么防止这个问题要再考虑考虑。
    应该可以,不同的域名 CF 优选不同 IP 。
    SgtPepper
        36
    SgtPepper  
       2022-11-21 16:37:56 +08:00
    测试文件 firefox 无法下载 edge 可以
    tftk
        37
    tftk  
       2022-11-21 16:44:44 +08:00
    请教下适用场景是什么,跟 cdn 有啥区别呢?
    1423
        38
    1423  
       2022-11-21 16:57:50 +08:00
    不了解前端,请教一下,SDK 的示例是不是有问题
    ```
    const url = "https://example.website.fastblob.com/big-buck-bunny/Big%20Buck%20Bunny_1080p_30fps.mp4";

    const response = await fetch(url);
    const blob = await response.blob();
    const newURL = URL.createObjectURL(blob);
    console.log(newURL);
    ```
    上面会报错,改成 const url = "https://3.example.website.fastblob.com/big-buck-bunny/Big%20Buck%20Bunny_1080p_30fps.mp4"; 这样才可以,但下载源就只有一个了
    hzcer
        39
    hzcer  
    OP
       2022-11-21 17:19:56 +08:00 via iPhone
    @1423 前面还有
    import fetch from "@fastblob/fastblob-fetch";

    确实比较容易让人误解以为和 window.fetch 是同一个 fetch
    hzcer
        40
    hzcer  
    OP
       2022-11-21 17:21:05 +08:00 via iPhone
    @tftk 比国内 CDN 便宜,比国外 CDN 快且便宜
    itfanr
        41
    itfanr  
       2022-11-21 18:18:22 +08:00
    厉害啊
    vincent321
        42
    vincent321  
       2022-11-21 18:43:51 +08:00
    卡一个
    whileFalse
        43
    whileFalse  
       2022-11-21 22:46:39 +08:00 via iPhone
    1 刀 1t ,这个定价 cover 得住吗
    lizhenda
        44
    lizhenda  
       2022-11-21 23:26:26 +08:00
    360 极速无法下载,Chrome 可以
    hzcer
        45
    hzcer  
    OP
       2022-11-21 23:52:12 +08:00
    @whileFalse 用的都是比较便宜的大流量服务器,成本上还是 cover 得住的。不过这只是试运行的优惠价,后续还是要根据具体的运行成本进行重新定价的
    hzcer
        46
    hzcer  
    OP
       2022-11-21 23:56:46 +08:00
    @whileFalse 目前这个定价确实有点慈善定价了,为了后期的可持续发展以及人力开发成本还是要调整定价的,目前更多的还是看看这个的市场需求有多大以及进行一下 Alpha 测试。
    edis0n0
        47
    edis0n0  
       2022-11-22 09:02:25 +08:00
    我为什么不用免费不限速的 wetransfer 呢,盈利方式是网页背景图广告,公司规模还不小,基本不用担心文件被篡改或不稳定,随时满速
    hzcer
        48
    hzcer  
    OP
       2022-11-22 10:17:15 +08:00
    @edis0n0 文件分享服务现在市面上很多了,这个更多是分发服务。FastBlob 的受众更多是网站站长,是类似 CDN 的一个服务。
    haoxuexiaoyao
        49
    haoxuexiaoyao  
       2022-11-22 12:11:09 +08:00
    有开源的分发么
    garyvalue
        50
    garyvalue  
       2022-11-22 16:42:06 +08:00
    支持网站反代吗
    fox233
        51
    fox233  
       2022-11-23 06:32:05 +08:00
    用不了阿 不支持国内付款吗
    macy
        52
    macy  
       2022-11-23 18:06:58 +08:00
    除了网页端,能用命令行下载么?
    Envov
        53
    Envov  
       2022-11-23 19:20:30 +08:00
    做的很好,唯一问题就是害怕跑路
    flyqie
        54
    flyqie  
       2022-11-23 21:28:37 +08:00
    UI 这边捉个虫:

    https://hk.dash.fastblob.com/billing 的 Add Bandwidth 可输入负数。。
    hzcer
        55
    hzcer  
    OP
       2022-11-24 09:08:28 +08:00
    @macy 目前没法,但你可以用 Node.js 封装一个。之后应该会出 Golang SDK ,这样就可以编译成命令行了。
    hzcer
        56
    hzcer  
    OP
       2022-11-24 09:09:18 +08:00
    @haoxuexiaoyao 目前没有开源的,你可以直接用 webserver 反代
    hzcer
        57
    hzcer  
    OP
       2022-11-24 09:10:05 +08:00
    @garyvalue 网站反代不在支持的范围内
    360kabasiji
        58
    360kabasiji  
       2023-02-14 07:15:27 +08:00
    大佬停止维护了吗?
    aec4d
        59
    aec4d  
       2023-04-17 17:08:55 +08:00
    挺厉害的,下载很快
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2762 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 09:34 · PVG 17:34 · LAX 01:34 · JFK 04:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.