COLUMN

コラム

インジェスト量の多いワークロードに対応したインデクサーのスケーラビリティ

2023.11.01

インデクサーの規模の最終的な目標は、10^{15}個のインデックスを持つことです。これは保存されるデータのバイト数ではなく、保存されるインデックスの数である。インデックスとは、CIDとコンテンツプロバイダのデータとの対応表のことです。実際のデータ量はもっと多い。現在、約10^{12}のインデックスを扱っていますが、その間に、いくつかのステップを経て、最終的な規模の目標に向かって進んでいく予定です。

現在、インデックス作業の大半は、インデックスデータの取り込みが中心となっています。入力されるデータは、速度的にも量的にも、1人のインデクサが処理できる量を超えていることがあり、急速に増加しています。そのため、スケーリング目標に向けて前進するための最も直接的な必要性は、増加するインジェスト負荷を処理することです。

アプローチインデックスの取り込みに対応するシンプルな戦略

データインジェスト

インデックスデータの取り込みは、インデクサがパブリッシャーから新しいインデックスデータ広告の利用可能性を知らせる「アナウンス」メッセージを受信し、それに応答して、インデクサがパブリッシャーからまだ取り込まれていないすべてのインデックスデータを取得するときに起こります。パブリッシャーの数が増えると、ある時点で1つのインデクサーノードが新しいインデックスデータの発行速度に追いつけなくなり、すべてを保存するのに十分なストレージをノードに持たなくなる可能性があります。

インジェスト作業分配

インジェスト作業の負荷を処理するためのインデクサーのスケーリングは、インジェスト作業をインデクサーのプールに分散させるというシンプルな戦略に基づいており、ストレージのバランスを調整するためにデータを移動させる必要がなく、追加容量が必要になったときにノードを追加することができるようになっています。これは、異なるコンテンツパブリッシャーを異なるインデクサノードに割り当てることで、各ノードがインジェスト作業の別個の部分を処理することから始まります。これは、重要なインデックスの取り込み経路の一部ではない、独立した軽量なAssigner Serviceを使用して行われます。

あるインデクサが設定されたストレージの上限に達すると、新しいインデックスデータの取り込みを停止し、プール内の他のインデクサがフルインデクサに割り当てられたパブリッシャーからデータの取り込みを再開します。より多くのストレージ容量とインジェスト作業の分配が必要になると、より多くのインデクサノードがプールに追加されます。

このスケーラビリティ戦略の主な構成要素は3つです:

  • Assigner Service:パブリッシャーとインデクサーの割り当てを行うサービス
  • Indexer Frozen Mode:新しいコンテンツがインデックスされないインデックス動作モード。
  • パブリッシャー割り当てのハンドオフ:凍結したインデクサーからアクティブなインデクサーにパブリッシャーを再割り当てし、凍結したインデクサーが停止した場所のインデックス作成を再開させる。

この記事では、これらの構成要素についてまとめます。より詳細な情報は、デザインドキュメントデザインプレゼンテーションスライドに記載されています。

スケーリング戦略の長所と短所

長所:

  • 同期回数の削減:すべてのインデクサーがすべてのパブリッシャーと同期する必要がありません。
  • メタデータは複数のインデクサーに複製されない(キーシャーディングの場合):メタデータはプロバイダーを扱うインデクサーにのみ存在する。
  • インデクサー間でデータは共有されない。各自がパブリッシャーのチェーンを管理する。
  • プロバイダを確認するためだけに広告を読む必要がない(プロバイダシャーディングと比較した場合)
  • インデクサは記憶容量が違ってもいい。
  • コンセンサスを必要としない。
  • インデクサ間でデータを移動させることなく、インジェスト作業を再分配することができる。

短所:

  • 不均等な分布:一部のパブリッシャーが他のパブリッシャーよりも多くのデータをインデックス化する
  • クエリーはすべてのインデクサーに複製され、レスポンスはクライアントに単一のレスポンスとしてマージされます。
  • プロバイダーがパブリッシャーを変更すると、インデックスが重複することがある(プロバイダーのシャーディングとは対照的)。
  • 既存のインデクサがストレージの限界に達するまで、インデクサを追加しても効果はない。
  • このアプローチの全体的な利点は、インジェストのスケーラビリティの制限を取り除きつつ、その実装が比較的簡単であることです。

Assigner Service

Assigner Service (AS)は、設定されたインデクサーのプールにあるインデクサーにパブリッシャーを割り当てる責任を持ちます。ASは、割り当てを管理するインデクサと同じネットワーク上で、インデクサのプールに対して1つのインスタンスとして実行されます。1つのインデクサは、1つのアサインナーのインデクサプールのメンバーであることしかできません。

新しいパブリッシャーをインデクサーに割り当てることに加えて、ASはインデクサーが 「凍結」モードになったことを検出し、凍結したインデクサーから凍結していないインデクサーに パブリッシャーを再割り当てする役割も担っています。ASはまた、プール内のすべてのインデクサが受信できるように、gossip pubsub上で直接HTTPアナウンスを再パブリッシュします。

ASは、多くの仮定により、単一のプライベートな展開内での使用を意図しています:どのインデクサにも割り当てが可能であること、すべてのインデクサの管理APIがプライベートネットワーク上または同様に保護されていること、異なる当事者がプールへの追加や削除を管理するための確立した手段やプロトコルが存在しないことです。

パブリッシャーをインデックサーに割り当てる

ASは新しい広告が利用可能になったことを知らせるgossip-subとdirect HTTPメッセージをリッスンします。各メッセージからパブリッシャーを読み出し、そのパブリッシャーが必要な インデクサーにすでに割り当てられているかどうかを判断する。もしそうでなければ、ASは最も割り当ての少ないインデクサーを選択し、 そのインデクサーにパブリッシャーを割り当てる。割り当て後、インデクサはパブリッシャーからアナウンスを受け取り、自らインジェストを処理する。

ASは、インデクサープール内での過剰割り当てを防ぐ方法で、オフラインになるインデクサを処理します。また、ASは、特定のパブリッシャーを特定のインデクサーに割り当てるための設定オプションもサポートしています。

補足

  • 永続的な割り当て状態がないため、インデクサーの停止と起動がいつでも可能であること
  • インデックスプールとは、1つのデプロイメントにあるインデックスノードのセットです
  • パブリッシャーを複数のインデクサーに割り当てるアサインメントレプリケーション

インデックサー・フローズンモード

インデクサのストレージ使用量が設定された上限値である[FreezeAtPercent](<https://pkg.go.dev/github.com/ipni/storetheindex/config#Indexer>)に達すると、インデクサは自動的に「凍結」モードに入ります。これは、インデクサが新しいインデックスデータを保存しないが、インデックスデータの更新と削除を処理する動作モードである。凍結されたインデクサは、新しい出版社割り当てを一切受け付けません。内部的には、インデクサは、更新広告と削除広告を取り込む目的で、各広告チェーンのどこを読み込んだかを追跡します。インデクサは、インデックスデータに対するあらゆるクエリに応答し続けます。

インデクサは、管理 API を使用して凍結を要求し、手動で凍結することもできます。これは、インデクサーのストレージ容量が増えるまでインジェストを停止するため、またはASを使用している場合は、継続的なインデックス作成を他のインデクサノードに引き継ぐことができるようにするために行うことができます。

補足

  • ディスク使用量監視は各インデクサーで行う
  • フリーズ機能はASに依存しない
  • アンフリーズ機能により、インデクサーのインデックス作成を再開することができます。

パブリッシャーハンドオフ

ASは定期的にインデクサをポーリングし、インデクサがフリーズしたことを確認すると、フリーズしたインデクサに割り当てられている各パブリッシャに対してハンドオフを行います。ハンドオフとは、パブリッシャーが別のインデクサーに再割り当てされ、アクティブなインデクサーでは、凍結したインデクサーで中断したインデックス作成が継続されるようにすることです。ハンドオフの間、アクティブなインデクサは、凍結したインデクサからプロバイダと拡張プロバイダ情報を取得します。

ASは、新しいパブリッシャーをどこに割り当てるかを決定するときと同じ論理で、パブリッシャーをどのインデキサーに引き渡すかを決定する。これは、引き渡される各パブリッシャーに対して別々に行われ、その結果、凍結されたインデクサーの割り当ては、プール内の利用可能なインデクサーに再分配されます。

補足

  • ASは、不完全なハンドオフを再開することができる
  • パブリッシャーデータは、凍結されたアクティブインデクサーに分散される

Assigner ServiceによるIndexer Poolのセットアップ

ここでは、assignerサービス付きのindexerプールを展開するための手順を説明します。これらのステップを要約すると

  • デプロイ・インデクサー
  • Assigner Serviceのデプロイ
  • 必要に応じてIndexerを追加導入する

また、AS設定ファイルのサンプルも提供しています。

まずは資料請求

お忙しい経営者の方や資産運用の担当者の方に
資料送付や最適なプランのご提案を無料で行っております。

    このサイトはreCAPTCHAによって保護されており、Googleのプライバシーポリシー利用規約が適用されます。