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

2022-11-21 08:24:30 +08:00
 hzcer

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

📚 原理

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

✨ 特点

⚡ 性能

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

💸 价格

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

📝 备注

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

🏖️ 尝试一下

https://zh.fastblob.com/try

7160 次点击
所在节点    分享创造
59 条回复
suyuyu
2022-11-21 10:36:04 +08:00
要科学才能访问么
hzcer
2022-11-21 10:57:47 +08:00
@suyuyu 不需要
maggch97
2022-11-21 13:28:35 +08:00
使用境外服务器总是会遇到,某些城市的某个运营商的网络下无法访问。
hzcer
2022-11-21 13:42:04 +08:00
@maggch97 所以使用了多个不同地点不同服务商的服务器同时提供服务,这样就不会出现在某些城市的某个运营商的网络下无法访问的情况
maggch97
2022-11-21 13:44:59 +08:00
@hzcer 你提供的 sdk 总是需要去读 server list 的
swhhaa
2022-11-21 14:16:40 +08:00
我还以为是类似 115 / 6 盘之类的工具...细看才知道是分发...
hzcer
2022-11-21 14:37:45 +08:00
@maggch97 提供的 SDK 不需要读 Server List 的,靠的是 DNS CNAME 运行的。全程与用户交互的都是你自己的域名,没有涉及到 FastBlob 的 API 。
ClarkAbe
2022-11-21 14:50:52 +08:00
@hzcer 好吧...但还是希望能有一份 TOS 文件来列出服务范围......看了下支付是加密货币....感觉挺适合用来做资源分发的.....
1423
2022-11-21 15:01:44 +08:00
明明支持 h2 ,为什么会有这么多连接,有必要吗?
1423
2022-11-21 15:04:10 +08:00
感觉挺有意思的,mega.nz 的下载也是类似的玩法,不过 mega 的服务器似乎都在欧洲,而且感觉有限速。
ftxg
2022-11-21 15:06:14 +08:00
马克一下,最近可能有需要
hzcer
2022-11-21 15:26:25 +08:00
@1423 支持 H2 的,这个应该是 Surge 的显示问题?或者 Chrome 的调度问题?理论上 Chrome 应该会自动复用同一个 H2 链接的。
1423
2022-11-21 15:32:52 +08:00
@hzcer 看起来是 7.proxy.fastblob-endpoint.com. 这些没有 A 记录,所以在重试
1423
2022-11-21 16:08:19 +08:00
未来的 SNIProxy 模式难道不会被用于翻墙吗
这个服务目标是作为 cf 或其他 cos 的前端,但 cf 本身就可以这么玩吧
尤其 cf 的 ip 们虽在海外很容易都 anycast 到同临近地域,但在国内往往是不同的海外地域
是不是可以直接用本项目的思路直接给 cf 做加速
hzcer
2022-11-21 16:22:31 +08:00
@1423 sniproxy 确实有这样的问题,至于怎么防止这个问题要再考虑考虑。
应该可以,不同的域名 CF 优选不同 IP 。
SgtPepper
2022-11-21 16:37:56 +08:00
测试文件 firefox 无法下载 edge 可以
tftk
2022-11-21 16:44:44 +08:00
请教下适用场景是什么,跟 cdn 有啥区别呢?
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
2022-11-21 17:19:56 +08:00
@1423 前面还有
import fetch from "@fastblob/fastblob-fetch";

确实比较容易让人误解以为和 window.fetch 是同一个 fetch
hzcer
2022-11-21 17:21:05 +08:00
@tftk 比国内 CDN 便宜,比国外 CDN 快且便宜

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/896688

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX