メインコンテンツへスキップ

大規模なソーシャルデータイベントへの備え方

国内外の大規模なイベントが発生すると、ソーシャルメディアプラットフォーム全体でユーザーアクティビティが劇的に急増することがよくあります。Super Bowl、選挙、世界各地での新年の祝賀行事のように事前に把握できるイベントもあれば、自然災害、突発的な政治イベント、ポップカルチャーの瞬間、COVID-19 のようなパンデミックといった予期せぬ出来事によってデータ量が急増することもあります。 このようなユーザーアクティビティの急増は、非常に短時間(秒単位)で収束する場合もあれば、数分間にわたって継続する場合もあります。いずれの要因によるものであっても、X からデータを取得しているアプリケーションに与える影響を検討することが重要です。以下では、チームが大規模なソーシャルデータイベントに備えるうえで役立つベストプラクティスを紹介します。

現在の filtered stream ルールを見直す

  • ブランドが大規模なスポーツイベントのスポンサーになるときのブランド言及のように、高トラフィックなイベントでは特定のキーワードが急増することがあります。
  • 不要なアクティビティ量を発生させる可能性のある、不要または汎用的すぎるルールは避けるよう注意してください。
  • 事前に高トラフィックが予想されるイベントについてクライアントとコミュニケーションを取り、適切な計画を立てられるよう支援することを検討してください。  

アプリケーションのストレステストを行う

バースト時には、平均的な 1 日あたりの利用量の 5〜10 倍に達する可能性があると見込んでください。定義しているルールによっては、その増加幅がさらに大きくなる場合があります。

接続に対する配信上限を理解する

フローおよび配信の上限はアクセスレベルに基づいています。その結果、ストリームから配信されるデータ量は一定になります。
  • Academic: 1秒あたり250ポスト
  • Enterprise: 1秒あたりのポスト数はアクセスレベルで設定されます

接続を維持するための最適化

ストリームを利用する場合、データを取り逃さないためには接続を維持することが重要です。クライアントアプリケーションは切断を検知し、直ちに再接続を試みる必要があります。再接続が失敗した場合には、指数バックオフを用いてリトライするロジックを実装してください。  

クライアント側に組み込みのバッファリングを追加する

マルチスレッドのアプリケーションを構築することは、高ボリュームなストリームを処理するための重要な戦略です。大まかに言うと、データストリームを管理するためのベストプラクティスは、ストリーミング接続を確立する専用のスレッド/プロセスを用意し、そのスレッド/プロセスが受信した JSON アクティビティをメモリ上のデータ構造やバッファ付きのストリームリーダーに書き込むようにすることです。この「軽量な」ストリーム処理スレッドは、受信データの処理を担当し、メモリ内でバッファリングされたデータは必要に応じて伸縮させられます。その後、別のスレッドがそのバッファを消費し、JSON のパース、データベース書き込みの準備、その他 App が実行する必要のある「重い処理」を行います。  

グローバルイベント = グローバルタイムゾーン

イベントは営業時間外や週末に発生する可能性があるため、通常の業務時間外にトラフィックが急増しても対応できるよう、チームの準備を整えておいてください。