做了一个快速(300M+)、不贵($1/TB)的文件下载分发服务 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
protonme
V2EX    分享创造

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

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

    由于复杂的网络环境,分发大文件即痛苦又昂贵。因此做了一个快速、不贵的文件下载分发服务: 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
    502Chef
        1
    502Chef  
       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 开头
    protonme
        7
    protonme  
    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
    稳不稳, 会不会接受大陆机关审查......要是已经润了当我没说
    protonme
        9
    protonme  
    OP
       2022-11-21 09:34:06 +08:00 via iPhone
    @star7th 所以建议使用 Cloudflare R2 或者 Cloudflare over B2 ,或者找个流量联盟的机器套上 CF ,也都不收流量费用。做内容缓存和托管的话,因为服务器数量多,很容易碰到缓存不一致的问题。下载可以直接弹出来,新建 atag 并 atag.click 就可以。
    protonme
        10
    protonme  
    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
    测试下载直连无法下载.似乎挂梯子也不行.
    protonme
        12
    protonme  
    OP
       2022-11-21 09:46:35 +08:00 via iPhone
    @hteen 修复了
    protonme
        13
    protonme  
    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
    思路不错 有同样的开源实现可以自己搭的那种吗
    protonme
        16
    protonme  
    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 广州电信。
    protonme
        18
    protonme  
    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 确实是好的.
    protonme
        20
    protonme  
    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
    要科学才能访问么
    protonme
        22
    protonme  
    OP
       2022-11-21 10:57:47 +08:00 via iPhone
    @suyuyu 不需要
    penzi
        23
    penzi  
       2022-11-21 13:28:35 +08:00 via Android
    使用境外服务器总是会遇到,某些城市的某个运营商的网络下无法访问。
    protonme
        24
    protonme  
    OP
       2022-11-21 13:42:04 +08:00
    @maggch97 所以使用了多个不同地点不同服务商的服务器同时提供服务,这样就不会出现在某些城市的某个运营商的网络下无法访问的情况
    penzi
        25
    penzi  
       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 盘之类的工具...细看才知道是分发...
    protonme
        27
    protonme  
    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 文件来列出服务范围......看了下支付是加密货币....感觉挺适合用来做资源分发的.....
    slowman
        29
    slowman  
       2022-11-21 15:01:44 +08:00
    明明支持 h2 ,为什么会有这么多连接,有必要吗?
    slowman
        30
    slowman  
       2022-11-21 15:04:10 +08:00
    感觉挺有意思的,mega.nz 的下载也是类似的玩法,不过 mega 的服务器似乎都在欧洲,而且感觉有限速。
    ftxg
        31
    ftxg  
       2022-11-21 15:06:14 +08:00 via Android
    马克一下,最近可能有需要
    protonme
        32
    protonme  
    OP
       2022-11-21 15:26:25 +08:00
    @1423 支持 H2 的,这个应该是 Surge 的显示问题?或者 Chrome 的调度问题?理论上 Chrome 应该会自动复用同一个 H2 链接的。
    slowman
        33
    slowman  
       2022-11-21 15:32:52 +08:00
    @hzcer 看起来是 7.proxy.fastblob-endpoint.com. 这些没有 A 记录,所以在重试
    slowman
        34
    slowman  
       2022-11-21 16:08:19 +08:00
    未来的 SNIProxy 模式难道不会被用于翻墙吗
    这个服务目标是作为 cf 或其他 cos 的前端,但 cf 本身就可以这么玩吧
    尤其 cf 的 ip 们虽在海外很容易都 anycast 到同临近地域,但在国内往往是不同的海外地域
    是不是可以直接用本项目的思路直接给 cf 做加速
    protonme
        35
    protonme  
    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 有啥区别呢?
    slowman
        38
    slowman  
       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"; 这样才可以,但下载源就只有一个了
    protonme
        39
    protonme  
    OP
       2022-11-21 17:19:56 +08:00 via iPhone
    @1423 前面还有
    import fetch from "@fastblob/fastblob-fetch";

    确实比较容易让人误解以为和 window.fetch 是同一个 fetch
    protonme
        40
    protonme  
    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 可以
    protonme
        45
    protonme  
    OP
       2022-11-21 23:52:12 +08:00
    @whileFalse 用的都是比较便宜的大流量服务器,成本上还是 cover 得住的。不过这只是试运行的优惠价,后续还是要根据具体的运行成本进行重新定价的
    protonme
        46
    protonme  
    OP
       2022-11-21 23:56:46 +08:00
    @whileFalse 目前这个定价确实有点慈善定价了,为了后期的可持续发展以及人力开发成本还是要调整定价的,目前更多的还是看看这个的市场需求有多大以及进行一下 Alpha 测试。
    edis0n0
        47
    edis0n0  
       2022-11-22 09:02:25 +08:00
    我为什么不用免费不限速的 wetransfer 呢,盈利方式是网页背景图广告,公司规模还不小,基本不用担心文件被篡改或不稳定,随时满速
    protonme
        48
    protonme  
    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 可输入负数。。
    protonme
        55
    protonme  
    OP
       2022-11-24 09:08:28 +08:00
    @macy 目前没法,但你可以用 Node.js 封装一个。之后应该会出 Golang SDK ,这样就可以编译成命令行了。
    protonme
        56
    protonme  
    OP
       2022-11-24 09:09:18 +08:00
    @haoxuexiaoyao 目前没有开源的,你可以直接用 webserver 反代
    protonme
        57
    protonme  
    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     Solana     2608 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 43ms UTC 12:44 PVG 20:44 LAX 04:44 JFK 07:44
    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