1714390941
2024-04-29 11:30:16
Netflix のエンジニアは最近、その方法を公開しました。 Elasticsearch Percolate クエリを使用して、接続されたグラフ内のエンティティを「逆検索」します。 逆検索とは、クエリに一致するドキュメントを検索するのではなく、ドキュメントに一致するクエリを検索することを意味し、サブスクライバとサブスクライブされたエンティティの間に直接の関連付けがない動的なサブスクリプションおよび通知シナリオを強化します。
Netflixのエンジニアたちは、 リッキー・ガーディナー、 アレックス・ハッター、 そして ケイティ・ルフェーブルでは、従業員が「主要な役割が割り当てられていないメキシコシティで撮影された映画」などの動的な基準に基づいて、映画のサブセットに関連するさまざまなイベントに関する更新通知を受け取りたいという中心的なシナリオについて説明します。
ティファニー [the employee] 特定の映画の更新をサブスクライブするのではなく、映画の動的なサブセットを返すクエリをサブスクライブします。 これは、彼女に通知を送信する責任がある私たちにとって問題を引き起こします。 映画が変更された場合、従業員と興味のある映画との間に関連性がないため、誰に通知すればよいかわかりません。
単純な解決策は、すべての変更イベントに対してすべての保存された検索クエリを繰り返し実行し、関連するサブスクライバーを特定することです。 ただし、データを取得して以来、 Netflix フェデレーション グラフ 大量のトラフィックに影響するため、このソリューションでは、チームはタイムリーな通知を行うか、グラフの負荷を軽減するかの選択を迫られることになります。
代わりに、Netflix のエンジニアは Elasticsearch を使用してこの機能を実装しました。 クエリをパーコレートする。 アン エラスティックサーチ パーコレート クエリは、Elasticsearch 内の特殊なクエリ メカニズムで、ユーザーがクエリ自体にインデックスを作成し、後でこれらのクエリを受信ドキュメントと照合できるようにします。
Netflix の逆引き検索 (ソース)
ユーザーがこの機能を使用できるようにするために、Netflix チームは新しい機能を追加しました。 逆検索 ドメイングラフサービス (DGS)。 この DGS を通じて、彼らは新たな問題を明らかにします。 保存済み検索 実在物:
type SavedSearch {
id: ID!
filter: String
index: SearchIndex!
}
で書かれている グラフ検索DSL、このフィルターは Elasticsearch クエリに変換され、 パーコレーターフィールド。 変更イベントが発生すると、パーコレート クエリを使用してインデックスが評価され、変更されたドキュメントに一致する保存されたクエリから関連するサブスクライバが特定されます。
Netflix は、グラフ検索の機能を拡張する際に、インデックス システムのバージョン管理に関する重大な課題に直面しました。 具体的には、誰かが新しいフィールドを導入したとき、これらの新しいフィールドを含めるように既存の検索インデックスを更新する必要がありました。 既存のインデックスにはこれらの新しいフィールドのマッピングがなかったため、新しいインデックス バージョンを作成せずにフィールドをフィルタリングすることはできませんでした。
Netflix は、インデックスの各バージョンに専用のパイプラインを持つデュアル パイプライン インデックス システムを実装することで、この問題を解決しました。 変更により新しいインデックス マッピングが必要になった場合、Netflix は既存のインデックスと並行して新しいバージョンの Elasticsearch インデックスを作成します。 データ メッシュ プラットフォームからログ圧縮されたトピックを利用して新しいパイプラインにフィードすることで、データ ソースが過去のすべてのイベントを再送信することなく、コーパス全体のインデックスを再作成できるようになりました。
この古いパイプラインと新しいパイプラインの並列操作により、新しいインデックスを設定している間、継続的なサービスが保証されます。 バックログが処理され、最新のインデックスが準備できると、Netflix は Elasticsearch インデックスのエイリアスを使用する新しいバージョンに切り替えました。これにより、移行が合理化され、検索機能の中断が最小限に抑えられました。
#Netflix #は #Elasticsearch #Percolate #クエリを使用して逆方向検索を効率的に実装しています