WebTorrent を使用してメディアオブジェクトを読み込む

こんにちは!私は、フリーソフトウェアを使用する写真家向けのコミュニティ https://discuss.pixls.us の管理者です。コミュニティからの寄付により運営費が賄われているのは幸運なことです。しかし、私たちが成長を続ける中で、それがいつまで持続可能かはわかりません。また、人々の寄付を費やすという仕事は非常に真剣に受け止めており、コスト削減の方法を模索しています。

私たちは画像制作に関わる者たちですので、当フォーラムは非常に画像が多いです。最も大きなコストは、圧倒的にアマゾン S3 の帯域幅コスト(ほとんどがエグレス帯域幅)です。S3 ストレージのコストは非常に少額です。

これらの画像やその他のメディアを、Peertube のように WebTorrent を経由して読み込めるようにできれば有益です。

この機能は、(1) サイトを訪れるユーザーが WebTorrent を介して他のユーザーからメディアをダウンロードすること、および (2) トorrent クライアントで購読できる何らかの RSS フィードを提供し、ユーザーが「スーパーシード」としてサイトに対して帯域幅を提供できるようにすること、の 2 つの側面があると捉えています。

「いいね!」 1

CDN を使わずに S3 を使っているなんて:scream::scream::scream:

エグレス料で破綻しないよう、S3 のアップロードを前面に置くために、少なくとも Cloudflare の無料プランでも CDN を導入すべきです。可能であれば、さらにエグレストラフィックを減らすために Origin Shield を有効にしてください。

オブジェクトストレージをアップロードに使用する(S3 のクローン)を確認してください。

「いいね!」 5

@Falco の回答をひたすら待っていました(:sweat_smile:)。S3 を Discourse の基準に合わせる素晴らしい仕事をしてくれました。

より安価な S3 互換オプションを検討することをお勧めします。データ量が非常に多い場合、S3 の次には Digital Ocean Spaces が事実上の標準選択肢となり、さらに価格を抑えるために BlackBlaze や Wasabi などの大容量ストレージに特化したプロバイダーを選ぶのも良いでしょう。

これを行うことで、帯域幅コストの大部分を削減できます(Wasabi は帯域幅の課金を行いません)。

また、パフォーマンス向上のために CDN を追加することもお勧めします。私のコミュニティは AdSense での収益がわずかなため、安価な CDN を探していたところ、BunnyCDN を見つけました。最速ではありませんが、役割を果たしており、すぐに運用を開始できます。

BunnyCDN の紹介リンク :see_no_evil:

この構成にすることで、請求額を大幅に削減できます。AWS S3 の前面に CDN を置くか、別の S3 プロバイダーと CDN を組み合わせるかのどちらかです。

@paperdigits さんが AWS の請求書に明記されている毎月のエグレストラフィックの正確な量を持っていると思いますので、それを使って CDN のコストを計算できます。

最初は S3 のままにして、CDN を追加するだけにしておくのが良いでしょう。

「いいね!」 6

ありがとう、CDN を調べてみますね。

WebTorrent は、私たちにコストはかかりませんよ :wink:

ほぼ確実ですが、それはどんなものよりも費用がかかるでしょう。Discourseサーバー(またはシードボックス)をすべてのメディアの真のソースまたはメインシードとして使用して、P2Pネットワークを構築する必要があります。

そのシードボックスは、各メディアファイルが異なるトレントファイルとなるため、リクエストごとに新しい接続が確立されるほどのリソースを備えている必要があります。WebRTCは非常に優れており効率的ですが、接続を確立することは通常、ウェブアプリケーションの中で最もリソースを消費する部分です。

何か見落としている可能性はありますが、これは非常に活発なコミュニティにとっては、決して簡単ではなく、リソースを大量に消費するセットアップになるでしょう。

「いいね!」 3

トルレントにはファイルシードが含まれているため、スウォームからファイルが利用できない場合は、S3 などの他のソースから読み込まれます。

Discourse アプリケーションはトルレント/マグネットリンクを提供するだけで、シードは行いません。画像が既に読み込まれているユーザーはそれらをシードし、さらにメディアアセットが従来の BitTorrent クライアントによってもシードされている場合、それらを使用できます。トルレントクライアントはブラウザ/クライアントサイドで動作するため、サーバーへの負荷はより多くの JavaScript を提供するだけです。

ユーザー向けに免責事項を追加していただけますか?例えば、私は制限付きのモバイル回線であなたのページにアクセスしています。投稿がバズった場合、私の限られた帯域幅がすべて消費されないように、制限付き回線からオプトアウトする方法はどうすればよいのでしょうか?

ファイルの読み込みにおいて、S3 を主要ソースとして使い続けることは、コストを大幅に節約することにはなりません。

それでも、シード者が接続を提供する必要があります。また、インターネット速度の違いにより、シード者の信頼性は保証されません。

もちろんです。ダイアログにトグルスイッチを追加する、設定の一部にする、あるいはプライバシーバガーのようなツールを使ってそのライブラリが読み込まれないようにするなどの方法があります。また、ブラウザがモバイルかどうかを検知して、完全に無効化する手もあります。いくつかの選択肢がありますよ。

これは一種のキャッシュのような仕組みです。メディアがシードされていない場合、ウェブソース(私たちの場合は S3)から取得します。ただし、WebTorrent は Transmission や rtorrent などの従来のトレントクライアントからもデータを取得できるため、私のようなシードラーが自宅の回線で大量のデータをシードするだけで済みます。実現可能にするためには、ほんの少数のシードラーで十分です。

その通りですが、それはコミュニティ全体で解決していくつもりです。

今は不可能ではありませんが、その機能をほぼ他のどの機能にもないレベルまで複雑にしてしまいました。Discourse チームが IE11 のサポートを廃止したのは、コードの保守があまりにも大変だったからです。このようなロジックを想像してみてください。もしかしたら Marketplace に行けば、それを採用してくれる人がいるかもしれません。

これをコア機能として持つことにほとんど利点が見当たりません。私は、コアに追加してほしいと以前から多く要望を出してきましたが、それらの多くはこれよりもずっと簡単に実現できるものです。

それらは正当に、明確かつ論理的な説明をもって却下されました(文句はありません)。

個人的にはこれを使うつもりもありませんし、動かそうとする動機もありません。CDN を前面に置く方が、より簡単で信頼性が高く、コストも安いですし、その後は放置しておけば済みます。

基本的な Cloudflare プランも同様です :wink: