Mais conteúdo relacionado
Semelhante a Helidon 概要 (20)
Helidon 概要
- 3. 1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
3
- 4. 1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
4
- 5. エンタープライズ・アプリケーションの世界の変化
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. マイクロサービス・フレームワークの要件
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
- 8. 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
- 11. 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
• レプリカセットの維持(再起動)
• ローリングアップデート
• スケーリング
- 12. 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
- 13. 1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
13
- 15. 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
- 16. 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
- 17. • 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
- 18. 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 =
- 19. アノテーションで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
- 20. 1. Helidon とは
2. 2つのエディション - SE / MP
3. まとめ
Agenda
Copyright © 2021, Oracle and/or its affiliates
20
- 23. Strangler Pattern(ストラングラー・パターン)
マイクロサービス化に向けた設計パターン
Copyright © 2021, Oracle and/or its affiliates
23
アプリケーションの特定の機能を
徐々に改善していく
• 低コスト、高速、保守が容易
段階的に新しいアプリケーションや
サービスに置き換え
• ファサード(窓口)がユーザーからの要
求を既存アプリケーションまたは新し
いサービスにルーティング
• 置き換えが完了したら既存アプリケー
ションから古いサービスを削除
Application Server
Module 1 Module 2 Module N
Datastore
New Module
Datastore
既存アプリケーション
新規サービス
切り出したサービス
マイクロサービスとして実装
Facade
Helidon
- 24. 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
- 25. 様々な認証・認可スキームに対応 / 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の
ソースコードの例
- 26. 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
- 27. ※現在は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
- 28. 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からの受信
- 29. 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
Notas do Editor
- まず、Helidoの具体的な話に入る前に、 マイクロサービスに対する認識にはかなり個人差があると思いますので、まずは少なくともこのセッションの時間で共通する「マイクロサービスってこんなもの」 という認識合わせをして、そこから「マイクロサービスを構築するために使われる開発フレームワークの要件」みたいなものを考えていきたいと思います。
そこで引っ張り出してきたのが、古典といってもいいでしょう、James Lewis/Martin Fowler による「microservices」という記事です。そこには「The microservice architectural style」ということで、マイクロサービスに特徴的なアーキテクチャの要素が列挙されています。
。。。
という風に、マイクロサービスとして一般的に語られている特徴が端的にまとまっているのではないでしょうか?
で、これをひも解くと、次のような要件がマイクロサービス・フレームに求められるはずです。
。。。
はい、そして今日はHelidonについてのお話ですので、Helidonがこうした要件を果たして満たしているのかどうかをみていきましょう。
- Helidonには SEとMPという ふたつのエディションがあります。
ざっくりいうと、SEの方が超軽量、最近トレンドのリアクティブなフレームワークをベースにしています。
また、後述しますが、GraalVMを使ってネイティブ・イメージを作成できます。
MPは、SEをベースにして、Eclipse MicroProfileという規格に準拠したフレームワークの機能を提供します。
機能的にもSEよりリッチですし、これまでJava EEで開発をしてきた方には取り組みやすいフレームワークと言えます。
- Helidon SEの一つの特長は、GrralVMのネイティブイメージを作成できる点です。
(次ページに移って、もどる)
なぜ、GraalVMのnative imageがそんなに注目されるのか その背景にはマイクロサービス特有の要件があるから。
すなわち K8s上で速やかにかつ多くのインスタンスをスケールアウトしたり、FaaSで高速にコールドスタートするような必要がでてくるケースなどです。
なので、起動時間の短縮や、メモリー使用量の削減が重要な要件となります
スライド右側に通常のHotSpot VMとnative imageの比較があります 起動時間が劇的に短縮されていたり、メモリーのフットプリントが大きく減っているのがご覧いただけると思います
(まとめ)このようにHelidon SEはGraalVMと組み合わせることによって、特にマイクロサービスに特徴的なユースケースにおいて、大きなメリットを生み出します
- ライセンス
Apache 2.0
コミュニティ・サポート
Slack、StackOverflow、GitHub Issues
商用サポート
- Helidonは最初に Reactive Web Server、Config、Security の 3つの機能の提供から始まりました。
ベースとなるサーバー機能は、Java Non-blocking IOをベースにしたNettyというフレームワークの上に、Reactive Streams APIを使ったシンプルな関数型のルーティングモデルを構築しています。
・少ないスレッドで多くのコネクションをハンドルすることができたり
・メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを少なくしたり でき、
マイクロサービス・フレームワークに期待される要件を叶えています。
をベースにしています。
ちなみに他の多くのマイクロサービス系フレームワークも同様にNettyを採用していると思います。
このノンブロッキングIOをベースにしたリアクティブなアーキテクチャによって、
少ないスレッドで多くのコネクションをハンドルすることができたり
メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを少なくしたり でき、
マイクロサービス・フレームワークに期待される要件を叶えています。
---
Java NIO API
ノン・ブロッキングI/O
少ないスレッドで多くのコネクションをハンドル
メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを著しく削減
I/Oが無い場合、スレッドは他のタスクを実行可能
Netty
ローレベルなAPIであるJava NIOを汎用的に利用可能にしたフレームワーク
非同期&イベント・ドリブン
Flow = Reactive Streams
ノン・ブロッキングなバックプレッシャー(流量)制御で非同期ストリーム処理をおこなうための標準仕様
- 実際のサーバーのコーディングは、このような感じです。
非常にシンプルに関数型のコーディングスタイルで書くことができます
ご覧いただいているコードは、若干無理しているところもある感じですが、
(public static void main)の中の1ステートメントでWebサーバーの実装と
起動ができるくらいのシンプルさです。
- (MicroProfile …)をざっくり説明
ビジネスロジックを実装してRESTサービスとして公開するための主要機能に加えて
CNCFで標準化されているような標準のJava実装のためのAPI
マイクロサービスのデザインパターンやベストプラクティスを共通化して実装するためのAPI
これらをフレームワークとしてまとめたもの
開発者はビジネスロジックに集中できる
ベンダ独自仕様に縛られるようなロックインを回避できる
Java EE/Jakarta EEと何が違うかというと、生態系が違うという感じ
MPは、小さなサービスがたくさんあって、しかもいろいろな実行系・言語の混在状態であるような環境の中で動作することが前提になっている
- REST APIのロジックを実装する部分の話
Java EEから必要十分な仕様を持ってきていて、わかりやすく非常に強力な開発フレームワークになっている。
Java EEにJAX-RSというRESTアプリケーションを開発するための仕様があるが、これは普通のJavaのクラス(プロパティとメソッドをもったクラス)にアノテーションをつけるだけで、RESTサービス化することができる。
さらに、RESTはJsonフォーマットのデータをやりとりするが、そのあたりもJSON-Bという機能を使って、Javaオブジェクトにバインディングされるので、Jsonデータを直接扱う必要はない(あつかってもいいけど – JSON-P)
- 冒頭、マイクロサービス・フレームワークの要件についてお話をしましたが、このセッションを通じて、Helidonがクラウドネイティブ時代にふさわしいマイクロサービス・フレームワークであると皆さんに感じていただけたら幸いです。
- GraalVMには多くの側面があるが、すぐに受けることのできる恩恵としては
1. 新しいJavaベースのJITコンパイラを提供している
2. AOTコンパイレーションという技術を使って、事前にマシン語にコンパイルしたネイティブイメージを作成できる
GraalVMはオープンソースのCEと優れたパフォーマンスを提供する有償サポート版のEEがある
EEはオラクルクラウドをご利用いただくお客様には無償で利用いただけます
--
GraalVMはnative imageを作るほかにもいろいろな機能を提供しています
通常のJava SEからGraalVMに置き換えていただくと、GraalVMの提供する新しいJITコンパイラが威力を発揮して、おおよそ10~15%程度のパフォーマンス向上が見込まれるという結果がでています
https://llvm.org/devmtg/2016-01/slides/Sulong.pdf
- まず、セキュリティの部分ですが、Helidonは認証、認可に関するいろいろな機能をプロバイダという形で提供しています。
- HTTP系の各種認証機能
- MPにも規定がある、JWTを使った認可機能
- 外部のIdPと連携する方式としては、Google Login用の認証プロバイダやOpen ID Connect標準を使った認証プロバイダ
- さらには、Oracle Identity Cloud ServiceのグループとRoleをマッピングする機能を提供しています
ABAC – attribute based access control
- マイクロサービスとトランザクションに関しては既に多くの議論がある分野だと思いますが、
マイクロサービス間はともかく、単一のマイクロサービス内で行われる単一データソースに対するローカルトランザクションのニーズは相変わらず高いと思いますし、特にデータベースに対するデータ操作やコミットの制御、さらにコネクションのプーリングによるパフォーマンスの向上などは、必須の機能と思いますし、MicroProfileの規定にない部分でもある。
Helidon MPは、JPA/JTAというJava EE/Jakarta EE標準のAPIをサポートします
コネクションプールとして、Hikari CPとOracle UCPが使えます
その他、
キャッシュサーバーの機能を提供するRedis用のクライアントや、Oracle CloudのObject Storage用のクライアントを提供しています
---
実用に耐えるアプリケーションを書くとき、データをどこかに永続化したり、キャッシュしたりすることが必ず必要になる。
マイクロサービスは結果整合性や補償トランザクションという考え方が一般的ですが、これは一般的には複数のマイクロサービス間でおこなわれるトランザクションについての議論だと考えています。
- 拡張機能の最後は、gRPCに関してです
gRPCはご存じの方もいらっしゃると思いますが、
CNCF(Cloud Native Computing Foundation)のインキュベーション・プロジェクトのひとつで、
マイクロサービス間で効率的な通信を実現するためのしくみです。
(いったん次のページに行って、戻ってくる)
gRPCは現在はExperimentalという位置づけですが、SEでもMPでもサポートしています。
特徴としては、SEとMPでRESTサーバーのコーディングスタイルが違ったように、gRPCも各々の特徴を活かしたコーディングスタイルになっています。SEはリアクティブ・スタイル、MPはJAX-RSのgRPC版といってもいいようなアノテーションを使ったシンプルなコーディング・スタイルになっています。
Helidonオリジナルのプログラミングモデルの他にも、従来からあるProtocでコンパイルして生成したJavaのスタブや抽象クラスを使って作成されたサービス実装などは、変更することなくHelidonのgRPCサーバーに統合することができます
もう一つ、特徴的なのは、扱うことのできるペイロードのタイプです。一般的にはprotocol buffersという伝送効率が高く特定の言語に依存しないデータフォーマットを使うのですが、Helidonはそれに加えてJavaシリアライゼーションフォーマットも使えます。もっともJavaシリアライゼーションの形式はJava同志の通信でしか利用できませんので、どちらかというとプロトタイピング用途(つまり、さくっと何か試したいときにIDLコンパイラとか使わずにさくっと実装したいような場合)と思っていただいた方がよいと思います。
さらに、Helidonを使ったときの特典といえるものとして、Security, Metrics, Health といった付加機能をRESTと同様gRPCについても使えるようになっています。
- このスライドの後でデモ: