「フレンズ」のレイチェルのダンスGIFが数百ギガバイトに膨らみ、Discourse のバックアップを破壊した。
ディスコースは、現在22 000以上のコミュニティが存在する人気のオンライン討論プラットフォームです。
最近、サイトのバックアップ時に重大な問題が発生しました。1.6 MBのGIFファイルがユーザーによって246 173回コピーされ、ext4ファイルシステムのハードリンク制限を超え、バックアップサイズが377 GBまで増大しました。
以下は状況、原因、および解決策の詳細です。
1. 何が起こったか
- ディスコースでは絵文字やGIFファイルを任意のメッセージに挿入できます。
- ファイルを別のコンテキスト(例:個人チャットから公開投稿)へ移動すると、システムはランダムなSHA‑1ハッシュで新しいコピーを作成します。内容が同じでもディスコースはそれを新オブジェクトとみなします。
- その結果、同じGIFが数万件のメッセージやチャットに出現し、246 173個のコピーがext4の約65 000ハードリンク制限を超えました。システムはリンクではなく新しいファイルを作成し始め、181 000件のバックアップコピーが「失われ」ました。
2. 最初の解決策 – ハッシュ集計
- バックアップ時に同一ハッシュのファイルをグループ化。
- 各グループから最初のコピーのみをダウンロードし、残りはハードリンクで参照。
- しかしext4のリンク制限を考慮していなかったため、上限に達するとシステムはリンクではなく新ファイルを作成し、バックアップサイズが急増しました。
3. 新しい解決策 – EMLINKエラー時の「切替」
- 通常通りハードリンクを作成。
- ファイルシステムからEMLINK(リンク上限超過)エラーが返されたら、次のコピーを「メインファイル」として扱う。
- 以降は新しいメインバージョンに対して再びリンクを作成。
- この方法でリンク上限を超えるたびに親ファイルを切り替え、エラーなく動作します。任意のファイルシステムと互換性があり追加設定は不要です。
4. 結果と結論
- 「Friends」のリチャールダンスGIFが377 GBへのバックアップ増大の原因となった。
- ext4の約65 000ハードリンク制限が致命的な要因だった。
- ハッシュ集計による最初の解決策はファイルシステム制限を無視し、データ損失につながった。
- EMLINKエラー時の切替戦略により、大量コピーを正しく管理でき、バックアップ効率を維持できます。
> 「今ではジェニファー・アリストンがインフラストラクチャのストレステストを行えることが分かった」とディスコースは皮肉交じりにブログで述べました。
コメント (0)
感想を共有してください。礼儀正しく、話題に沿ってお願いします。
コメントするにはログイン