プロジェクト

分散 Web 検索エンジン

Java で実装したクローラー、インデクサー、PageRank、KVS、RDD 風の Flame 計算層。

JavaConcurrencyNetworkingDistributed SystemsCustom KVSRDD-style Compute
分散 Web 検索エンジンのアーキテクチャプレビュー

概要

自作のクローラー、インデクサー、PageRank、レプリケーション対応のキーバリューストア、マルチスレッド Web サーバー、そして Flame と名付けた RDD スタイルの計算層からなる、エンドツーエンドの分散検索プラットフォーム。

課題

動作する検索スタックをゼロから構築するには、既存の分散フレームワークに頼らず、複数マシンにまたがるクロール、ストレージ、ランキング、サービングを協調させる必要がありました。

実装したこと

すべての層を Java で実装しました:ポライトネスを守るマルチスレッドクローラー、インデクサー、PageRank の実装、自作のパーティション分割・レプリケーション対応キーバリューストア、マルチスレッド Web サーバー、そしてインデックス作成とランキングのジョブを動かす Spark RDD スタイルの計算層 Flame です。

アーキテクチャ

  • クローラー — ポライトネスルールと URL フロンティアを備えたマルチスレッドフェッチャー
  • KVS — 独自のワイヤプロトコルを持つ、パーティション分割・レプリケーション対応のキーバリューストア
  • Flame — KVS を基盤とし、map / filter / fold プリミティブを提供する RDD 風の計算層
  • インデクサー + PageRank — 検索可能なインデックスとランキングスコアを生成する Flame ジョブ
  • Web サーバー — 検索 UI を提供するマルチスレッドのリクエストハンドラー

技術的ハイライト

  • ストレージ、計算、サービングの各層にわたり、独自のネットワーキング、並行 I/O、パーティション分割、レプリケーション、分散計算プリミティブを実装。
  • クローラー、インデクサー、PageRank、ストレージ、サーバー間の相互作用をエンドツーエンドでデバッグし、パイプライン全体の信頼性を向上。

成果

  • 既存の分散フレームワークに依存せずに動作するフルスタック検索プラットフォームを構築し、生のソケットからランキングまで検索システムのあらゆる層を実践。