極端なロードエラー

ここで覚えておくべき重要な点は、「チャット」の実装では、実際のコンテンツを購読者にブロードキャストすることが一般的だということです。

Discourse では、この単純な実装を複雑にする非常に複雑なパイプラインが存在し、結果として大量のトラフィックが発生します。

  1. ユーザーが返信を投稿する
  2. トピックを閲覧しているすべてのユーザーが、ブロードキャストを通じて新しいコンテンツがあることを検知する
  3. すべてのユーザーがサーバーに投稿コンテンツを要求する(100 人の閲覧者 = 100 回のリクエスト)
  4. 画像の取得・最適化を行う
  5. トピックを閲覧しているすべてのユーザーが、ブロードキャストを通じて新しいコンテンツがあることを検知する
  6. すべてのユーザーがサーバーに投稿コンテンツを要求する(100 人の閲覧者 = 100 回のリクエスト)

(各種最適化、レート制限、再試行などを行っていますが、概ねこのような流れです)

これらのリクエストはすべて、ユーザーが投稿を閲覧する権限を持っているかなどを確認するためのセキュリティパイプラインを経由する必要があります。

もしコンテンツが比較的短く、セキュリティ処理を「ファストレーン」向けにより軽量な方法で実現できるのであれば、チャットメッセージをブロードキャスト経由で配信することが可能になります。これによりパフォーマンスが劇的に向上し、この設計であれば、低スペックな 2GB メモリの DigitalOcean ドロップレット 1 台で 1 万人のユーザーを処理できるかもしれません。

セキュリティは非常に複雑です。キャッシュの無効化の問題もあり、キャッシュ管理もまた複雑です。

したがって、はい、私たちはこの問題について真剣に検討しています。しかし現状では…

1 つのトピックに多数のログインユーザーが同時にアクセスし、かつそのトピックに大量の新しいコンテンツが投稿される場合、サーバー費用が膨大になります。