Oracle Cloud ウェビナー
ファンデーションシリーズ
企業システムで使えるマイクロサービスの特⻑と実践
伊藤 敬
Enterprise Cloud Native Java, Oracle Corporation
Principal Product Manager
仁井⽥ 拓也
⽇本オラクル株式会社 テクノロジー・クラウド・エンジニアリング本部
クラウドエンジニア
2021年4⽉15⽇
Contents
1 マイクロサービスの基本とメリット
Helidon概要と特⻑
Helidon MPとOracle Databaseの接続︓デモンストレーション
既存システムへのマイクロサービス導⼊
Helidon: サポート、各種情報リソース
まとめ
Copyright © 2021, Oracle and/or its affiliates |
2
2
3
4
5
6
Copyright © 2021, Oracle and/or its affiliates |
3
1. マイクロサービスの基本とメリット
アプリケーションの
リリース頻度イメージ
インフラ
アプリケーション
アーキテクチャ
⽉次 週次
OS / サーバーHW VM
アプリケーションの
デプロイ⼿法
シンプルなデプロイ作業. .
ウォーターフォール アジャイル Continuous Deployment
コンテナ
.Net
Java
Webアプリケーション マイクロサービス
A
B
C
Webアプリ多様化
2xDB APP
2008+ 2016+
2000
企業システムへのニーズ 進化の経緯
ビジネスニーズへの対応速度向上と柔軟性向上
⽇次/時次
インターネット経由で
サービス提供
サービスの多様化・
肥⼤化
クラウドでのサービス
提供が⼀般化
Copyright © 2021, Oracle and/or its affiliates |
4
マイクロサービスとは
Copyright © 2021, Oracle and/or its affiliates. |
5
サービス間の影響を極⼩化しシステムの変更容易性を⾼めるアーキテクチャ
保守とテストの容易性
• 更新単位を最⼩限にすることでテスト規模を最⼩化
• アプリケーション保守の範囲もコンパクトに
疎結合
• アプリケーション間の依存度を下げ開発容易性を⾼める
• 変更による稼働中のサービスに対する影響を極⼩化
独⽴してデプロイ可能
• サービスの更新の単位を⼩規模化
• スケール変更の単位を最⼩化しリソース割り当てを最適化
API
サービス実装
データストア
サービス間の影響の伝播を抑⽌することで稼働状態や実装⽅式をサービス毎に任意にコントロール
共有リソースの排除による依存関係の解消
• サービス毎でランタイムやリソースを占有
• APIを通してサービス間を疎結合化
• サービス単位で独⽴したスケールや稼働の制御、
データストア/アプリケーションの実装⽅式の選択
⾮同期連携の活⽤による負荷影響の伝播回避
• メッセージング等の基盤で処理を蓄積
• 各サービスの任意のタイミングで処理を実⾏
• 連携相⼿の処理性能、稼働状況に依存せず処理
を完了
マイクロサービス・アーキテクチャの主な強み
Copyright © 2021, Oracle and/or its affiliates. |
6
コンテナ
製品
カタログ
サービス コンテナ
製品
カタログ
サービス
コンテナ
製品
カタログ
サービス
コンテナ
注⽂管理
サービス
アプリケーション・サーバ
在庫管理
サービス
NoSQL
RDB
キャッシュ
注⽂管理
サービス
在庫管理
サービス
RDB
製品
カタログ
サービス
在庫予約キュー
更新通知キュー
在庫マスタ
⼀定のスルー
プットで処理
NoSQL
REST
API
Copyright © 2021, Oracle and/or its affiliates |
7
2. Helidonの概要と特⻑
Javaベースのマイクロサービス・フレームワーク製品とその分布
Micro frameworks
MicroProfile based
Full-stack
Helidon MP
Helidon SE
Dropwizard
Oracle Corporation 作成
軽量・⼩型
重・⼤型
Copyright © 2021, Oracle and/or its affiliates |
8
Javaベース・⼩型・⾼速なマイクロサービスの構築を可能にする
オープンソースフレームワーク
最新バージョン︓2.2.2 (2021年4⽉現在)
特⻑︓2つのアプリケーションモデル
Helidon SE
• Nettyベースの極⼩WebサーバとFunctional Routing機構
、独⾃reactive streams、DI/CDIなし
Helidon MP
• MicroProfile/Jakarta EE標準準拠のコンポーネント群と
DIベースのアプリ開発、CDI Extension
• MicroProfile 3.3 準拠
• Apache License 2.0でライセンス – 商⽤利⽤も無償
• Java 11 以上で動作
• GraalVM ネィティブイメージ対応 (SE & MP)
Javaマイクロサービス開発フレームワーク
Helidonとは︓
Helidon SE
Helidon MP Helidon MP
Helidon SE
Copyright © 2021, Oracle and/or its affiliates |
9
Copyright © 2021 Oracle and/or its affiliates.
• Java⾔語ベース
• ⾼いパフォーマンスと少ないメモリ使⽤量
• 標準テクノロジーへの準拠・採⽤
• 外部リソースとの連携
• Oracle Database (OnP/Cloud)との多様な接続・連携
• 開発・運⽤ツールとの連携
• OSSベースのサポートと商⽤サポート
• Oracle WebLogic Server/Coherenceとの容易な連携
Helidon の特⻑と優位性
GraalVM ネイティブイメージ
• ネイティブ実⾏可能ファイルへの事前コンパイル
• 起動時間の⼤幅な改善
• 必要メモリ容量の削減
GraalVM ネイティブイメージ上のHelidonアプリ
• 20〜30ミリ秒で起動
• ほぼ瞬時のスケーリング
• Javaアプリで“サーバレス”レベルのパフォーマンス
• 標準のJavaのみで実現
• Java/Jakarta EE、 MicroProfile APIへの準拠
Helidon と GraalVM ネイティブイメージ
Innovating for Java Microservices
Copyright © 2021 Oracle and/or its affiliates.
Native Image
0
0.1
0.2
0.3
0.4
0.5
GraalVM Native
Helidon SE
26 ms
起動時間
(秒)
Routing routing =
Routing.builder()
.get("/hello", (req, res) ->
res.send("Hello World"))
.build();
WebServer.create(routing)
.start();
@Path("hello")
public class HelloWorld {
@GET
public String hello() {
return "Hello World";
}
}
サンプルコード “Hello World” の記述例を⽤いたHelidonのアプリケーションモデルの違い
Helidon SEはDI(Dependency Injection)がなく、Javaの関数型プログラミングが主体
Helidon MPはMicroProfileのCDI、JAX-RSなどのアノテーションによる宣⾔型プログラミング
Copyright © 2021, Oracle and/or its affiliates |
12
Helidon SEを構成するコンポーネント群
Copyright © 2021 Oracle and/or its affiliates.
Reactive Web
Server
[Webサーバ]
Config
[アプリ構成管理]
Security
[包括セキュリティ]
Tracing
[アプリ間連携監視]
Metrics
[アプリ状態監視]
Health Check
[アプリ死活監視]
gRPC Server and
Client
[同期型アプリ連携]
DB Client
[DBクライアント]
WebClient
[Webクライアント]
Reactive
Streams
[アプリ内イベント基盤]
Reactive
Messaging
[⾮同期通信]
WebSocket
[ソケット通信]
gRPC Server /
Client
Publisher/
Subscriber
Mongo DB
(Reactive) /
Oracle DB
(Non-Reactive)
Web Server
Microservices
Web Server
Etc.
⾮同期・ノンブロッキング・リアクティブ
Routing
REST
Helidon MPのコンポーネント群
Copyright © 2021 Oracle and/or its affiliates.
Jakarta
RESTful
Web Services
Jakarta
CDI
Jakarta
JSON Processing
MicroProfile
Tracing
MicroProfile
Metrics
Jakarta
JSON Binding
MicroProfile
Reactive
Messaging
MicroProfile
Health Checks
MicroProfile
Fault Tolerance
MicroProfile
JWT Auth
MicroProfile
REST Client
MicroProfile
Config
Jakarta
Persistence
MicroProfile
Reactive Streams
Operators
MicroProfile
OpenAPI
Jakarta
Websocket
CDI Extension
JTA
CDI Extension
gRPC
CDI Extension
Oracle UCP
CDI Extension
HikariCP
CDI Extension
Coherence
CDI Extension
OCI Object
Storage
Jakarta EE
Enterprise Java標準︓Jakarta EE と MicroProfile そしてHelidonのカバー範囲
15
Helidon MP
MicroProfile
Config
Fault Tolerance
Metrics Health Check
OpenTracing
JWT Auth
Open API
Reactive
Messaging
Reactive Stream
Operators
GraphQL
JAX-RS
Web Service
JAX-RS
Rest Client
CDI
JSON-P
JSON-B
WebSocket
JPA
JTA
Servlet
JSP
JSF
JSTL
EL
Annotations
EJB
Bean Validation
Managed Beans
Interceptors
Security
Authentication
MicroProfile
Jakarta EE
MicroProfile
Jakarta EE
gRPC
DB Client
Web Client
Security
CORS
Helidon
Copyright © 2021, Oracle and/or its affiliates |
パフォーマンスとフットプリント
Copyright © 2021, Oracle and/or its affiliates |
16
• Netty - ⾼性能ネットワークアプリケーションフレームワークの採⽤
• 堅牢かつ⾼い拡張性
• 卓越したパフォーマンスを提供
• ⾮同期イベント駆動型
• Reactive APIをサポート
• 最速*リアクティブストリームオペレータの実装
• リアクティブなノンブロッキングHTTPクライアント
• リアクティブなノンブロッキングデータベースクライアント
• Java 11+ 対応によるランタイム⼩型化の実現
• カスタマイズされた(縮⼩された)Javaランタイム環境 - Jlink
• ネイティブイメージモードでは、完全なJavaランタイム環境が不要
• サーバーレス⽤途に最適
• 起動時間が速く、メモリ使⽤量が少なく、アプリケーションサイズが⼩さい
⾼いパフォーマンスとフットプリントの削減を実現
* As of 2020 December
Copyright © 2021, Oracle and/or its affiliates |
17
外部リソースとの連携
Copyright © 2021, Oracle and/or its affiliates |
18
Helidon SE – DB Clientコンポーネント
• RDB、⾮RDBいずれにも対応
• Helidon Configコンポーネントに接続するDBの属性情報をセット
• プログラム中でDB Client APIを使⽤してDBへ接続、処理
Helidon MP – JPA/JTA
• Jakarta EEベースのDB処理をHelidonで実装
• JPA: O/Rマッピングの仕組みを提供
• JTA: RDBを操作するトランザクション処理実装
Helidon MP – Micronaut Dataとの連携
• Micronaut Data – Micronaut Projectが開発するデータベースアクセス・ツールキット
RDBとの連携
Copyright © 2021 Oracle. All rights reserved.
この後デモンストレーションをご覧いただきます
CDI Extension for Oracle UCP
• Universal Connection Pooling(UCP)により、多彩なOracleデータベース独⾃機能を利⽤できる
• ⾼速接続フェイルオーバー(FCF)、ランタイム接続負荷分散、およびWebセッション/トランザクションベースの
接続アフィニティ
• データベース常駐接続プール(DRCP)
• アプリケーション・コンティニュイティ
• マイクロサービスメッセージング⽤ Oracle Advanced Queueingへの対応
• OracleAQメッセージングコネクタ
• イベントソーシングとSAGA / LRA *のアトミックデリバリーを容易にする
Oracle Databaseとの連携
* MicroProfile LRA proposal in progress
Copyright © 2021, Oracle and/or its affiliates |
20
• コンテナファーストに基づく設計・開発
• メモリ使⽤量が少なく、起動時間が短い
• Observability – Prometheus/Grafana, Tracing – Zipkin/Jaeger
• Jibを使⽤したDockerイメージビルドのサポート
• Jib: MavenおよびGradleと統合
• Jib: dockerコマンドやDockerデーモンを必要としない
• Kubernetesプローブと連携するヘルスチェック機能
• コンテナサイズを縮⼩するための異なるパッケージ化
• カスタマイズされた(縮⼩された)Javaランタイム環境 - Jlink
• ネイティブイメージモードでは、完全なJavaランタイム環境が不要
コンテナテクノロジー、Kubernetesへの対応
Copyright © 2021, Oracle and/or its affiliates |
21
Copyright © 2021, Oracle and/or its affiliates |
22
3. Helidon MP と Oracle Databaseの接続: デモンストレーション
デモアプリケーションの条件
• Java: Java 11+
• Helidon: v2.2.2
前提条件
Copyright © 2021, Oracle and/or its affiliates.
23
https://github.com/oracle-japan/helidon-handson
サンプルソースコードは以下から⼊⼿できます
Copyright © 2021, Oracle and/or its affiliates
24
Helidonデモご紹介内容
Copyright © 2021, Oracle and/or its affiliates.
25
1.設定ファイル
確認
• 1-1︓構成ファイル(microprofile-config.properties)の確認(データソースの接続設定など)
• 1-2︓JPA設定ファイル(persistence.xml)の確認(永続ユニット、O/Rマッピングの設定など)
2.実装
• 2-1︓Entityクラスを実装(テーブルへのマッピングやカラムへのマッピングの実装)
• 2-2︓RESTエンドポイントの実装(パスやリクエスト/レスポンス形式の実装)
デモの概要
Copyright © 2021, Oracle and/or its affiliates.
26
Autonomous
Transaction
Processing
(ATP)
クライアント JAX-RS JPA/JTA
都道府県情報を
取得
JAX-RS(Jersey)
• RESTアーキテクチャなWebアプリを作成するための仕
様
• Java + HTTPをサービス化
• RESTインタフェースをアノテーションを付与するだけ
で実現可能。具体例は以下
• @Path︓リソースクラスのパス
• @GET/@POST/@PUT/@DELETE/@HEAD︓
HTTPメソッドの種別
• @Produces︓レスポンスのContext-Type
• @Path︓メソッドのパス
• この実装例の場合は以下のURLでアクセス可能
• http://host:port/sample_service/hello
• リクエストのクエリパラメータやFormのパラメータも
アノテーションで読み取り可能
JAX-RS(Jersey)概要
Copyright © 2021, Oracle and/or its affiliates.
27
JavaDoc︓
https://javadoc.io/doc/jakarta.ws.rs/jakarta.ws.rs-api/latest/index.html
JPA
• リレーショナルデータベース(RDB)をJavaアプリケーション
から操作するためのO/Rマッピングの仕組みを提供
• JAX-RSと同様にアノテーションで設定可能。具体
例は以下
• @Table︓マッピング対象となるテーブル名
• @Entity︓該当するクラスに付与することで、Entityク
ラスであることを⽰す
• @Id︓Entityの中でPrimary Keyとなるプロパティや
フィールドを⽰す
• @Column︓カラムとなるプロパティやフィールドに⽰し、
そのカラム属性を指定可能
• データベースのテーブルと対応付けられるJavaクラス
のEntityはEntityマネージャで管理
JPA概要
Copyright © 2021, Oracle and/or its affiliates.
28
JavaDoc︓
https://jakarta.ee/specifications/persistence/2.2/apidocs/javax/persistence
/package-summary.html
JTA
• リレーショナルデータベース(RDB)をJavaアプリケーショ
ンから操作するためのトランザクションの仕組みを提供
• JAX-RSと同様にアノテーションで設定可能。具体
例は以下
• @Transactional︓メソッドに付与することで、トランザ
クションの振る舞いを定義。以下具体例
JTA概要
Copyright © 2021, Oracle and/or its affiliates.
29
TxType トランザクション外か
ら
既存トランザクション内
から
TxType.REQUIRED 新しいトランザクション
を開始
既存トランザクション内で
実⾏
TxType.REQUIRED
_NEW
新しいトランザクション
を開始
既存トランザクションを⼀
旦停⽌し、新しいトラン
ザクション内で実⾏
JavaDoc︓https://jakarta.ee/specifications/transactions/2.0/apidocs/
1-1︓サンプルコードの解説(microprofile-config.properties)
Copyright © 2021, Oracle and/or its affiliates.
30
microprofile-config.properties(HelidonのConfig)
• データベース設定
• dataSourceClassName︓データソースクラス名
• 今回は”oracle.jdbc.pool.OracleDataSource”
• dataSource.url︓データソースURL名
• 今回は”jdbc:oracle:driver_type:@データベース指定
⼦”(ATP Wallet(クライアント資格証明)もここで指定)
• dataSource.user/password︓データベースユーザ
名とパスワード
• サーバ設定系
• server.host/port︓起動するWebサーバのホストと
ポート
1.設定ファイル
チューニング
persistence.xml (JPA/JTAのConfig)
• Persistence-unit
• name: ユニット名(パーケージ内で⼀意)
• transaction-type: “JTA”
• jta-data-source: データベース名
• class: Entityクラスを記載
• Properties
• データベーステーブルの⾃動⽣成の設定
• O/R マッパーの設定
• Eclipse Linkプロパティの設定
1-2︓サンプルコードの解説(persistence.xml)
Copyright © 2021, Oracle and/or its affiliates.
31
1.設定ファイル
チューニング
2-1︓サンプルコードの解説(Entityの実装)
Copyright © 2021, Oracle and/or its affiliates.
32
Entityの実装(JTA/JPAアノテーションを利⽤)
• Entity︓JPAのEntityの識別名
• Table︓マッピング先のテーブル名
• Access︓JPAがsetterメソッドやgetterメソッドを介さ
ずにアクセス可能な⽅式
• Propertyベース
• Fieldベース
• NamedQueries︓クエリの設定
• NamedQueryを複数設定可能
• Nameにクエリ名、queryにクエリを設定
• Id︓Entity内の主キー
• Column︓カラム属性
• Basic︓カラムへのマッピングの型
• 他にも複数設定可能
2.実装
2-2︓サンプルコードの解説(RESTエンドポイント(GET))
Copyright © 2021, Oracle and/or its affiliates.
33
クラスの実装(JPA/JAX-RSアノテーションを利⽤)
• Path︓RESTエンドポイントのコンテキストパス
• EntityManagerのインジェクション
• PersistenceContextアノテーションで定義
• unitname︓ Persistent-unitのunitnameを設定
メソッドの実装(JAX-RSアノテーションを利⽤)
• HTTP Method︓”GET”
• Path︓クラスで設定したPath以後のパス
• Produces︓レスポンスのContext-type
• クエリの作成はEntityManagerを利⽤
• 引数にEntityクラスのクエリ名を指定
2.実装
Helidon CLI(最新v2.1.3)
• https://github.com/oracle/
helidon/blob/master/HELIDON-CLI.md
• Helidon initによるベースプロジェクト作成
⼊⼒項⽬
• SE/MP:
• 今回はMP(2)
• bare/quickstart/database
• 今回はbatabase(3)
• パッケージ名
Helidon CLI
Copyright © 2021, Oracle and/or its affiliates.
34
user@client > helidon init
Using Helidon version 2.2.1
Helidon flavor
(1) SE
(2) MP
Enter selection (Default: 1): 2
Select archetype
(1) bare | Minimal Helidon MP project suitable to start from scratch
(2) quickstart | Sample Helidon MP project that includes multiple REST
operations
(3) database | Helidon MP application that uses JPA with an in-memory H2
database
Enter selection (Default: 1): 3
Project name (Default: database-mp):
Project groupId (Default: me.helidon):
Project artifactId (Default: database-mp):
Project version (Default: 1.0-SNAPSHOT):
Java package name (Default: me.test.mp.database): <パッケージ名>
Switch directory to /users/database-mp to use CLI
Start development loop? (Default: n): n
Copyright © 2021, Oracle and/or its affiliates |
35
4. 既存システムへのマイクロサービス導⼊
既存のアプリケーションからマイクロサービスを切り出す⽤件例︓
• ⼀部のコンポーネントが他のコンポーネントよりも頻繁に更新する必要がある
• あるコンポーネントにのみ異なるスケール要件が存在する
• あるコンポーネントが異なるテクノロジーを使⽤して開発する必要がある
• コードベースが⼤きく複雑になりすぎた
既存のアプリケーションからマイクロサービスを切り出す、もしくは追加するパターン例︓
• ストラングラーパターン
• Java EE アプリケーションへのサービス追加パターン
既存システムをマイクロサービスへ移⾏する
Copyright © 2021, Oracle and/or its affiliates |
36
Helidonマイクロサービスで既存のアプリケーションを進化させる
ストラングラーパターン
• 段階的な移⾏ - アプリの機能を段階的に
置き換える
• “ファサード”: ユーザの要求をアプリケーション
にルーティング
• 新旧のサービスを並⾏稼働し、時間の経
過とともに、徐々に機能を新しいアーキテク
チャに移⾏
• 機能が置き換えられた後、モノリスの「死ん
だ」部分を削除/廃棄
Middleware
Module 2
Datastore
Helidon
New
Module
Datastore
既存アプリケーション 新規or移⾏サービス
マイクロサービスとして実装
ファサード
Module 1 Module N
Copyright © 2021, Oracle and/or its affiliates |
37
POD POD
POD
WebLogic
Operator
NAMESPACE - OPERATOR
NAMESPACE – WEBLOGIC DOMAIN
OCI – VM AVAILABILITY DOMAIN 1
OCI Oracle Kubernetes Engine (OKE) – Kubernetes Cluster
Admin
Server
Internet
WEBLOGIC DOMAIN
T3S
Orchestrate WebLogic – Manage WebLogic Pods
WEBLOGIC CLUSTER
POD
Managed
Server 1
POD
Managed
Server 2
App App
NAMESPACE - HELIDON
POD
Helidon
OKE上のHelidonマイクロサービスで既存のアプリケーションを進化させる
HTTPS
HTTPS
HTTPS
HTTPS
HTTPS
OCI – VM AVAILABILITY DOMAIN 2 OCI – VM AVAILABILITY DOMAIN ...
Copyright © 2021, Oracle and/or its affiliates |
38
Copyright © 2021, Oracle and/or its affiliates |
39
5. Helidon: サポート、各種情報リソース
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/Coherenceライセンス保有のお客様にHelidonのサポート提供
Helidonのサポート
Copyright © 2020 Oracle and/or its affiliates.
Copyright © 2021, Oracle and/or its affiliates |
40
Helidonに関する各種情報
41
Blogs
Social Media
https://helidon.io/
Helidon Website
https://twitter.com/helidon_project
@helidon_project
Contribute
https://github.com/oracle/helidon
https://medium.com/helidon
Get Answers
https://stackoverflow.com/tags/helidon
https://helidon.slack.com/
• Slack Invitation link
Helidon on YouTube
Copyright © 2021, Oracle and/or its affiliates |
https://www.youtube.com/channel/UChg00-uTTrCMmPsuzUNaZsA
Copyright © 2021, Oracle and/or its affiliates |
42
6. まとめ
• HelidonならEnterprise Java標準のナレッジを活かせる
• HelidonならOracle Databaseとの連携を容易に実現できる
• マルチテナントDBの活⽤、コンバージドDBへの応⽤
• UCPを使って可⽤性の向上にチャレンジ
• Helidonでストラングラーパターンを試す
• 既存アプリケーションからの機能の切り出し・分割
• WebLogic ServerアプリにHelidonで新機能追加
• ビジネスニーズへの迅速な対応やサービス提供の継続的な変更など、マイクロサービス活⽤をHelidonで︕
Helidonでマイクロサービス導⼊を検討する
Copyright © 2021, Oracle and/or its affiliates
43
ご視聴
ありがとうございました
Copyright © 2021, Oracle and/or its affiliates
44
企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)

企業システムで使えるマイクロサービスの特長と実践 (Oracle Cloudウェビナーシリーズ: 2021年4月15日)

  • 1.
    Oracle Cloud ウェビナー ファンデーションシリーズ 企業システムで使えるマイクロサービスの特⻑と実践 伊藤敬 Enterprise Cloud Native Java, Oracle Corporation Principal Product Manager 仁井⽥ 拓也 ⽇本オラクル株式会社 テクノロジー・クラウド・エンジニアリング本部 クラウドエンジニア 2021年4⽉15⽇
  • 2.
    Contents 1 マイクロサービスの基本とメリット Helidon概要と特⻑ Helidon MPとOracleDatabaseの接続︓デモンストレーション 既存システムへのマイクロサービス導⼊ Helidon: サポート、各種情報リソース まとめ Copyright © 2021, Oracle and/or its affiliates | 2 2 3 4 5 6
  • 3.
    Copyright © 2021,Oracle and/or its affiliates | 3 1. マイクロサービスの基本とメリット
  • 4.
    アプリケーションの リリース頻度イメージ インフラ アプリケーション アーキテクチャ ⽉次 週次 OS /サーバーHW VM アプリケーションの デプロイ⼿法 シンプルなデプロイ作業. . ウォーターフォール アジャイル Continuous Deployment コンテナ .Net Java Webアプリケーション マイクロサービス A B C Webアプリ多様化 2xDB APP 2008+ 2016+ 2000 企業システムへのニーズ 進化の経緯 ビジネスニーズへの対応速度向上と柔軟性向上 ⽇次/時次 インターネット経由で サービス提供 サービスの多様化・ 肥⼤化 クラウドでのサービス 提供が⼀般化 Copyright © 2021, Oracle and/or its affiliates | 4
  • 5.
    マイクロサービスとは Copyright © 2021,Oracle and/or its affiliates. | 5 サービス間の影響を極⼩化しシステムの変更容易性を⾼めるアーキテクチャ 保守とテストの容易性 • 更新単位を最⼩限にすることでテスト規模を最⼩化 • アプリケーション保守の範囲もコンパクトに 疎結合 • アプリケーション間の依存度を下げ開発容易性を⾼める • 変更による稼働中のサービスに対する影響を極⼩化 独⽴してデプロイ可能 • サービスの更新の単位を⼩規模化 • スケール変更の単位を最⼩化しリソース割り当てを最適化 API サービス実装 データストア
  • 6.
    サービス間の影響の伝播を抑⽌することで稼働状態や実装⽅式をサービス毎に任意にコントロール 共有リソースの排除による依存関係の解消 • サービス毎でランタイムやリソースを占有 • APIを通してサービス間を疎結合化 •サービス単位で独⽴したスケールや稼働の制御、 データストア/アプリケーションの実装⽅式の選択 ⾮同期連携の活⽤による負荷影響の伝播回避 • メッセージング等の基盤で処理を蓄積 • 各サービスの任意のタイミングで処理を実⾏ • 連携相⼿の処理性能、稼働状況に依存せず処理 を完了 マイクロサービス・アーキテクチャの主な強み Copyright © 2021, Oracle and/or its affiliates. | 6 コンテナ 製品 カタログ サービス コンテナ 製品 カタログ サービス コンテナ 製品 カタログ サービス コンテナ 注⽂管理 サービス アプリケーション・サーバ 在庫管理 サービス NoSQL RDB キャッシュ 注⽂管理 サービス 在庫管理 サービス RDB 製品 カタログ サービス 在庫予約キュー 更新通知キュー 在庫マスタ ⼀定のスルー プットで処理 NoSQL REST API
  • 7.
    Copyright © 2021,Oracle and/or its affiliates | 7 2. Helidonの概要と特⻑
  • 8.
    Javaベースのマイクロサービス・フレームワーク製品とその分布 Micro frameworks MicroProfile based Full-stack HelidonMP Helidon SE Dropwizard Oracle Corporation 作成 軽量・⼩型 重・⼤型 Copyright © 2021, Oracle and/or its affiliates | 8
  • 9.
    Javaベース・⼩型・⾼速なマイクロサービスの構築を可能にする オープンソースフレームワーク 最新バージョン︓2.2.2 (2021年4⽉現在) 特⻑︓2つのアプリケーションモデル Helidon SE •Nettyベースの極⼩WebサーバとFunctional Routing機構 、独⾃reactive streams、DI/CDIなし Helidon MP • MicroProfile/Jakarta EE標準準拠のコンポーネント群と DIベースのアプリ開発、CDI Extension • MicroProfile 3.3 準拠 • Apache License 2.0でライセンス – 商⽤利⽤も無償 • Java 11 以上で動作 • GraalVM ネィティブイメージ対応 (SE & MP) Javaマイクロサービス開発フレームワーク Helidonとは︓ Helidon SE Helidon MP Helidon MP Helidon SE Copyright © 2021, Oracle and/or its affiliates | 9
  • 10.
    Copyright © 2021Oracle and/or its affiliates. • Java⾔語ベース • ⾼いパフォーマンスと少ないメモリ使⽤量 • 標準テクノロジーへの準拠・採⽤ • 外部リソースとの連携 • Oracle Database (OnP/Cloud)との多様な接続・連携 • 開発・運⽤ツールとの連携 • OSSベースのサポートと商⽤サポート • Oracle WebLogic Server/Coherenceとの容易な連携 Helidon の特⻑と優位性
  • 11.
    GraalVM ネイティブイメージ • ネイティブ実⾏可能ファイルへの事前コンパイル •起動時間の⼤幅な改善 • 必要メモリ容量の削減 GraalVM ネイティブイメージ上のHelidonアプリ • 20〜30ミリ秒で起動 • ほぼ瞬時のスケーリング • Javaアプリで“サーバレス”レベルのパフォーマンス • 標準のJavaのみで実現 • Java/Jakarta EE、 MicroProfile APIへの準拠 Helidon と GraalVM ネイティブイメージ Innovating for Java Microservices Copyright © 2021 Oracle and/or its affiliates. Native Image 0 0.1 0.2 0.3 0.4 0.5 GraalVM Native Helidon SE 26 ms 起動時間 (秒)
  • 12.
    Routing routing = Routing.builder() .get("/hello",(req, res) -> res.send("Hello World")) .build(); WebServer.create(routing) .start(); @Path("hello") public class HelloWorld { @GET public String hello() { return "Hello World"; } } サンプルコード “Hello World” の記述例を⽤いたHelidonのアプリケーションモデルの違い Helidon SEはDI(Dependency Injection)がなく、Javaの関数型プログラミングが主体 Helidon MPはMicroProfileのCDI、JAX-RSなどのアノテーションによる宣⾔型プログラミング Copyright © 2021, Oracle and/or its affiliates | 12
  • 13.
    Helidon SEを構成するコンポーネント群 Copyright ©2021 Oracle and/or its affiliates. Reactive Web Server [Webサーバ] Config [アプリ構成管理] Security [包括セキュリティ] Tracing [アプリ間連携監視] Metrics [アプリ状態監視] Health Check [アプリ死活監視] gRPC Server and Client [同期型アプリ連携] DB Client [DBクライアント] WebClient [Webクライアント] Reactive Streams [アプリ内イベント基盤] Reactive Messaging [⾮同期通信] WebSocket [ソケット通信] gRPC Server / Client Publisher/ Subscriber Mongo DB (Reactive) / Oracle DB (Non-Reactive) Web Server Microservices Web Server Etc. ⾮同期・ノンブロッキング・リアクティブ Routing REST
  • 14.
    Helidon MPのコンポーネント群 Copyright ©2021 Oracle and/or its affiliates. Jakarta RESTful Web Services Jakarta CDI Jakarta JSON Processing MicroProfile Tracing MicroProfile Metrics Jakarta JSON Binding MicroProfile Reactive Messaging MicroProfile Health Checks MicroProfile Fault Tolerance MicroProfile JWT Auth MicroProfile REST Client MicroProfile Config Jakarta Persistence MicroProfile Reactive Streams Operators MicroProfile OpenAPI Jakarta Websocket CDI Extension JTA CDI Extension gRPC CDI Extension Oracle UCP CDI Extension HikariCP CDI Extension Coherence CDI Extension OCI Object Storage
  • 15.
    Jakarta EE Enterprise Java標準︓JakartaEE と MicroProfile そしてHelidonのカバー範囲 15 Helidon MP MicroProfile Config Fault Tolerance Metrics Health Check OpenTracing JWT Auth Open API Reactive Messaging Reactive Stream Operators GraphQL JAX-RS Web Service JAX-RS Rest Client CDI JSON-P JSON-B WebSocket JPA JTA Servlet JSP JSF JSTL EL Annotations EJB Bean Validation Managed Beans Interceptors Security Authentication MicroProfile Jakarta EE MicroProfile Jakarta EE gRPC DB Client Web Client Security CORS Helidon Copyright © 2021, Oracle and/or its affiliates |
  • 16.
  • 17.
    • Netty -⾼性能ネットワークアプリケーションフレームワークの採⽤ • 堅牢かつ⾼い拡張性 • 卓越したパフォーマンスを提供 • ⾮同期イベント駆動型 • Reactive APIをサポート • 最速*リアクティブストリームオペレータの実装 • リアクティブなノンブロッキングHTTPクライアント • リアクティブなノンブロッキングデータベースクライアント • Java 11+ 対応によるランタイム⼩型化の実現 • カスタマイズされた(縮⼩された)Javaランタイム環境 - Jlink • ネイティブイメージモードでは、完全なJavaランタイム環境が不要 • サーバーレス⽤途に最適 • 起動時間が速く、メモリ使⽤量が少なく、アプリケーションサイズが⼩さい ⾼いパフォーマンスとフットプリントの削減を実現 * As of 2020 December Copyright © 2021, Oracle and/or its affiliates | 17
  • 18.
    外部リソースとの連携 Copyright © 2021,Oracle and/or its affiliates | 18
  • 19.
    Helidon SE –DB Clientコンポーネント • RDB、⾮RDBいずれにも対応 • Helidon Configコンポーネントに接続するDBの属性情報をセット • プログラム中でDB Client APIを使⽤してDBへ接続、処理 Helidon MP – JPA/JTA • Jakarta EEベースのDB処理をHelidonで実装 • JPA: O/Rマッピングの仕組みを提供 • JTA: RDBを操作するトランザクション処理実装 Helidon MP – Micronaut Dataとの連携 • Micronaut Data – Micronaut Projectが開発するデータベースアクセス・ツールキット RDBとの連携 Copyright © 2021 Oracle. All rights reserved. この後デモンストレーションをご覧いただきます
  • 20.
    CDI Extension forOracle UCP • Universal Connection Pooling(UCP)により、多彩なOracleデータベース独⾃機能を利⽤できる • ⾼速接続フェイルオーバー(FCF)、ランタイム接続負荷分散、およびWebセッション/トランザクションベースの 接続アフィニティ • データベース常駐接続プール(DRCP) • アプリケーション・コンティニュイティ • マイクロサービスメッセージング⽤ Oracle Advanced Queueingへの対応 • OracleAQメッセージングコネクタ • イベントソーシングとSAGA / LRA *のアトミックデリバリーを容易にする Oracle Databaseとの連携 * MicroProfile LRA proposal in progress Copyright © 2021, Oracle and/or its affiliates | 20
  • 21.
    • コンテナファーストに基づく設計・開発 • メモリ使⽤量が少なく、起動時間が短い •Observability – Prometheus/Grafana, Tracing – Zipkin/Jaeger • Jibを使⽤したDockerイメージビルドのサポート • Jib: MavenおよびGradleと統合 • Jib: dockerコマンドやDockerデーモンを必要としない • Kubernetesプローブと連携するヘルスチェック機能 • コンテナサイズを縮⼩するための異なるパッケージ化 • カスタマイズされた(縮⼩された)Javaランタイム環境 - Jlink • ネイティブイメージモードでは、完全なJavaランタイム環境が不要 コンテナテクノロジー、Kubernetesへの対応 Copyright © 2021, Oracle and/or its affiliates | 21
  • 22.
    Copyright © 2021,Oracle and/or its affiliates | 22 3. Helidon MP と Oracle Databaseの接続: デモンストレーション
  • 23.
    デモアプリケーションの条件 • Java: Java11+ • Helidon: v2.2.2 前提条件 Copyright © 2021, Oracle and/or its affiliates. 23
  • 24.
  • 25.
    Helidonデモご紹介内容 Copyright © 2021,Oracle and/or its affiliates. 25 1.設定ファイル 確認 • 1-1︓構成ファイル(microprofile-config.properties)の確認(データソースの接続設定など) • 1-2︓JPA設定ファイル(persistence.xml)の確認(永続ユニット、O/Rマッピングの設定など) 2.実装 • 2-1︓Entityクラスを実装(テーブルへのマッピングやカラムへのマッピングの実装) • 2-2︓RESTエンドポイントの実装(パスやリクエスト/レスポンス形式の実装)
  • 26.
    デモの概要 Copyright © 2021,Oracle and/or its affiliates. 26 Autonomous Transaction Processing (ATP) クライアント JAX-RS JPA/JTA 都道府県情報を 取得
  • 27.
    JAX-RS(Jersey) • RESTアーキテクチャなWebアプリを作成するための仕 様 • Java+ HTTPをサービス化 • RESTインタフェースをアノテーションを付与するだけ で実現可能。具体例は以下 • @Path︓リソースクラスのパス • @GET/@POST/@PUT/@DELETE/@HEAD︓ HTTPメソッドの種別 • @Produces︓レスポンスのContext-Type • @Path︓メソッドのパス • この実装例の場合は以下のURLでアクセス可能 • http://host:port/sample_service/hello • リクエストのクエリパラメータやFormのパラメータも アノテーションで読み取り可能 JAX-RS(Jersey)概要 Copyright © 2021, Oracle and/or its affiliates. 27 JavaDoc︓ https://javadoc.io/doc/jakarta.ws.rs/jakarta.ws.rs-api/latest/index.html
  • 28.
    JPA • リレーショナルデータベース(RDB)をJavaアプリケーション から操作するためのO/Rマッピングの仕組みを提供 • JAX-RSと同様にアノテーションで設定可能。具体 例は以下 •@Table︓マッピング対象となるテーブル名 • @Entity︓該当するクラスに付与することで、Entityク ラスであることを⽰す • @Id︓Entityの中でPrimary Keyとなるプロパティや フィールドを⽰す • @Column︓カラムとなるプロパティやフィールドに⽰し、 そのカラム属性を指定可能 • データベースのテーブルと対応付けられるJavaクラス のEntityはEntityマネージャで管理 JPA概要 Copyright © 2021, Oracle and/or its affiliates. 28 JavaDoc︓ https://jakarta.ee/specifications/persistence/2.2/apidocs/javax/persistence /package-summary.html
  • 29.
    JTA • リレーショナルデータベース(RDB)をJavaアプリケーショ ンから操作するためのトランザクションの仕組みを提供 • JAX-RSと同様にアノテーションで設定可能。具体 例は以下 •@Transactional︓メソッドに付与することで、トランザ クションの振る舞いを定義。以下具体例 JTA概要 Copyright © 2021, Oracle and/or its affiliates. 29 TxType トランザクション外か ら 既存トランザクション内 から TxType.REQUIRED 新しいトランザクション を開始 既存トランザクション内で 実⾏ TxType.REQUIRED _NEW 新しいトランザクション を開始 既存トランザクションを⼀ 旦停⽌し、新しいトラン ザクション内で実⾏ JavaDoc︓https://jakarta.ee/specifications/transactions/2.0/apidocs/
  • 30.
    1-1︓サンプルコードの解説(microprofile-config.properties) Copyright © 2021,Oracle and/or its affiliates. 30 microprofile-config.properties(HelidonのConfig) • データベース設定 • dataSourceClassName︓データソースクラス名 • 今回は”oracle.jdbc.pool.OracleDataSource” • dataSource.url︓データソースURL名 • 今回は”jdbc:oracle:driver_type:@データベース指定 ⼦”(ATP Wallet(クライアント資格証明)もここで指定) • dataSource.user/password︓データベースユーザ 名とパスワード • サーバ設定系 • server.host/port︓起動するWebサーバのホストと ポート 1.設定ファイル チューニング
  • 31.
    persistence.xml (JPA/JTAのConfig) • Persistence-unit •name: ユニット名(パーケージ内で⼀意) • transaction-type: “JTA” • jta-data-source: データベース名 • class: Entityクラスを記載 • Properties • データベーステーブルの⾃動⽣成の設定 • O/R マッパーの設定 • Eclipse Linkプロパティの設定 1-2︓サンプルコードの解説(persistence.xml) Copyright © 2021, Oracle and/or its affiliates. 31 1.設定ファイル チューニング
  • 32.
    2-1︓サンプルコードの解説(Entityの実装) Copyright © 2021,Oracle and/or its affiliates. 32 Entityの実装(JTA/JPAアノテーションを利⽤) • Entity︓JPAのEntityの識別名 • Table︓マッピング先のテーブル名 • Access︓JPAがsetterメソッドやgetterメソッドを介さ ずにアクセス可能な⽅式 • Propertyベース • Fieldベース • NamedQueries︓クエリの設定 • NamedQueryを複数設定可能 • Nameにクエリ名、queryにクエリを設定 • Id︓Entity内の主キー • Column︓カラム属性 • Basic︓カラムへのマッピングの型 • 他にも複数設定可能 2.実装
  • 33.
    2-2︓サンプルコードの解説(RESTエンドポイント(GET)) Copyright © 2021,Oracle and/or its affiliates. 33 クラスの実装(JPA/JAX-RSアノテーションを利⽤) • Path︓RESTエンドポイントのコンテキストパス • EntityManagerのインジェクション • PersistenceContextアノテーションで定義 • unitname︓ Persistent-unitのunitnameを設定 メソッドの実装(JAX-RSアノテーションを利⽤) • HTTP Method︓”GET” • Path︓クラスで設定したPath以後のパス • Produces︓レスポンスのContext-type • クエリの作成はEntityManagerを利⽤ • 引数にEntityクラスのクエリ名を指定 2.実装
  • 34.
    Helidon CLI(最新v2.1.3) • https://github.com/oracle/ helidon/blob/master/HELIDON-CLI.md •Helidon initによるベースプロジェクト作成 ⼊⼒項⽬ • SE/MP: • 今回はMP(2) • bare/quickstart/database • 今回はbatabase(3) • パッケージ名 Helidon CLI Copyright © 2021, Oracle and/or its affiliates. 34 user@client > helidon init Using Helidon version 2.2.1 Helidon flavor (1) SE (2) MP Enter selection (Default: 1): 2 Select archetype (1) bare | Minimal Helidon MP project suitable to start from scratch (2) quickstart | Sample Helidon MP project that includes multiple REST operations (3) database | Helidon MP application that uses JPA with an in-memory H2 database Enter selection (Default: 1): 3 Project name (Default: database-mp): Project groupId (Default: me.helidon): Project artifactId (Default: database-mp): Project version (Default: 1.0-SNAPSHOT): Java package name (Default: me.test.mp.database): <パッケージ名> Switch directory to /users/database-mp to use CLI Start development loop? (Default: n): n
  • 35.
    Copyright © 2021,Oracle and/or its affiliates | 35 4. 既存システムへのマイクロサービス導⼊
  • 36.
    既存のアプリケーションからマイクロサービスを切り出す⽤件例︓ • ⼀部のコンポーネントが他のコンポーネントよりも頻繁に更新する必要がある • あるコンポーネントにのみ異なるスケール要件が存在する •あるコンポーネントが異なるテクノロジーを使⽤して開発する必要がある • コードベースが⼤きく複雑になりすぎた 既存のアプリケーションからマイクロサービスを切り出す、もしくは追加するパターン例︓ • ストラングラーパターン • Java EE アプリケーションへのサービス追加パターン 既存システムをマイクロサービスへ移⾏する Copyright © 2021, Oracle and/or its affiliates | 36
  • 37.
    Helidonマイクロサービスで既存のアプリケーションを進化させる ストラングラーパターン • 段階的な移⾏ -アプリの機能を段階的に 置き換える • “ファサード”: ユーザの要求をアプリケーション にルーティング • 新旧のサービスを並⾏稼働し、時間の経 過とともに、徐々に機能を新しいアーキテク チャに移⾏ • 機能が置き換えられた後、モノリスの「死ん だ」部分を削除/廃棄 Middleware Module 2 Datastore Helidon New Module Datastore 既存アプリケーション 新規or移⾏サービス マイクロサービスとして実装 ファサード Module 1 Module N Copyright © 2021, Oracle and/or its affiliates | 37
  • 38.
    POD POD POD WebLogic Operator NAMESPACE -OPERATOR NAMESPACE – WEBLOGIC DOMAIN OCI – VM AVAILABILITY DOMAIN 1 OCI Oracle Kubernetes Engine (OKE) – Kubernetes Cluster Admin Server Internet WEBLOGIC DOMAIN T3S Orchestrate WebLogic – Manage WebLogic Pods WEBLOGIC CLUSTER POD Managed Server 1 POD Managed Server 2 App App NAMESPACE - HELIDON POD Helidon OKE上のHelidonマイクロサービスで既存のアプリケーションを進化させる HTTPS HTTPS HTTPS HTTPS HTTPS OCI – VM AVAILABILITY DOMAIN 2 OCI – VM AVAILABILITY DOMAIN ... Copyright © 2021, Oracle and/or its affiliates | 38
  • 39.
    Copyright © 2021,Oracle and/or its affiliates | 39 5. Helidon: サポート、各種情報リソース
  • 40.
    Open Sourceとしてのサポートを提供中 • WebSite 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/Coherenceライセンス保有のお客様にHelidonのサポート提供 Helidonのサポート Copyright © 2020 Oracle and/or its affiliates. Copyright © 2021, Oracle and/or its affiliates | 40
  • 41.
    Helidonに関する各種情報 41 Blogs Social Media https://helidon.io/ Helidon Website https://twitter.com/helidon_project @helidon_project Contribute https://github.com/oracle/helidon https://medium.com/helidon GetAnswers https://stackoverflow.com/tags/helidon https://helidon.slack.com/ • Slack Invitation link Helidon on YouTube Copyright © 2021, Oracle and/or its affiliates | https://www.youtube.com/channel/UChg00-uTTrCMmPsuzUNaZsA
  • 42.
    Copyright © 2021,Oracle and/or its affiliates | 42 6. まとめ
  • 43.
    • HelidonならEnterprise Java標準のナレッジを活かせる •HelidonならOracle Databaseとの連携を容易に実現できる • マルチテナントDBの活⽤、コンバージドDBへの応⽤ • UCPを使って可⽤性の向上にチャレンジ • Helidonでストラングラーパターンを試す • 既存アプリケーションからの機能の切り出し・分割 • WebLogic ServerアプリにHelidonで新機能追加 • ビジネスニーズへの迅速な対応やサービス提供の継続的な変更など、マイクロサービス活⽤をHelidonで︕ Helidonでマイクロサービス導⼊を検討する Copyright © 2021, Oracle and/or its affiliates 43
  • 44.