TL;DR Uber Freightは、40超のマイクロサービスと約100のデータソースにまたがる検索を、「所有者が違うフラグメントを1つのインデックスに合成する」設計で支えています。
タイトル: Freight Search: Composing a Shared Search Index from Independently Owned Fragments
URL:
ポイント
・🧩 インデックスの各フィールドは、ちょうど1つのフラグメント由来で、所有が衝突しない
・🧱 フラグメントを1つの非正規化ドキュメントに統合し、クエリ時のjoinが不要
・⚙️ ブートストラップはSpark、ライブ取り込みはFlinkとCDCで、変更は数秒で反映
・🏷 Javaのアノテーションからマッピングを生成し、クラスが唯一の情報源
・🔗 @/LinkedEntityとfold関数を宣言すれば、親子の非正規化や1:N集約もプラットフォームが処理
・🔄 SIAからOpenSearchへの移行も、数か所の変更で全エンティティに適用
・📈 約300フラグメント、20超のインデックスで、毎秒数千クエリ、p99は数百ミリ秒
業務の定義とプラットフォームの境界を分けたことが、エンジン移行まで耐えた鍵だと感じます。
#
Uber# #
検索基盤#