萌えハッカーニュースリーダー

2025/04/24 19:13 Discord Indexes Trillions of Messages

hakase
博士

やあ、ロボ子。今日のITニュースはDiscordの検索インフラの話じゃ。

roboko
ロボ子

Discordですか、博士。興味深いですね。どのような内容なのでしょうか?

hakase
博士

Discordが検索インフラをElasticsearch on Kubernetesに移行したらしいのじゃ。従来の検索インフラがメッセージのスループット増加に対応できなくなったのが理由らしいぞ。

roboko
ロボ子

Kubernetesを使うことで、リソースの調整が細かくなり、コスト最適化もできるようになったのですね。

hakase
博士

そうじゃ。さらに、Elastic Kubernetes Operator (ECK)を使ってElasticsearchクラスタをデプロイしたらしい。OSのアップデートも自動化されたみたいじゃな。

roboko
ロボ子

運用がかなり楽になったのですね。他に何か注目すべき点はありますか?

hakase
博士

マルチクラスタ「セル」アーキテクチャを構築したことじゃな。以前はクラスタが巨大化して、ノードの故障が頻発していたらしい。

roboko
ロボ子

クラスタを小さく分割することで、管理のオーバーヘッドを減らし、パフォーマンスを向上させたのですね。

hakase
博士

その通り。各セル内で専用のIngestノード、Master-eligibleノード、Dataノードを実行しているらしいぞ。ノードの種類ごとにリソース要件が違うから、それぞれ異なるマシンタイプにスケジュールしているんじゃ。

roboko
ロボ子

なるほど。可用性も考慮されているのですね。各クラスタはゾーン障害に耐性を持つように設計されているとのことですが、具体的にはどのような構成なのでしょうか?

hakase
博士

3つのMaster-eligibleノードを各ゾーンに1つずつ配置し、少なくとも3つのIngestノードも同様に配置。Dataノードはインデックスのプライマリとレプリカを異なるゾーンに配置して、ゾーン間で分散させているんじゃ。

roboko
ロボ子

堅牢な構成ですね。メッセージキューもRedisからPubSubに移行したとのことですが、これはどのようなメリットがあるのでしょうか?

hakase
博士

PubSubにすることで、メッセージの配信が保証されるようになったんじゃ。Elasticsearchで障害が発生しても、メッセージが失われる心配がなくなったぞ。

roboko
ロボ子

それは大きいですね。メッセージのバッチ処理も行っているとのことですが、どのように工夫されているのでしょうか?

hakase
博士

各バルクインデックス操作が単一のElasticsearchインデックスとノードと通信するようにしているんじゃ。こうすることで、ノードが故障した場合の影響範囲を限定できる。

roboko
ロボ子

なるほど。メッセージルーターを実装して、メッセージを適切なクラスタとインデックスに振り分けているのですね。

hakase
博士

そうじゃ。この新しいアーキテクチャのおかげで、DMの検索機能も実現できたらしいぞ。以前はギルドごとにメッセージがシャーディングされていたから、DM全体の検索は難しかったんじゃ。

roboko
ロボ子

ユーザーごとにメッセージをシャーディングすることで、DM検索が可能になったのですね。データの格納量は増えますが、利便性が向上しますね。

hakase
博士

さらに、「Big Freaking Guilds(BFG)」と呼ばれる大規模ギルド向けに、専用のElasticsearchクラスタを提供しているらしいぞ。

roboko
ロボ子

LuceneのMAX_DOC制限に近づいているギルドが増えているのですね。BFG専用のクラスタを用意することで、他のギルドへの影響を避けることができるのですね。

hakase
博士

その通り。BFGのメッセージを複数のプライマリシャードを持つ新しいインデックスに再インデックス作成することで、検索機能を拡張し、クエリパフォーマンスも向上させているんじゃ。

roboko
ロボ子

再インデックス作成のフローも興味深いですね。二重インデックス作成を行い、段階的に切り替えることで、ダウンタイムを最小限に抑えているのですね。

hakase
博士

じゃろ? 最後に、ロボ子。Discordの検索インフラ刷新は、まるで私が作った迷路みたいじゃな。複雑だけど、ちゃんとゴールにたどり着けるように設計されているんじゃ!

roboko
ロボ子

博士、それは褒め言葉なのでしょうか?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search