分散システムにおけるメタデータ管理は、システムの信頼性とスケーラビリティを左右する重要な要素です。ZooKeeperは長年この分野で広く採用されてきましたが、水平拡張の制限や性能のボトルネックが課題として浮き彫りになっています。Oxiaはこれらの課題を解決し、Apache PulsarやKafkaなどのプロジェクトで採用される可能性のある次世代のメタデータストレージソリューションです。本記事では、Oxiaの技術的特徴とその利點を詳しく解説します。
ZooKeeperは、唯一の水平拡張ができない分散システムとして知られています。その設計では、リーダーノードがすべての書き込みリクエストを処理するため、シングルポイントのボトルネックが生じます。また、メモリベースのデータベース設計により、2GBを超えるデータ量ではパフォーマンスが低下します。さらに、定期的なスナップショット作成によるパフォーマンスの低下も問題でした。
Oxiaは、ZooKeeperのこれらの課題を克服するために設計されました。水平拡張可能なアーキテクチャと、非共識プロトコルを採用することで、高可用性とスケーラビリティを実現しています。また、Apache Pulsarのメタデータストレージとしての設計目標をもとに、クラウドネイティブな環境での運用を念頭に置いた設計がなされています。
Oxiaは、Kafkaのパーティションメカニズムを採用した水平拡張可能なストレージパッド(Pod)を構成しています。各Podは特定のシャードを擔當し、リーダーまたはフォロワーとして機能します。これにより、ノード數が増えるにつれてパフォーマンスが低下する問題を解消しています。
Oxiaは、LSMツリーとメモリ読み取り戦略を組み合わせることで、數百GB規模のメタデータを効率的に管理します。また、ZooKeeperのスナップショット制限を迴避し、データを直接ディスクに書き込むことで、パフォーマンスを向上させています。
Oxiaは、RaftやPaxosなどの共識プロトコルではなく、推式レプリケーションを採用しています。これにより、システムの複雑さを減らし、高可用性を実現しています。リーダーノードがデータをフォロワーにプッシュする方式により、レプリケーションの効率が向上しています。
OxiaはKubernetes Operatorを用いて、ConfigMapを介してクラスタの設定を管理します。また、カスタムリソース定義(CRD)をサポートしており、動的なスケーリングが可能となっています。
Oxiaは、ZooKeeperの2GBメモリ制限を突破し、數百GB規模のメタデータをサポートします。また、単一ノードでのテストでは、100,000 TPS(トランザクション毎秒)を達成し、読み取り遅延は100ミリ秒未満、書き込み遅延は300ミリ秒(P99)となっています。さらに、ノード數を増やすことで線形にスケーラブルなパフォーマンスを実現しています。
OxiaはApache Pulsarのメタデータストレージとして設計されており、ZooKeeperを完全に置き換えることが可能です。これにより、Pulsarは無限のトピック數をサポートし、理論上800億PBのデータを処理することが可能になります。
Oxiaは非共識プロトコルを採用しているため、特定の狀況下でのデータ整合性の確保が課題となる可能性があります。また、現行のハッシュベースのシャーディング方式から、辭書順のシャーディング方式への移行が検討されています。
Oxiaは、ZooKeeperの水平拡張性やパフォーマンスの限界を克服し、高可用性とスケーラビリティを実現する次世代のメタデータストレージソリューションです。Apache PulsarやKafkaなどのプロジェクトで採用されることで、分散システムの信頼性と効率性がさらに向上するでしょう。Oxiaの設計思想と技術的特徴を理解し、適切に活用することで、大規模な分散システムの運用をより効率的に行えるでしょう。