Mastodonのメディアプロキシについては、恐らくほとんど知られていないと思いますので、少し解説。
まず、Mastodonはリモートから届いた投稿やユーザー、カスタム絵文字などのメディアを、自身の管理下のストレージに保存(キャッシュ)します。
Mastodonは、ユーザーの行動を解析・トラッキングさせない工夫として、外部へのアクセスをサーバが代行し、タイミングをずらし、直接参照させないようにしています。
また、不安定なネットワークではなく、キャッシュした情報から提供することで安定したアクセスを保証し、
不正な情報の埋め込みや、位置情報などの意図しない漏洩を避けるための事前処理をしています。
軽量なサムネイルも生成します。
さて、キャッシュはずっと保持していると延々と増え続けるため、運用上、古いキャッシュを定期的に破棄することが多いです。
この時、メディアが見られなくなってしまっては不便なので、ユーザーが表示しようとしたタイミングで再取得するようになっています。
この代行をメディアプロキシが行っています。
Mastodonは、メディアのURLの代わりにメディアプロキシのURLを渡します。ブラウザやクライアントがそれを表示しようとすると、そのタイミングで再取得してから渡しています。
#fedibird #fedibird_info メディアプロキシの働き・仕組みについては別項で書きました。
https://fedibird.com/@noellabo/110365382404522467
さて、fedibird.com固有の事情ですが、
メディアサーバの引っ越しにあたって、ローカルのデータは完全移行(何か取りこぼしてる可能性はありますが)できましたが、
リモートのキャッシュは全て複製しきれず、添付画像の古いものの大部分は旧サーバに置いてきました。(そして破棄しました)
これを、まだデータを保持しているつもりになっているデータベースから、保持している記憶を忘れてもらい、必要なタイミングでメディアプロキシが働くようにしてあります。
この再取得は、ブーストで古い投稿が再びタイムラインに流れたときや、アカウントの投稿一覧・画像一覧から表示した時に働きますが、
Mastodonの標準のレートリミット(ひとりあたり一定期間のアクセス数を制限する仕組み)が10分に30回だけと、非常に厳しく設定されています。
Webプロセスに負荷がかかるので妥当な設定だと思いますが、fedibird.comはそれなりに処理能力がありますし、再取得が集中しますので、
暫定的に1分に300回まで解放しています。 [参照]
#fedibird #fedibird_info 低解像度サムネイル関係の設定が増えました。
低解像度サムネイルを使う設定を有効にした時に、
WebUIのアカウントのカラムでフルサイズの画像を表示するための機能を追加しました。
アバターとヘッダーが別になっています。
タイムライン上では低解像度の軽い画像を見つつ、しっかり確認したい場合に綺麗に見られるという設定です。
この設定を有効にすると、サーバがAPIで返すアカウントの情報に、avatar_fullとavatar_full_static、header_fullとheader_full_staticを追加するようになります。URL文字数分、わずかですが、転送データが多くなりますので承知しておいてください。
なお、転送量を少なくする設定には他にもあります。
『アニメーションGIFを自動再生する』をオフにしておくと、アバターや絵文字のアニメーションがオフになりますが、同時にデータもかなり軽くなります。
『被フォロー状態をフォローボタンに反映する』をオフにしておくとrelationship確認のAPIコールが減ります。
『リアクションのストリーミングを無効にする』ことでストリーミングも少なくなります。
上手に活用してください。