Apache Polaris は Quarkus を採用しています
Apache Polaris は、 Apache Iceberg 用のオープンソースカタログであり、インキュベーション期間を終え、重要な技術的決定として Quarkus をそのクラウドネイティブ基盤として採用することで、正式に Top-Level Project (TLP) へ昇格しました。Iceberg カタログと Supersonic Subatomic Java の融合は、クラウドネイティブな効率性と拡張性だけでなく、コミュニティとの協業も実現し、Polaris をマルチエンジンデータレイクハウスアーキテクチャ向けの主要なソリューションとして位置付けています。
トップレベルプロジェクトへの道のり
Apache Polaris は、Apache Incubator から卒業し、Apache Software Foundation (ASF) 内で新しいトップレベルプロジェクト (TLP) となるという、大きな節目を達成しました。この卒業は、プロジェクトの成熟度とコミュニティへの採用だけでなく、ガバナンスと運用における Apache Way への統合が成功したことを示しています。
Apache Incubator の理解
Apache Incubator は、ASF への参加を目指す「ポッドリング」と呼ばれるプロジェクトのエントリーポイントです。経験豊富なメンターがポッドリングと財団のチーム間の連絡役を務め、実力主義に基づいた合意形成型のガバナンス採用を指導します。Polaris はこのメンター付きのインキュベーションプロセスを無事完了し、コミュニティの成熟度と運用準備の両方を示しました。
インキュベーション期間中の技術的進化
Polaris にとって、インキュベーション期間は単なるガバナンスの練習ではなく、重要な技術開発と戦略的転換を促しました。プロジェクトは、いくつかの重要な変更を実施することで、その適応性と堅牢なアーキテクチャへのコミットメントを示しました。その変更点には以下が含まれます。
-
新しい JDBC 永続化層:カタログメタデータストレージと設定管理の信頼性と柔軟性を向上させます。
-
高度なセキュリティ機能:ポリシーベースのカタログアクセスコントロールのための Open Policy Agent (OPA) の実装と、洗練されたオーソライザーフレームワークを通じて、新しいセキュリティ機能を統合します。
-
堅牢なポリシー管理:マルチテナントカタログデプロイメントの中核機能である、カタログアクセスポリシーと権限を定義および適用するための包括的なフレームワークを開発します。
極めて重要なことに、チームは成功する TLP には将来性のある技術コアが必要であることを認識し、その最も重要なアーキテクチャ上の決定の 1 つである Quarkus の採用につながりました。
Quarkus の採用
これらの技術的進歩の中で、インキュベーションフェーズで行われた最も重要かつ将来を見据えた決定の 1 つは、Apache Polaris を強化するための Quarkus の採用でした。この戦略的な転換は、複数のクエリエンジンに対応する最新の Iceberg カタログには、従来の Java フレームワークが効率的に提供できる以上のものが必要であることを認識していました。チームは、クラウドネイティブデプロイメントの厳しい要件を満たしつつ、迅速なイノベーションに不可欠な開発者の生産性を維持できる技術スタックを必要としていました。
Quarkus は、最新のクラウド環境向けに Java アプリケーションが構築される方法における根本的な変化を象徴しています。複数のクエリエンジンに対応するように設計された Iceberg カタログである Apache Polaris にとって、Quarkus はパフォーマンス、開発者の生産性、およびアーキテクチャの柔軟性の理想的な組み合わせを提供します。
コンテナーファーストアーキテクチャ
Quarkus は、コンテナーファーストの理念に基づいて最初から設計されました。コンテナー向けに後付けで修正された従来のフレームワークとは異なり、Quarkus は、クラスパスのスキャン、設定のロード、依存性注入などの重い計算処理を実行時からビルド時に移行させることで、コンテナー化された環境向けにアプリケーションを特別に最適化します。
Polaris にとって、これは次のことを意味します。
-
より迅速な水平スケーリング: トラフィックスパイクを処理するために追加のカタログインスタンスをデプロイする場合、コンテナーは秒単位ではなくミリ秒単位で起動します。
-
高密度化: メモリフットプリントが小さいため、ノードあたりの Polaris インスタンス数が増え、インフラストラクチャコストが削減されます。
-
効率的なリソース使用: 最小限の CPU とメモリ消費により、運用上のクラウドコストが直接削減され、リソース消費を抑えることで持続可能性のメリットが得られます。
パフォーマンス特性
Quarkus は、次の 4 つの主要な側面を通じてパフォーマンスを提供します。
-
高速起動時間: アプリケーションの初期化処理をビルド時に実行することで、Quarkus は Polaris を迅速に起動させることができます。これは、Spark、Trino、Flink、またはその他のクエリエンジンからのメタデータ要求のバーストを処理するために、カタログインスタンスが迅速に起動する必要があるオートスケーリングシナリオにとって非常に重要です。数値で示すと、標準的な Quarkus アプリケーションは、ネイティブモードで 10ms、AOT (Leyden) を使用すると約 100ms、プレーンな JVM モードでは 1〜3 秒で起動します。
-
メモリフットプリントの削減: リアクティブコアは、大規模なスレッドプールを維持するのではなく、少数のイベントループを使用することで、メモリ使用量を劇的に削減し、より高いデプロイ密度を可能にします。
-
高スループット: Netty と Eclipse Vert.x に基づくリアクティブな非ブロッキングエンジンにより、Polaris は多数の同時カタログ操作を効率的に処理し、メタデータストアやオブジェクトストレージへの I/O 中のブロッキングを最小限に抑えます。この非ブロッキングなリアクティブアーキテクチャにより、Polaris は Spark や Trino からのメタデータリクエストなど、数千の同時クライアント接続を、リクエストごとにスレッドを割り当てることなく処理できるため、スレッド競合のボトルネックを回避できます。
-
最適化されたリソース消費: ビルド時最適化とリアクティブアーキテクチャの組み合わせにより、CPU 要件が低減され、Polaris を大規模に運用する組織のクラウドコストを直接削減します。
開発者の生産性と汎用性
Quarkus は、豊富なエクステンションエコシステムを備えた、まとまりのあるフルスタックフレームワークを提供し、Polaris コミュニティがインフラストラクチャの配管を構築するのではなく、カタログ機能に集中できるようにします。
摩擦のない開発体験: ライブコーディング機能は、開発中に即座にフィードバックを提供し、内部開発ループを劇的に加速させ、カタログ機能やセキュリティ強化のより迅速なイテレーションを可能にします。
プログラミングモデルの柔軟性: Quarkus は、プレーンな命令型コード、Mutiny API を使用したリアクティブプログラミング、仮想スレッド (JDK 21+) の 3 つの実行アプローチをサポートしており、開発者は各コンポーネントに適切なモデルを選択できます。この汎用性により、Polaris の開発者は、シンプルな管理エンドポイント (ヘルスチェックなど) には慣れ親しんだ命令型パターンを使用しながら、高並行で I/O 集中型のカタログ操作 (メタデータルックアップやコミットなど) にはリアクティブ/非ブロッキングアプローチ (Mutiny または仮想スレッドを使用) を最大限に活用できます。
プロトコルの多様性: REST、gRPC、GraphQL、およびメッセージブローカー (Kafka、RabbitMQ、Pulsar、Apache ActiveMQ) のネイティブサポートにより、Polaris はカタログ API の公開方法や、より広範なデータエコシステムとの統合において柔軟性を持ちます。
Polaris が Quarkus をどのように活用するか
Quarkus 基盤の真の力は、Apache Polaris がその実装で特定の Quarkus 機能をどのように活用しているかを調べると明らかになります。カタログサービスは、15 を超える専門エクステンションを統合して、本番対応のクラウドネイティブな Iceberg カタログを提供します。ここでは、統合のいくつかの例を示します。
Quarkus REST を使用したリアクティブなリクエスト処理
Polaris は、Quarkus REST を使用して Iceberg REST API を実装し、Quarkus Reactive Core と SmallRye Mutiny を活用して、何千もの同時メタデータリクエストをスレッドをブロックすることなく非同期で処理します。
Polaris コードベースの実際のレルムコンテキストリゾルバーを以下に示します。
@ServerRequestFilter(preMatching = true)
public Uni<Response> resolveRealmContext(ContainerRequestContext rc) {
return realmContextResolver.resolveRealmContext(
rc.getUriInfo().getRequestUri().toString(),
rc.getMethod(),
rc.getUriInfo().getPath(),
rc.getHeaders()::getFirst)
.invoke(realmContext -> realmContextHolder.set(realmContext))
.invoke(realmContext -> ContextLocals.put(REALM_CONTEXT_KEY, realmContext));
}
わずか数行のリアクティブコードで、Polaris は、従来のフレームワークでは通常はるかに多くの定型コードを必要とするマルチテナントリクエストルーティングを実現します。
SmallRye Fault Tolerance による回復性
カタログイベントの永続化などの重要な操作には、Polaris は信頼性を確保するために Quarkus Fault Tolerance (SmallRye Fault Tolerance に依存) を使用します。以下に、Polaris がメタデータストアへの回復力のあるフラッシュ操作を実装する方法の例を示します。
@Retry(maxRetries = 5, delay = 1000, jitter = 100)
@Fallback(fallbackMethod = "onFlushError")
protected void flush(String realmId, List<PolarisEvent> events) {
var metaStoreManager =
metaStoreManagerFactory.getOrCreateMetaStoreManager(realmContext);
metaStoreManager.writeEvents(callContext, events);
}
この宣言的な回復性アプローチにより、Polaris はメタデータストアへの失敗した書き込みを、設定可能なバックオフとジッターで自動的に再試行し、サンダリングハーダ問題を防止します。設定されたすべての値は、アプリケーション設定で上書きできることに注意してください。
CDI Bean を拡張点として使用する: 永続化層の選択
Polaris は、Quarkus の CDI 修飾子メカニズムを使用して、複数の永続化バックエンド (Quarkus JDBC PostgreSQL エクステンションを介した PostgreSQL、Quarkus MongoDB Client エクステンションを介した MongoDB、およびテスト用のインメモリ) をサポートします。
@Produces
@ApplicationScoped
Backend backend(BackendConfiguration config, @Any Instance<BackendBuilder> builders) {
var backendName = config.backend()
.orElseThrow(() -> new IllegalStateException(
"Configuration polaris.persistence.nosql.backend is missing!")
);
var builder = builders.select(BackendType.Literal.of(backendName));
return builder.get().buildBackend();
}
このアーキテクチャにより、オペレーターは polaris.persistence.nosql.backend 設定プロパティーを変更するだけで、インフラストラクチャ要件に合致する永続化層で Polaris をデプロイできます。
包括的な可観測性
Polaris は、完全な可観測性のために、Prometheus レジストリを備えた Quarkus Micrometer と Quarkus OpenTelemetry を活用します。カタログは自動的に以下を追跡します。
-
HTTP メトリクス: すべての Iceberg REST API リクエストについて、レルム、操作、ステータスコード別にタグ付けされます。
-
カタログ固有のメトリクス(テーブル数、ネームスペース数、メタデータ操作のレイテンシーなど)に対応するカスタムゲージとカウンター
-
最初のメタデータリクエストからストレージアクセスまで、カタログ操作全体でリクエストを追跡する分散トレース
メトリクスエンドポイントは、Kubernetesのベストプラクティスに従い、メインAPIポート (8181) とは分離された、別の管理ポート (8182) で公開されます。
quarkus.http.port=8181
quarkus.management.enabled=true
quarkus.management.port=8182
quarkus.micrometer.enabled=true
quarkus.micrometer.export.prometheus.enabled=true
QuarkusコミュニティーとPolarisコミュニティーのコラボレーション
Quarkusの採用は、両コミュニティー間で生産的なフィードバックループを生み出しました。両プロジェクトのエンジニアは緊密に協力し、QuarkusがPolaris内で効果的に使用されることを保証し、バグを報告し、途中で可能な改善点を特定しました。この実践的なコラボレーションは、両者に利益をもたらします。Polarisは堅牢で十分に理解された基盤を獲得し、Quarkusは要求の厳しい高スループットのApache TLPデプロイメントから実世界のフィードバックを得て、Quarkusエコシステム全体に利益をもたらす安定性とパフォーマンスの向上を推進します。
将来を見据えて
Apache Polarisがトップレベルプロジェクトとして成功裏に昇格したことと、Quarkusを基盤とすることで得られたパワーと効率は、将来を見据えた重要な技術的課題の出発点に過ぎません。Polarisは、成長のためだけでなく、クラウドネイティブなデータレイクハウスアーキテクチャの未来を積極的に形作る立場にあります。
コミュニティーはすでに、次期メジャーリリースであるQuarkus 4を含む、Quarkusロードマップの最先端に合わせて開発を進めています。この連携により、Polarisはパフォーマンスの向上、新しいクラウドネイティブAPI、およびリアクティブコア向けの最も高度な機能を継続的に利用できるようになります。
私たちのビジョンは、最も重要なデプロイメントの要求を満たすために、新しいネットワーキングおよびセキュリティ標準を採用することにまで及びます。
-
次世代ネットワーキング: HTTP/3の採用を検討しており、その多重化とヘッドオブラインブロッキングの削減を活用して、メタデータリクエストのレイテンシーをさらに最小限に抑え、スループットを向上させます。これは、数千の同時操作を管理するクエリーエンジンにとって不可欠です。
-
将来性のあるセキュリティ: 今日の標準を超えて、プロジェクトは量子安全なTLSと暗号化を調査しています。最新の暗号化プラクティスを統合することで、Polarisは現在だけでなく、将来の計算上の課題に対しても安全なカタログを提供することを目指します。
活発なコミュニティーによって推進される継続的なイノベーションへのこのコミットメントは、Apache Polarisが高性能で安全な、マルチエンジンIcebergカタログ相互運用性の業界標準となる準備ができていることを保証します。私たちは、このデータエコシステムの次の時代を定義するために、貢献者、ユーザー、および組織が私たちに参加することを歓迎します。