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

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

  •  7
     
  •   hzcer · 79 天前 · 5611 次点击
    这是一个创建于 79 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于复杂的网络环境,分发大文件即痛苦又昂贵。因此做了一个快速、不贵的文件下载分发服务: 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

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

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

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

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

    https://hk.dash.fastblob.com/billing 的 Add Bandwidth 可输入负数。。
    hzcer
        55
    hzcer  
    OP
       76 天前
    @macy 目前没法,但你可以用 Node.js 封装一个。之后应该会出 Golang SDK ,这样就可以编译成命令行了。
    hzcer
        56
    hzcer  
    OP
       76 天前
    @haoxuexiaoyao 目前没有开源的,你可以直接用 webserver 反代
    hzcer
        57
    hzcer  
    OP
       76 天前
    @garyvalue 网站反代不在支持的范围内
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   3230 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 50ms · UTC 14:22 · PVG 22:22 · LAX 06:22 · JFK 09:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.