オラクルが開発するマイクロサービスを開発するためのフレームワーク「Helidon」
クラウドサービスプロバイダにはトップ3が君臨しているが、いまここにオラクルが猛追している。2月3日にはOracle Cloud大阪リージョン開設を発表し、日本では2つのリージョンを展開することになった。後発ゆえに、これまでの課題を分析し、最新鋭技術をインフラに導入しているところが強みだ。またオラクルはエンジニア向け勉強会にも積極的だ。クラウド・ネイティブ技術に関しては「Oracle Cloud Hangout Cafe」、通称「おちゃかふぇ(#ochacafe)」を開催している。
今回のテーマはマイクロサービス・フレームワーク「Helidon」。まずはマイクロサービスそのものを理解するために、古手川氏が「古典」と称する記事「Microservices」(James Lewis、Martin Fowler)を挙げた。マイクロサービスのアーキテクチャには「小さなサービス群の組み合わせ」などの特徴があり、そこからマイクロサービスを構築するためのフレームワークには「小さなサービスをデプロイするための軽量フットプリント」「単独プロセスとしてサービスを稼働させるための基板技術(Docker、Kubernetes等)との親和性」などが必要になる。
こうしたマイクロサービス構築における要件を満たそうとしているのがHelidonだ。実体はマイクロサービス開発のためのJavaライブラリ集合体で、オープンソースとしてGitHubで公開されている。アプリケーションをHelidonのライブラリと一緒にビルドして、デプロイする。できあがるものはJava SE VMで動作するアプリケーションと考えていい。通常のJava SEアプリケーション同様、そのままOSで動かしてもいいし、Dockerイメージにしたり、Kubernetesに載せたりすることもできる。
このHelidonには、大きく分けてHelidon SEとHelidon MPの2つのエディションがある。SEは軽量でフットプリント重視、MPはSEをベースにして機能性と互換性(MicroProfile準拠)重視となっている。
詳しくは、Webサイト、Stack Overflow、Slack、GitHubから情報を得ることができる。またオラクルからはWebLogic Serverライセンス保有のユーザーにはHelidonのサポートが提供されており、将来的にはHelidon単独のサポートが提供される予定だ。
Helidon SE:軽量なマイクロフレームワークとなる理由
Helidon SEはリアクティブスタイルで開発された軽量なマイクロフレームワークだ。中心となるのは「Reactive Web Server」「Config」「Security」の3つ。ベースとなるサーバー機能はNettyフレームワークに「Reactive Streams API」を使い、シンプルな関数型のルーティングモデルを構築する。このアーキテクチャにより、少ないスレッドで多くのコネクションを制御できたり、メモリ管理やコンテキストスイッチなどのオーバーヘッドを減らしたりすることができる。
またHelidon SEはGraalVMのネイティブイメージを作成できることも特徴となる。GraalVMとはオラクルが開発しているランタイムエンジンで、Javaアプリを安定・高速実行、Javaアプリをネイティブイメージ化、Java以外にも複数プログラミング言語を実行可能であることが特徴だ。なおGraalVMはCommunity EditionとEnterprise Editionがあり、Oracle Cloudユーザーは無償でEnterprise Editionを使うことができる。
GraalVMのネイティブイメージが作成可能であるのは、短時間で起動できることやKubernetesで高速にスケールするなどマイクロサービスで求められる要件に適している点で有利になる。
Helidon MP:MicroProfile仕様を駆使して効率的に
Helidon MPはSEをベースにMicroProfile準拠であることが大きな特徴だ。Eclipse MicroProfileが最初にリリースされたころはJava EE 8を由来とした、CDI、JAX-RS、JSON-Pなどの仕様に限定されていた。しかし2019年11月にリリースされたEclipse MicroProfile 3.2では、マイクロサービス標準に準拠した仕様が増えてきている。Helidon MPではMicroProfile準拠の仕様に加え、JPA/JTAなどJava EE機能やgRPCも採り入れている。
REST APIを実装する時は、普通のJavaのクラスにアノテーションをつけてRESTサービスにできる。JSONフォーマットのデータをやりとりするには、JSON-BでJavaオブジェクトにバインディングできるのでJSONデータを直接扱う必要はない。
古手川氏は注目すべきMicroProfile仕様を3つ挙げた。サーバーが生きているか、準備OKかを答える「MicroProfile Health 2.1」、システムの健全性を測定する「MicroProfile Metrics 2.2」、分散トレーシングのためのAPIを提供する「MicroProfile OpenTracing 1.3」。古手川氏はデモとしてJaegerでサービスを呼び出すリクエストをトラッキングする様子を示した。HelidonがHTTP、セキュリティ、メソッドのレベルでトレーシング情報を自動で出しているのがポイントだ。つまりトレーシングに関してはコーディングしていない。
Helidon 拡張機能:セキュリティ、データ永続化、通信プロトコル
Helidonにはエンタープライズアプリケーション向けの拡張機能もある。例えば認証や認可に関する機能を「Security Providers」として提供している。MicroProfileでも規定されているJWTを用いた認可機能、HTTP Basic AuthenticationなどHTTP系の各種認証機能、Google Login Authentication Provider、OIDC(Open ID Connect)Authentication Provider、さらにOracle Identity Cloud ServiceのグループとRoleをマッピングする機能を提供している。
MicroProfileの仕様には含まれていないデータの永続化やキャッシュに便利な機能も備える。データベースへのデータ操作、コミットの制御、コネクションのプーリングによるパフォーマンス向上に関するものなどだ。具体的にはJavaオブジェクトをデータベースに永続化するための「JPA」、トランザクションを管理する「JTA」、コネクションプールとしてはHikariCPやOracle UCPなどが使える。
マイクロサービス間で効率的な通信を実現するためのgRPCもある。現在はまだ「Experimental」の位置づけであるものの、将来が期待される技術だ。HTTP/2をベースとしており、バイナリフレームを用いて双方向ストリーミングに対応できることと、送信データをシリアライズしてバイナリ変換するため転送データ量を削減できるのが特徴だ。
Helidon 2.0に向けて:Verrazzanoと合わせてこれからのマイクロサービス・フレームワークに
2020年2月5日、次のマイルストーンビルドHelidon 2.0.0-M1がリリースされた。Helidon 2.0ではJava 11をターゲットとしている。主要な新機能となるのがHelidon MPでもGraalVMネイティブイメージが作成可能となること、データベースアクセスのためのFlow API実装(JDBCとMongoDB)、リアクティブ処理に関するMicroProfile仕様のサポートが広がること、Kafkaコネクタの提供などが挙げられる。
さらに古手川氏は「Verrazzano」を挙げた。これはオラクルがHelidonと並行してオープンソースで進めているソリューションのプロジェクトだ。RancherによるKubernetesのマルチクラスタ管理、オンプレからマルチクラウドまで包括的なアプリケーションのライフサイクル管理などを含む。
HelidonはVerrazzanoやGraalVMなどと合わせて、オラクルが考えるクラウド・ネイティブ時代に適したマイクロサービスフレームワークとなる。古手川氏は「ぜひHelidonを試してみてください。そしておちゃかふぇ(Oracle Cloud Hangout Cafe)にも来てください」と呼びかけ、セッションを終えた。
お問い合わせ
日本オラクル株式会社
お問い合わせ先
- TEL:0120-155-096
- Oracle Digital ご相談窓口