使用 WebTorrent 加载媒体对象

你好!我是 https://discuss.pixls.us 的管理员,这是一个供使用自由软件的摄影师们交流的网站社区。我们很幸运,目前的运营费用由社区捐赠覆盖,但随着我们不断成长,我不确定这种模式能持续多久。我也非常重视如何妥善使用大家的捐款,因此一直在思考如何降低我们的成本。

由于我们的用户都是图像创作者,论坛中充斥着大量图片。我们最大的开支是 Amazon S3 的带宽费用(几乎全是出站流量费用),而 S3 的存储成本则非常低。

如果能像 PeerTube 那样,通过 WebTorrent 来加载这些图片和其他媒体,将会对我们大有裨益。

我认为这一功能应包含两个方面:(1) 访问站点的用户通过 WebTorrent 从其他用户处下载媒体;(2) 提供某种 RSS 订阅源,让我可以在 torrent 客户端中订阅,从而让用户成为“超级种子”,仅为站点提供带宽支持。

1 个赞

你竟然在没有 CDN 的情况下使用 S3 :scream::scream::scream:

你真的应该部署一个 CDN,哪怕是 Cloudflare 的免费套餐,作为 S3 上传的前端,以免被出站流量费用压垮。如果可能,请启用 Origin Shield 以进一步减少出站流量。

查看 使用对象存储进行上传(S3 克隆)

5 个赞

我刚才真的在等 @Falco 回复(:sweat_smile:),因为他已经出色地将 S3 迁移到了符合 Discourse 标准的水平。

我会考虑更便宜的 S3 克隆方案。如果你拥有大量数据,DigitalOcean Spaces 是继 S3 之后的首选;或者选择像 BlackBlaze 或 Wasabi 这样专注于大容量存储的服务商,以进一步降低价格。

这样做可以大幅减少带宽成本,因为它们的带宽费率要低得多(Wasabi 甚至不收取带宽费用)。

此外,为了提升性能,我建议你添加一个 CDN。我最近也在寻找便宜的 CDN,因为我的社区通过 AdSense barely 盈利。我发现 BunnyCDN 虽然速度不是最快的,但完全够用,而且设置起来非常快捷。

BunnyCDN 推荐链接 :see_no_evil:

采用这种方案,你的账单将大幅减少。你可以选择在 AWS S3 前面部署 CDN,或者使用其他 S3 提供商搭配 CDN。

我认为 @paperdigits 的 AWS 账单上有准确的月度流出流量数据,我们可以据此计算 CDN 成本。

建议先继续使用 S3,并仅添加 CDN。

6 个赞

谢谢,我会去了解一下 CDN。

不过 WebTorrent 不会给我们增加任何成本 :wink:

我几乎可以肯定,这会比任何东西都更昂贵。你需要利用 Discourse 服务器(或种子盒子)作为所有媒体的唯一真实来源或主种子节点,来搭建一个 P2P 网络。

该种子盒子需要拥有足够的资源来应对每个请求发起的新连接,因为每个媒体文件都会是一个不同的种子文件。我知道 WebRTC 非常高效,但建立连接通常是 Web 应用程序中最消耗资源的环节。

除非我漏掉了什么,否则对于真正活跃的社区来说,这将是一个非平凡的设置,并且资源消耗巨大。

3 个赞

这些种子文件包含文件种子,因此如果种子群中无法获取该文件,则会从其他来源(例如 S3)加载。

Discourse 应用仅提供种子文件/磁力链接,并不进行做种。已加载图片的用户会对其进行做种;此外,如果媒体资源同时通过传统的 BitTorrent 客户端进行做种,这些客户端也可以被利用。种子客户端运行在浏览器/客户端端,因此服务器的负载仅仅是提供额外的 JavaScript 文件。

您能为用户添加免责声明吗?例如,我通过手机在计流量网络下访问您的页面,如何避免我的有限流量因帖子走红而被完全消耗?

您一直将 S3 作为加载文件的主要来源,这实际上并不能为您节省太多费用。

您仍然需要有做种者来提供服务,而且由于互联网速度各异,这些做种者可能并不稳定。

当然可以,您只需在对话框中添加一个切换开关,将其作为偏好设置的一部分,或者使用类似 Privacy Badger 的工具来阻止该库加载。或者检测浏览器是否为移动设备并完全禁用它。有很多选择。

它的工作原理类似于缓存。如果媒体没有被做种,它就会从网络源(在我们的案例中是 S3)拉取数据。然而,由于 WebTorrent 也可以从传统的 torrent 客户端(如 Transmission、rTorrent 等)拉取数据,我们可以有少数做种者(比如我自己),在我的家庭网络上做种大量内容。您实际上只需要少量做种者就能使这个方案可行。

确实如此,但我们将作为一个社区来解决这个问题。

现在并非不可能,只是你把功能复杂化到了几乎任何功能都达不到的程度。就像 Discourse 团队因为维护代码带来的麻烦,直接放弃了对 IE11 的支持。想象一下这种逻辑,也许如果你去 Marketplace 的话,会有人愿意尝试。

我实在看不出把它放在核心中的任何优势,而且我曾要求将许多更容易实现的功能添加到核心中。

这些请求被合理且清晰地解释后拒绝了(对此我没有抱怨)。

我个人不会使用它,也没有兴趣让它运行起来。在前方部署一个 CDN 并忽略它,会更简单、更可靠且更便宜。

基础版 Cloudflare 套餐也不会支持 :wink: