Skip to main content
Helidon 概要
クラウドネイティブ時代のマイクロサービス・フレームワーク
日本オラクル株式会社
Safe harbor statement
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、
情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以
下の事項は、マテリアルやコード、機能を提供することを確約するものではないため、購買
決定を行う際の判断材料になさらないで下さい。
オラクル製品に関して記載されている機能の開発、リリース、時期及び価格については、弊
社の裁量により決定され、変更される可能性があります。
Copyright © 2021, Oracle and/or its affiliates
2
1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
3
1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
4
エンタープライズ・アプリケーションの世界の変化
Copyright © 2021, Oracle and/or its affiliates
5
Build
Deploy
Test
Releas
e
DevOps
Cycle
場所を問わず動作する
クラウドネイティブな
コンテナの展開
オープンソースの
DevOps ツール群の連携
マイクロサービスと
サーバーレス・
アプリケーション
複数言語を扱う
Polyglot な
アプリケーション
Micro
service
1
Busines
s
Domain
Micro
service
2
マイクロサービス・フレームワークの要件
6
• 小さなサービス群の組み合わせ
• 個々のサービスは単独プロセスで稼働
• RESTfulのような軽量な通信プロトコル
• (個々の)業務機能に沿った形で構築
• 他サービスとの依存性なくデプロイが可能
• デプロイは自動化が可能
• 最低限の中央集権的管理機構
• 複数の言語で記述されることがある
• 複数のデータストレージ技術が使われる
ことがある
• 小さなサービスをデプロイするための
軽量フットプリント
• 単独プロセスとしてサービスを稼働させるための基盤
技術(Docker, Kubernetes等)との親和性
• RESTやgRPC等のサービス間通信を効率的に実
装できるフレームワークの提供
• CI/CDプロセス・ツールでの扱いやすさ
• 分散サービス管理をサポートする仕組み(health,
metrics, tracing, etc.)
• Polyglot環境での言語間のInteroperability
• データ永続化レイヤー対応における柔軟性
* “Microservices” by James Lewis/Martin Fowler
https://martinfowler.com/articles/microservices.html
マイクロサービスの特性* 求められる要件
Copyright © 2021, Oracle and/or its affiliates
Javaのマイクロサービス・フレームワーク
OracleがホストするOSSプロジェクト
• GitHubでソースコードを公開:https://github.com/oracle/helidon
• Helidonの商用サポートはWebLogic Server/Coherenceのサポート契約に含まれる
マイクロサービスアプリケーションが必要とする機能(Webサーバ/コンフィギュレーション/セキュリティ)を提供するJavaライブラリの集合体
• 単体のJVMとして動作し、アプリケーションサーバ不要
• 必要なコンポーネントを追加して拡張することも可能
2つのプログラミングモデルを提供
• Helidon MP:宣言的記法(Java EE開発者フレンドリー)
• Helidon SE:関数的型記法
マイクロサービスの監視に適合
Project Helidon
Copyright © 2021, Oracle and/or its affiliates
7
Helidon SE と MP
8
• マイクロ・フレームワーク
• 超軽量フットプリント
• 関数型
• Reactive Web Server
• MicroProfile 3.2
• 軽量フットプリント
• 宣言型
• Java EEサブセット +
マイクロサービス関連機能
Helidon MP
Helidon SE
CDI Extensions
フットプリント重視
機能性重視
互換性(MicroProfile準拠)重視
Copyright © 2021, Oracle and/or its affiliates
Helidonのポジショニング
9
Full Stack
MicroProfile based
Microframeworks
Helidon MP
Helidon SE
Copyright © 2021, Oracle and/or its affiliates
高速起動・高速スケールが求められるユースケース(マイクロサービス、FaaS)に適する
• ランタイムの起動時間、及びプログラム実行初期のパフォーマンスの劇的な向上
• メモリフットプリントの削減
Helidon は GraalVMネイティブ・イメージの作成をサポート
• Maven profileによるビルド - Helidon Quickstart* を参照
• Local build (for the OS installed locally)
• Docker build (for Linux)
GraalVM ネイティブ・イメージ
10
+
Copyright © 2021, Oracle and/or its affiliates
* Helidon Quickstart
https://helidon.io/docs/latest/#/se/guides/02_quickstart
WebLogic
Helidon ~ Autonomous Databaseを利用したアプリケーション構成例
Copyright © 2021, Oracle and/or its affiliates
11
App App App
App #1 デプロイメント
App App App
App #2 デプロイメント
Load
Balancer
API
Gateway
App App App
App #3 デプロイメント
App App App
App #4 デプロイメント
Autonomous
Database /
DBaaS(VM/BM) /
Exadata CS
Autonomous
Database / …
Autonomous
Database / …
スケール
スケール
スケール
周辺
システム
フロント層 バック層 データ永続化層
OKE
OKE
OCI Database サービス
Cloud
Services
• レプリカセットの維持(再起動)
• ローリングアップデート
• スケーリング
HelidonはOpen Sourceのプロジェクト
• Apache 2.0 License
Open Sourceとしてのサポートを提供中
• Web Site with guides and tutorials: https://helidon.io
• StackOverflow: https://stackoverflow.com/tags/helidon
• Public Slack channel: https://helidon.slack.com
• GitHub issues tracker: https://github.com/oracle/helidon/issues
Oracleによる商用サポートについて
• WebLogic Serverライセンス保有のお客様にHelidonのサポートを提供中
• Helidon単独のサポートを提供予定
Helidonのサポートについて
12 Copyright © 2021, Oracle and/or its affiliates
1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
13
リアクティブ・スタイルで開発された軽量なマイクロフレームワーク
• 少ないスレッドで多くのコネクションをハンドル
• メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを削減
Helidon SE
14
Security
● 認証
● 認可
● アウトバウンド対応
● 監査
● 拡張可能
Config
● 柔軟性の高い型付き設
定モデル
● 複数のソースを利用可
● 階層型モデル
● 動的な更新
● 拡張可能
Reactive Web Server
● Reactive APIを使った
シンプルな関数ルー
ティング・モデル
● Netty上に構築
● OpenTracing, Metrics
and Health Checks
● 静的コンテンツ
Helidon SE
Copyright © 2021, Oracle and/or its affiliates
1ステートメントで起動できるREST APIサーバー
Helidon SE – 関数スタイルのシンプルなRESTサーバー開発
15
public static void main(String[] args) throws Exception {
WebServer webServer = WebServer
.create(Routing.builder().any((req, res) -> res.send("It works!")).build())
.start()
.toCompletableFuture()
.get(10, TimeUnit.SECONDS);
}
どのPath/Methodでも
”It works!”を返す
サーバーの起動待ち
(エラー時Exception)
Helidon SE
Copyright © 2021, Oracle and/or its affiliates
Eclipse MicroProfile準拠のフレームワークが最適
Java EE標準企業が選択すべき次世代フレームワークは?
Copyright © 2021, Oracle and/or its affiliates
16
• Java EEが現行標準フレームワーク
• Java EEの開発・運用スキルを保有
• マイクロサービス志向
- 高頻度リリース、変更の局所化
- コンテナ化/軽量フットプリント
- CI/CDとの連携・DevOpsとの親和性
• APIファースト
- サービス定義の明確化と共有化
- モジュール(API)の再利用性向上
• SPA(Single Page Application)
- UIの柔軟性向上、高機能化
- フロントエンドとバックエンドの分離
技術
トレンド
バック
グラウンド
Eclipse MicroProfile規格が要件にフィット
• マイクロサービスのためのフレームワーク
- 軽量フレームワーク、Java SEベース
- REST APIを効率的に開発可能
- CI/CDとの親和性が高い
- Metrics, Health, OpenAPI, OpenTracingなど運用
監視に必要な機能を標準実装
- Cloud Native Computing Foundation(CNCF)の各
種規格への準拠 = Interoperability高
• ベースとなる規格はJava EEのサブセット
- Javaスキル保有者の学習コスト低
• 共通規格 = ベンダ・ロックインを回避
Helidon MP
• PolyglotなMicroservices環境の中で協調して動く(= Microservices各種仕様に準拠する、 Microservicesのデザイン
パターンを実装する)Javaアプリケーションの開発に必要な機能を、フレームワークとして規定したもの。
• 開発者はビジネスロジックの実装に集中でき、効率的な開発ができる。
• 基盤となる実装は、MicroProfileプロバイダの品質維持・向上を期待できる。
Eclipse MicroProfile
17
OpenMetrics
OpenTracing
OpenAPI Circuit
Breaker
Bulk Head
Health Check
Helidon MP
Copyright © 2021, Oracle and/or its affiliates
Helidon MP を構成するコンポーネント
Copyright © 2021, Oracle and/or its affiliates
18
MP Config Metrics
Health
Check
Fault
Tolerance
JWT Auth
JAX-RS CDI JSON-P / B
Open API
Open
Tracing
REST Client
SE SE
SE
JPA
gRPC
JTA
SE
+
オリジナル JavaEE由来
MicroProfile Sandbox
Reactive
Streams
Operators
Reactive
Streams
Messaging
Kafka/JMS
Connector
GraphQL
Helidon MP
SE
SE
MicroProfile =
アノテーションでPOJO(=普通のJavaクラス)がRESTサービスに!
Helidon MP – MicroProfileを使ったRESTサーバー開発
19
@ApplicationScoped @Path("/echo")
public class EchoResource{
@Inject @ConfigProperty(name = “echo.reply", defaultValue = "Hi!")
private String reply;
@POST @Produces(MediaType.APPLICATION_JSON)
public Response handleRequest(Message message, @Context UriInfo uriInfo) {
JsonObject json = Json.createObjectBuilder()
.add("url", uriInfo.getRequestUri().toASCIIString())
.add("text", message.text)
.add(“reply", reply)
.build();
return Response.ok(json.toString()).build();
}
}
CDI
JSON-B
JSON-P
JAX-RS
JAX-RS
CDI
JAX-RS
JAX-RS
MicroProfile Config
Java EEから必要十分な仕様を
引き継いだ、分かりやすくて
非常に強力なマイクロサービス
開発フレームワーク
Copyright © 2021, Oracle and/or its affiliates
1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
20
クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク
マイクロサービス環境に適したアプリケーションを効率的に開発
• SEとMPの二つのエディションを用意 – 要件に応じた使い分け
MicroProfileによる仕様標準化の恩恵、ロックインの回避
• Metrics, Health, OpenAPI,OpenTracingなどはノー・コーディングで利用可能
• 開発者はビジネスロジックの開発に専念できる
• ベンダーの健全な競争の下で、フレームワーク実装の品質向上が見込める
実際のプロジェクトで必要となる拡張機能の提供 – セキュリティ、データベース接続、etc.
多くの実績の中で育まれたJavaのエコシステム
• IDE、ライブラリ、モニタリング・プロファイリング・デバッギング、etc.
• GraalVMの活用
まとめ - Helidonを採用すべき理由
21 Copyright © 2021, Oracle and/or its affiliates
ありがとうございました
Copyright © 2021, Oracle and/or its affiliates
22
Strangler Pattern(ストラングラー・パターン)
マイクロサービス化に向けた設計パターン
Copyright © 2021, Oracle and/or its affiliates
23
アプリケーションの特定の機能を
徐々に改善していく
• 低コスト、高速、保守が容易
段階的に新しいアプリケーションや
サービスに置き換え
• ファサード(窓口)がユーザーからの要
求を既存アプリケーションまたは新し
いサービスにルーティング
• 置き換えが完了したら既存アプリケー
ションから古いサービスを削除
Application Server
Module 1 Module 2 Module N
Datastore
New Module
Datastore
既存アプリケーション
新規サービス
切り出したサービス
マイクロサービスとして実装
Facade
Helidon
Oracle主導で開発されるOSS
GraalVM:多言語の単一かつ高速なランタイムエンジン
GraalVMによる3つのイノベーション
• Javaアプリを安定・高速実行
• Javaで書かれた新たなJITコンパイラ
• JavaアプリのNative Image化
• 事前にマシン語にコンパイル(Ahead-of-Time Compilation)
• 起動時間の極小化とメモリフットプリントの削減
• 複数プログラミング言語を実行可能なランタイム
• Java, JavaScript, Ruby, Rust, C, C++…
• 単一プログラム内で、複数言語を絡めた記述が可能
Community Edition(GPLv2)とEnterprise Edition
• EEは最適化されたパフォーマンスとサポートを提供
• EEはOracleCloud Infrastructureで無償利用可能
HotSpot
JVMCI (JITコンパイラをJavaで実装するためのインターフェース)
Graal
GraalVM
Javaアプリ Truffle
Sulong
JS Ruby R
C C++
HotSpot
Compiler I/F
C2 (for Server)
Javaアプリ
Native
image
SubstrateVM
Javaアプリ
(マシン語)
シングルバイナリ
24 Copyright © 2021, Oracle and/or its affiliates
様々な認証・認可スキームに対応 / IDCSを使った認証・認可を効率的に開発可能
JWT Provider
HTTP Basic Authentication
HTTP DigestAuthentication
Header Assertion
HTTP Signatures
ABAC Authorization
Google Login Authentication Provider
OIDC (OpenID Connect) Authentication Provider
IDCS Role Mapping Provider
• IDCSのユーザー/グループを使ったアクセス制御
Helidonが提供するSecurity Providers
Copyright © 2021, Oracle and/or its affiliates
25
Identity
Provider
Helidon
OpenID
Connect
認証シーケンス
Browser
OIDC (Open IDConnect) Authentication Provider
を使ったユーザー認証
user/group
scope
* IDCS = Oracle Identity Cloud Service
@GET @Path("/admin-role")
@Authenticated
@RolesAllowed("admin")
public void somemethod() {
return;
}
IDCSで定義した
adminロールに
マッピングする
MicroProfileの
ソースコードの例
CDI extensions
• HikariCP data sources
• Oracle UCP data sources
• Jedis clients
• OCI Object Storage clients
• JavaTransactionAPI (JTA) objects
Java Persistence API (JPA)のサポート
• JDBC Driver (DataSource) +
JTA Extension +
Hikari Connection Pool Extension +
EclipseLink JPA Extension
データの永続化/キャッシュが必要な場合に便利な機能
26
CDI extension =CDIのライフサイクルイベントを受け取って独自の実装を追加するための仕様
JPA = Javaオブジェクトをデータベースに永続化するための仕様
JTA (JavaTransactionAPI) = トランザクションを管理するための仕様
Helidon MP
JDBC Driver
JavaTransaction API
EclipseLink (JPA)
Entity
App
Hikari Connection Pool
application.yaml
persistence.xml
Helidon MPによるJPA/JTAサポート
Copyright © 2021, Oracle and/or its affiliates
※現在はExperimentalのステータス
gRPCのサーバー&クライアント実装を簡単に開発できる
SE、MP両エディションでサポート
• SE – リアクティブ・スタイル
• MP – POJO + アノテーション
• 従来からのProtobufサービス/スタブも利用可能
ペイロード・タイプは Protocol Buffers と Java Serialization をサポート
Security, Metrics, Health Check機能を提供
もちろんRESTサービスと共存(サーバー・ポートは別)
gRPC のサポート
27
gRPCとは?
• CNCF(Cloud Native Computing Foundation)のインキュベーション・プロジェクト
• マイクロサービス間で効率的な通信を実現するためのしくみ
@RpcService(name = "helloworld.Greeter")
@ApplicationScoped
public class GreeterService{
@Unary(name = "SayHello")
public HelloReply sayHello(HelloRequest req) {
return HelloReply
.newBuilder()
.setMessage("Hello " + req.getName())
.build();
}
} Helidon MPのコーディング例
Copyright © 2021, Oracle and/or its affiliates
MicroProfile Reactive Messaging 準拠のKafkaConnector
MicroProfile Reactive MessagingをベースにKafkaとの送受信機能を提供
• アノテーションを使って簡単に送受信を実装
Kafkaの接続情報は設定ファイル内で指定
• アプリケーションはKafka接続への依存性を排除できる
OCI Streaming ともKafka互換APIを使って通信可能
Helidon Kafka Connector
Copyright © 2021, Oracle and/or its affiliates
28
Helidon
Kafka Connector
Producer
Helidon
Kafka Connector
Consumer
Kafka-pub Kafka-sub
MicroProfile
Reactive Messaging
MicroProfile
Reactive Messaging
Kafkaへの送信 Kafkaからの受信
Hybrid Application and Environment Management
Hybrid Applications in Hybrid Environments
Oracle Enterprise JavaVision – AppDev Platform
Copyright © 2021, Oracle and/or its affiliates
Open Operating Systems
Cloud Native Environment
Java Microservices Polyglot microservices
Traditional Applications
Public Cloud Private Cloud Hybrid Cloud
Operators
29
Helidon 概要