SlideShare a Scribd company logo
1 of 47
Download to read offline
Senior Director
Oracle Corporation Japan
February 14th, 2020
Tadahisa Kotegawa
Developers Summit 2020 - 14-C-5 #devsumiC
クラウド・ネイティブ時代に最適なJavaベースの
マイクロサービス・フレームワーク
~ Helidonの実力を見極めろ!
2
以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の
目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコー
ド、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料
になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期について
は、弊社の裁量により決定されます。
OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。
文中の社名、商品名等は各社の商標または登録商標である場合があります。
Copyright © 2020, Oracle and/or its affiliates
3
古手川 忠久
日本オラクル株式会社 クラウドソリューション推進本部長
自己紹介
@tkotegaw
tkote
oracle-japan (Oracle Japan for Developers)
Oracle Cloud Hangout Cafe
(通称 おちゃかふぇ, #ochacafe)
クラウドネイティブな勉強会やってます
ochacafe.connpass.com
Copyright © 2020, Oracle and/or its affiliates
4 Copyright © 2020, Oracle and/or its affiliates
2020年2月3日 Oracle Cloud 大阪リージョン開設(サービス開始)を発表
IaaS/PaaS/SaaS全てのサービスを国内2つのリージョンで提供
テクノロジと
価格
データ・
プラット
フォーム
クラウド・セ
キュティ
テクノロジと
価格
データ・
プラット
フォーム
クラウド・
セキュティ
Oracle Cloud Infrastructure
Gen 2 Cloud
Oracle Cloud Infrastructure
Gen 2 Cloud
5
アプリケーションの開発・運用を支援するマネージド・サービス
Oracle Cloud Native Services
Monitoring EventsStreaming
Observability + Messaging
API Gateway
Container
Engine for
Kubernetes
Resource
Manager
Cloud
Infrastructure
Registry
Functions
Notifications
Application Development + Operations
Logging
(Coming Soon)
OCIが提供する性能、セキュリ
ティ、高可用性を兼ね備えたマ
ネージドKubernetesサービス
(CNCF認証)
コンテナイメージを格納する高
可用性なプライベート・コンテ
ナ・レジストリ
インフラリソース運用の自動
化を可能にするIaCプラット
フォーム(オープンソース
Terraformベース)
REST APIの作成、運用、保護、
監視が可能なフルマネージドな
APIゲートウェイサービス
実行時課金のフルマネージドな
サーバーレス実行環境 (オープン
ソースDocker/Fn Projectベース)
OCI上の様々なリソースのメト
リクスを監視、ダッシュボード
で閲覧、通知
ホスト、アプリケーションのロ
グ管理・検索・分析を行うプ
ラットフォーム (オープンソー
スFluentdベース)
大量の宛先に通知可能なメッ
セージ通知プラットフォーム
大量のデータストリームを処理
するフルマネージドな分散メッ
セージングサービス (Kafka互
換プラグインの提供)
OCI上のリソースの状態変化を
捉えOracle Functionsを始めと
するサービス間の連携を実現
Copyright © 2020, Oracle and/or its affiliates
6
5
4
3
2
1
Helidonのこれから
Helidonの拡張機能
Helidon MP - Eclipse MicroProfile準拠のサーバー・フレームワーク
Helidon SE - リアクティブ・スタイルの軽量マイクロフレームワーク
マイクロサービス・フレームワーク? Helidonとは?
Program agenda
6 まとめ
Copyright © 2020, Oracle and/or its affiliates
7
マイクロサービス・フレームワーク?
Helidon とは?
Copyright © 2020, Oracle and/or its affiliates
8
古典 “Microservices” から読み解いてみる
マイクロサービス・フレームワークの要件を考える
小さなサービス群の組み合わせ
個々のサービスは単独プロセスで稼働
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
The microservice architectural style
Copyright © 2020, Oracle and/or its affiliates
9
オープン・ソース (github.com/oracle/helidon)
• 2019/02/15 に1.0.0をリリース
マイクロサービスを開発するためのJavaライブラリの集合体
JVM上の単体アプリケーションとして動作
従来からの一般的なツール・基盤で開発&デプロイ可能
• Java SE, Maven/Gradle, Docker, Kubernetes, etc.
Helidon とは?
※ Helidonは ギリシア語でつばめ(swallow)を意味します
Docker Image
Kubernetes
Helidon jars
OS base image
Library jars
App classes
Pod Pod Pod
Replica Set
Java SE runtime
Copyright © 2020, Oracle and/or its affiliates
Helidon SE と MP
• マイクロ・フレームワーク
• 超軽量フットプリント
• 関数型
• Reactive Web Server
• GraalVM native image
• MicroProfile 3.2
• 軽量フットプリント
• 宣言型
• Java EEサブセット +
マイクロサービス関連機能
• GraalVM JIT compiler
Helidon MP
Helidon SE
CDI Extensions
フットプリント重視
機能性重視
互換性(MicroProfile準拠)重視
10 Copyright © 2020, Oracle and/or its affiliates
11
HelidonはOpen Sourceのプロジェクト
• Apache 2.0 License
Service Level Agreement (SLA) や保証を伴わないコミュニティ・サポートを提供(英語のみ)
• 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
Bug とエンハンスメントへの修正はメジャー・バージョンに対するメンテナンス・リリース
を介して提供
Helidonのサポートについて(1) – コミュニティ・サポート
Copyright © 2020, Oracle and/or its affiliates
12
以下の Oracle 製品に対する Oracle サポート契約に含まれる
• Oracle WebLogic Server Standard Edition
• Oracle WebLogic Server Enterprise Edition
• Oracle WebLogic Suite
• Oracle Coherence Enterprise Edition
• Oracle Coherence Grid Edition
コミュニティ・サポートに加えて以下のサポートを提供
• My Oracle Support (MOS) へのアクセス
• Oracle WebLogic Server と Oracle Coherence に対して提供されるサポート・レベルと同
等の Oracle による 24x7 サポート
Bug とエンハンスメントへの修正はコミュニティ・サポートと同様
Helidonのサポートについて(2) – Oracle サポート
*詳細は My Oracle Supportより
「Oracle Weblogic Server に含まれる Helidon サポート・ポリシーについて (Doc ID 2657182.1)」を参照ください
Copyright © 2020, Oracle and/or its affiliates
13
メジャー・バージョンのリリースから36 ヶ月間 (3 年間) の Oracle サポートを提供
• Oracle WebLogic Server / Oracle Coherence の製品ライフサイクルとは異なるので注意
Helidonのライフタイム・サポート・ポリシー
Helidon
メジャー・バージョン
Status
Active Status
開始
Maintenance Status
開始
End of Life
V1 Active 2019 年 2 月 2020 年 8 月 2022 年 2 月
*詳細は My Oracle Supportより
「Oracle Weblogic Server に含まれる Helidon サポート・ポリシーについて (Doc ID 2657182.1)」を参照ください
Status 期間 Oracleサポート コミュニティ・サポート 新機能や Bug 修正
Active GA リリースから最初の 18 ヶ月間 〇 〇 〇
Maintenance GA リリースから18ヶ月経過後から18ヶ月間 〇 Active期間より制限される 〇
End of Life GA リリースから36ヶ月経過後 × × ×
Copyright © 2020, Oracle and/or its affiliates
14
Helidon SE –
リアクティブ・スタイルの軽量マイクロフレームワーク
Copyright © 2020, Oracle and/or its affiliates
15
リアクティブ・スタイルで開発された軽量なマイクロフレームワーク
• 少ないスレッドで多くのコネクションをハンドル
• メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを削減
Helidon SE
Security
● 認証
● 認可
● アウトバウンド対応
● 監査
● 拡張可能
Config
● 柔軟性の高い型付き設
定モデル
● 複数のソースを利用可
● 階層型モデル
● 動的な更新
● 拡張可能
Reactive Web Server
● Reactive APIを使った
シンプルな関数ルー
ティング・モデル
● Netty上に構築
● OpenTracing, Metrics
and Health Checks
● 静的コンテンツ
Copyright © 2020, Oracle and/or its affiliates
16
1ステートメントで起動できるREST APIサーバー
Helidon SE – 関数スタイルのシンプルなRESTサーバー開発
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)
Copyright © 2020, Oracle and/or its affiliates
17
GraalVM native image
高速起動・高速スケールが求められるユースケース(マイクロサービス、FaaS)に適する
• ランタイムの起動時間、及びプログラム実行初期のパフォーマンスの劇的な向上
• メモリフットプリントの削減
Helidon SE は GraalVM native image の作成をサポート
• Maven profileによるビルド - Helidon SE Quickstart を参照
- Local build (for the OS installed locally)
- Docker build (for Linux)
Helidon SE – GraalVM native image
export GRAALVM_HOME=<GraalVMのパス>
mvn package -Pnative-image
docker build -t helidon-quickstart-se-native -f Dockerfile.native .
+
Copyright © 2020, Oracle and/or its affiliates
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
SulongJS Ruby R
C C++
HotSpot
Compiler I/F
C2 (for Server)
Javaアプリ
Native
image
SubstrateVM
Javaアプリ
(マシン語)
シングルバイナリ
18 Copyright © 2020, Oracle and/or its affiliates
19
Helidon MP –
Eclipse MicroProfile準拠のサーバー・フレームワーク
Copyright © 2020, Oracle and/or its affiliates
20
PolyglotなMicroservices環境のなかで協調して動く(= Microservices各種仕様に
準拠する、 Microservicesのデザインパターンを実装する)Javaアプリケーショ
ンの開発に必要な機能を、フレームワークとして規定したもの。
開発者はビジネスロジックの実装に集中でき、効率的な開発ができる。
基盤となる実装は、MicroProfileプロバイダの品質維持・向上を期待できる。
Eclipse MicroProfile
OpenMetrics
OpenTracing
OpenAPI Circuit
Breaker
Bulk Head
Health
Check
Copyright © 2020, Oracle and/or its affiliates
21
Helidonは1.4で対応済
Eclipse MicroProfile 3.2 (Nov. 1st, 2019)
MicroProfile Config 1.3
MicroProfile Fault Tolerance 2.0
MicroProfile Health 2.1
MicroProfile JWT Authentication 1.1
MicroProfile Metrics 2.2
MicroProfile OpenAPI 1.1
MicroProfile OpenTracing 1.3
MicroProfile Rest Client 1.3
CDI 2.0
Common Annotations 1.3
JAX-RS 2.1
JSON-B 1.0
JSON-P 1.1
Java EE 8 由来MicroProfile 固有
Copyright © 2020, Oracle and/or its affiliates
Helidon MP Components
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
+
22
MicroProfile =
Copyright © 2020, Oracle and/or its affiliates
23
アノテーション を使ってPOJO(=普通のJavaクラス)をRESTサービスに
MicroProfileで実装するREST API
@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-BJSON-P
JAX-RS
JAX-RS
CDI
JAX-RS
JAX-RS
MicroProfile Config
Copyright © 2020, Oracle and/or its affiliates
24
MicroProfile Config 1.3
MicroProfile Fault Tolerance 2.0
MicroProfile Health 2.1
MicroProfile JWT Authentication 1.1
MicroProfile Metrics 2.2
MicroProfile OpenAPI 1.1
MicroProfile OpenTracing 1.3
MicroProfile Rest Client 1.3
MicroProfile 注目仕様のポイント解説
CDI 2.0
Common Annotations 1.3
JAX-RS 2.1
JSON-B 1.0
JSON-P 1.1
HelidonKubernetes
Grafana
Prometheus
Jaeger
Health
Metrics
OpenTracing
Copyright © 2020, Oracle and/or its affiliates
25
Kubernetesなどノードの状態を検査するプロセスに対してヘルスチェック情報を提供する
MicroProfile Health
@Liveness
@Readiness
public class MyCheck implements HealthCheck {
@Override
public HealthCheckResponse call() {
return HealthCheckResponse
.named(“myhealth")
.withData("process", process)
.state(true)
.build();
}
}
Annotation Path Function
@Liveness /health/live Liveness
@Readiness /health/ready Readiness
{
"outcome": "UP",
"status": "UP",
"checks": [
{
"name": "myhealth",
"state": "UP",
"status": "UP",
"data": {
"process": "1@4f45aa39618d"
}
}
]
}
HealthCheckインターフェースを実装したクラスに
@Liveness and/or @Readiness
アノテーションをつける
Output: 200 OK
Copyright © 2020, Oracle and/or its affiliates
26
Kubernetesのヘルスチェック機能と連携
• LivenessProbe
- ヘルスチェック失敗時、Podが再作成される
• ReadinessProbe
- ヘルスチェック失敗時、Serviceからのルーティングの
対象から外される(Podの再作成はされない)
MicroProfile Health (cont.)
apiVersion: v1
kind: Pod
metadata:
name: helidon-demo-mp
spec:
containers:
- name: api-helidon-container
image: helidon-demo-mp:latest
imagePullPolicy: Always
ports:
- containerPort: 8080
livenessProbe:
httpGet:
port: 8080
path: /health/live
failureThreshold: 3
periodSeconds: 10
Service
Pod
(OK)
Pod
(NG) /health/liveが失敗すると
Podは再作成される
/health/readyが失敗すると
ルーティングから外される
Copyright © 2020, Oracle and/or its affiliates
27
Metrics = システムの健全性を測定するために使用される指標
Polyglot環境に適したモニタリングを可能にする
• JMX(Java Management Extensions)標準はJVMを前提にしているので不向き
ヘルスチェックとは異なる目的
• 長期的なトレンドの把握
• キャパシティ・プラニング、潜在的問題の早期把握
• スケジューリング・システムと連動したスケーリング
OpenMetrics
• CNCF(Cloud Native Computing Foundation)のサンドボックス・プロジェクト
• メトリック・データを公開するための仕様を策定
MicroProfile Metrics
# TYPE base_cpu_availableProcessors gauge
# HELP base_cpu_availableProcessors Displays the number of processors available
base_cpu_availableProcessors 2
Copyright © 2020, Oracle and/or its affiliates
28
Metricsの利用例 – Prometheus & Grafana を使った監視
PrometheusGrafana Helidon
/metrics
https://grafana.com/ https://prometheus.io/
メトリクスの監視・集計メトリクスの可視化
Copyright © 2020, Oracle and/or its affiliates
29
MicroProfile Metrics – アプリケーション独自メトリクスの取得
@ApplicationScoped @Path("/mymetrics")
public class MetricsResource{
@Inject @Metric(name="total")
Counter total;
private synchronized void countup(){
total.inc();
}
@Metered
@GET @Path("/blue")
public void blue(){ countup(); }
@Metered
@GET @Path("/green")
public void green(){ countup(); }
}
Copyright © 2020, Oracle and/or its affiliates
30
OpenTracing準拠の分散トレーシングのためのAPIを提供
JAX-RSアプリケーションは追加的なコードを必要としない
• 受信したリクエストのSpanを認識
• Spanを自動的にスタートし、リクエスト処理時に終了する
• (Clientとして)リクエスト送信時、自動的にSpanを挿入する/ Spanを開始し、完了後終了する
分散トレーシングとは?
• マイクロサービス環境で複数のサービスを経由して処理されるリクエストのサービス間の依存
関係やレイテンシーを可視化し、障害発生時の解析を容易にする
OpenTracing (opentracing.io) とは?
• CNCF(Cloud Native Computing Foundation)のインキュベーション・プロジェクト
• API仕様と複数言語のライブラリを提供
MicroProfile OpenTracing
Copyright © 2020, Oracle and/or its affiliates
31
(参考)The OpenTracing Data Model
https://opentracing.io/specification/
Copyright © 2020, Oracle and/or its affiliates
Demo : OpenTracing - JaegerによるSpanのトラッキング (1)
Oracle Container Engine for Kubernetes (OKE)
(pod) Helidon-demo-mp-0NordPort
(pod) Helidon-demo-mp-1
(pod) Helidon-demo-mp-2
(pod) Helidon-demo-mp-3
(pod) jaeger
Service
Service
Service
Service
ServiceNordPort
Browser
Port: 30080
(RESTAPI)
Port: 30086
(Jaeger UI)
トレース情報
32
mp-1
mp-2
mp-3
mp-1
mp-0
mp-0request
Jaeger UI
https://www.jaegertracing.io/
OSSの分散トレーシングシステム
Copyright © 2020, Oracle and/or its affiliates
Demo : OpenTracing - JaegerによるSpanのトラッキング (2)
33
JAX-RS Method
request
JPA Database
response
自動的に定義
されるSpan
明示的に定義
したSpan
JAX-RSリクエスト処理メソッドのSpan
JPAデータベース処理のSpan
Copyright © 2020, Oracle and/or its affiliates
34
Helidonの拡張機能
Copyright © 2020, Oracle and/or its affiliates
35
• JWT Provider
• HTTP Basic Authentication
• HTTP Digest Authentication
• Header Assertion
• HTTP Signatures
• ABAC Authorization
• Google Login Authentication Provider
• OIDC (Open ID Connect) Authentication Provider
• IDCS Role Mapping Provider
様々な認証・認可スキームに対応
Helidonが提供するSecurity Providers
Identity
Provider
Helidon
Open ID
Connect
認証シーケンス
Browser
OIDC (Open ID Connect) Authentication Provider
を使ったユーザー認証
user
scope
* IDCS = Oracle Identity Cloud Service
Copyright © 2020, Oracle and/or its affiliates
36
CDI extensions
• HikariCP data sources
• Oracle UCP data sources
• Jedis clients
• OCI Object Storage clients
• Java Transaction API (JTA) objects
Java Persistence API (JPA)のサポート
• JDBC Driver (DataSource) +
JTA Extension +
Hikari Connection Pool Extension +
EclipseLink JPA Extension
データの永続化/キャッシュが必要な場合に便利な機能
CDI extension = CDIのライフサイクルイベントを受け取って独自の実装を追加するための仕様
JPA = Javaオブジェクトをデータベースに永続化するための仕様
JTA (Java Transaction API) = トランザクションを管理するための仕様
Helidon MP
JDBC Driver
Java Transaction API
EclipseLink (JPA)
EntityApp
Hikari Connection Pool
application.yaml
persistence.xml
Helidon MPによるJPA/JTAサポート
Copyright © 2020, Oracle and/or its affiliates
37
gRPCのサーバー&クライアント実装を簡単に開発できる
SE、MP両エディションでサポート
• SE – リアクティブ・スタイル
• MP – POJO + アノテーション
• 従来からのProtobufサービス/スタブも利用可能
ペイロード・タイプは Protocol Buffers と Java Serialization をサポート
Security, Metrics, Health Check機能を提供
もちろんRESTサービスと共存(サーバー・ポートは別)
※現在はExperimentalのステータス
gRPC のサポート
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のコーディング例
protocでコンパイルした
メッセージオブジェクト
Copyright © 2020, Oracle and/or its affiliates
38
HTTP/2を利用したRPC(Remote Procedure Call)フレームワーク
• バイナリ・フレーム、双方向ストリーミング
データ・シリアライゼーションにProtocol Buffersを使用*
• (Jsonに比較して)転送データ量の削減
IDL(Interface Definition Language)によるスキーマ定義
• Polyglot環境におけるインターオペラビリティ向上
gRPC の仕組み
出典: What is gRPC?
https://www.grpc.io/docs/guides/
*gRPCでは他のシリアライゼーション方式も利用可能
→ HelidonはProtocol BuffersとJava Serializationをサポート
IDL
言語依存
コード
.proto
protoc
コンパイラ
C/C++, C#, Dart, Go, Java, Node.js,
Objective-C, PHP(Beta), Python, Ruby
Copyright © 2020, Oracle and/or its affiliates
39
Demo : Helidonで作るフロントエンド・アプリケーション
* Oracle JET = Oracle JavaScript Extension Toolkit
Open ID
Connect
REST / gRPC
Static Contents
ブラウザ
Oracle Identity Cloud Service (IDCS)
IDCSの提供するログイン画面
user
scope
Envoy
gRPC
Proxy
REST
(port: 8081)
Helidon
OIDC
Provider
JPA/JTA
Extension
Autonomous
Transaction
Processing
JDBC
gRPC Server
Demo Server App
gRPC
(port: 50051)
gRPC-Web
Oracle JET
Single Page App
Copyright © 2020, Oracle and/or its affiliates
40
Helidonのこれから
Copyright © 2020, Oracle and/or its affiliates
41
2020年2月5日に最初のマイルストーン・ビルド 2.0.0-M1 をリリース!
Roadmap - Helidon 2.0
Open Operating Systems
Cloud Native Environment
Java Microservices
Public Cloud Private Cloud
Hybrid Application and Environment
Management
Java 11 (Java 8サポートの終了)
Helidon MP GraalVM native image のサポート
HTTP Multipart / Reactive HTTP Client / Websocket
Helidon DB Client
MicroProfile Reactive Streams Operators
MicroProfile Reactive Messaging
• Kafkaコネクタの提供
コマンド・ライン・インターフェース
ライブ・リローディング
Verrazzanoのサポート
Copyright © 2020, Oracle and/or its affiliates
42
Rancherによるマルチ・クラスタ管理
アプリケーション・ライフサイクル管理
• Model - アプリケーションを記述
• Binding – Modelを環境にバインド
統合化された監視と管理
• モニタリング、ロギング
• ダッシュボード、アラート
分散トレーシング
• Kiali, Jaeger, Istio
CI/CD - GitLab, Jenkins等の利用
組み込みのセキュリティ機能
Roadmap - Verrazzano
Production ClusterDevelopment & Test Cluster
Open Operating Systems
Public Cloud Private Cloud Hybrid Cloud
Copyright © 2020, Oracle and/or its affiliates
43
まとめ
Copyright © 2020, Oracle and/or its affiliates
44
クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク
Helidonを使う理由
マイクロサービス環境に適したアプリケーションを効率的に作成できる
• SEとMPの二つのエディションを用意 – 要件に応じた使い分け
MicroProfileによる仕様標準化の恩恵、ロックインの回避
• Metrics, Health, OpenAPI, OpenTracingなどはノー・コーディングで利用可能
• 開発者はビジネスロジックの開発に専念できる
• ベンダーの健全な競争の下で、フレームワーク実装の品質向上が見込める
実際のプロジェクトで必要となる拡張機能の提供 – セキュリティ、データベース接続、etc.
多くの実績の中で育まれたJavaのエコシステムを活用できる
• IDE、ライブラリ、モニタリング・プロファイリング・デバッギング、etc.
• GraalVMの活用
Copyright © 2020, Oracle and/or its affiliates
45
Getting Started (公式ドキュメント とりあえず動かしてみる)
• https://helidon.io/docs/latest/#/guides/01_overview
Helidon MPのMicroProfile対応+拡張機能を一通り網羅したデモ
• https://github.com/oracle-japan/ochacafe-microprofile-demo
MicroProfile の詳細解説 (OCHaCafeのMicroProfileセッション資料)
• http://tiny.cc/ochacafe-mp-slide
Oracle Cloud Hangout Cafe (通称OCHaCafe – Cloud Native な勉強会、是非お越しを!)
• https://ochacafe.connpass.com
Helidonについてさらに詳しく知りたい・触りたい方は…
Copyright © 2020, Oracle and/or its affiliates
46
ご清聴ありがとうございました!
Copyright © 2020, Oracle and/or its affiliates
【再掲】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!

More Related Content

More from オラクルエンジニア通信

Oracle Cloud Infrastructure:2022年9月度サービス・アップデート
Oracle Cloud Infrastructure:2022年9月度サービス・アップデートOracle Cloud Infrastructure:2022年9月度サービス・アップデート
Oracle Cloud Infrastructure:2022年9月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年8月度サービス・アップデート
Oracle Cloud Infrastructure:2022年8月度サービス・アップデートOracle Cloud Infrastructure:2022年8月度サービス・アップデート
Oracle Cloud Infrastructure:2022年8月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年7月度サービス・アップデート
Oracle Cloud Infrastructure:2022年7月度サービス・アップデートOracle Cloud Infrastructure:2022年7月度サービス・アップデート
Oracle Cloud Infrastructure:2022年7月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
Oracle Cloud Infrastructure:2022年6月度サービス・アップデートOracle Cloud Infrastructure:2022年6月度サービス・アップデート
Oracle Cloud Infrastructure:2022年6月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年5月度サービス・アップデート
Oracle Cloud Infrastructure:2022年5月度サービス・アップデートOracle Cloud Infrastructure:2022年5月度サービス・アップデート
Oracle Cloud Infrastructure:2022年5月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年4月度サービス・アップデート
Oracle Cloud Infrastructure:2022年4月度サービス・アップデートOracle Cloud Infrastructure:2022年4月度サービス・アップデート
Oracle Cloud Infrastructure:2022年4月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure データベース・クラウド:各バージョンのサポート期間 (2022年4月版)
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間 (2022年4月版)Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間 (2022年4月版)
Oracle Cloud Infrastructure データベース・クラウド:各バージョンのサポート期間 (2022年4月版)オラクルエンジニア通信
 
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会オラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年3月度サービス・アップデート
Oracle Cloud Infrastructure:2022年3月度サービス・アップデートOracle Cloud Infrastructure:2022年3月度サービス・アップデート
Oracle Cloud Infrastructure:2022年3月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年2月度サービス・アップデート
Oracle Cloud Infrastructure:2022年2月度サービス・アップデートOracle Cloud Infrastructure:2022年2月度サービス・アップデート
Oracle Cloud Infrastructure:2022年2月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle Cloud Infrastructure:2022年1月度サービス・アップデートOracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle Cloud Infrastructure:2022年1月度サービス・アップデートオラクルエンジニア通信
 
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)オラクルエンジニア通信
 
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
Oracle Cloud Infrastructure:2021年12月度サービス・アップデートOracle Cloud Infrastructure:2021年12月度サービス・アップデート
Oracle Cloud Infrastructure:2021年12月度サービス・アップデートオラクルエンジニア通信
 
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]オラクルエンジニア通信
 
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)オラクルエンジニア通信
 
Oracle Cloud Infrastructure:2021年11月度サービス・アップデート
Oracle Cloud Infrastructure:2021年11月度サービス・アップデートOracle Cloud Infrastructure:2021年11月度サービス・アップデート
Oracle Cloud Infrastructure:2021年11月度サービス・アップデートオラクルエンジニア通信
 
Oracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデートOracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデートオラクルエンジニア通信
 
ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)
ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)
ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)オラクルエンジニア通信
 

More from オラクルエンジニア通信 (20)

Oracle Cloud Infrastructure:2022年9月度サービス・アップデート
Oracle Cloud Infrastructure:2022年9月度サービス・アップデートOracle Cloud Infrastructure:2022年9月度サービス・アップデート
Oracle Cloud Infrastructure:2022年9月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年8月度サービス・アップデート
Oracle Cloud Infrastructure:2022年8月度サービス・アップデートOracle Cloud Infrastructure:2022年8月度サービス・アップデート
Oracle Cloud Infrastructure:2022年8月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年7月度サービス・アップデート
Oracle Cloud Infrastructure:2022年7月度サービス・アップデートOracle Cloud Infrastructure:2022年7月度サービス・アップデート
Oracle Cloud Infrastructure:2022年7月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
Oracle Cloud Infrastructure:2022年6月度サービス・アップデートOracle Cloud Infrastructure:2022年6月度サービス・アップデート
Oracle Cloud Infrastructure:2022年6月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年5月度サービス・アップデート
Oracle Cloud Infrastructure:2022年5月度サービス・アップデートOracle Cloud Infrastructure:2022年5月度サービス・アップデート
Oracle Cloud Infrastructure:2022年5月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年4月度サービス・アップデート
Oracle Cloud Infrastructure:2022年4月度サービス・アップデートOracle Cloud Infrastructure:2022年4月度サービス・アップデート
Oracle Cloud Infrastructure:2022年4月度サービス・アップデート
 
Oracle Cloud Infrastructure データベース・クラウド:各バージョンのサポート期間 (2022年4月版)
Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間 (2022年4月版)Oracle Cloud Infrastructureデータベース・クラウド:各バージョンのサポート期間 (2022年4月版)
Oracle Cloud Infrastructure データベース・クラウド:各バージョンのサポート期間 (2022年4月版)
 
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
MySQL Technology Cafe #14 MySQL Shellを使ってもっと楽をしようの会
 
Oracle Cloud Infrastructure:2022年3月度サービス・アップデート
Oracle Cloud Infrastructure:2022年3月度サービス・アップデートOracle Cloud Infrastructure:2022年3月度サービス・アップデート
Oracle Cloud Infrastructure:2022年3月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年2月度サービス・アップデート
Oracle Cloud Infrastructure:2022年2月度サービス・アップデートOracle Cloud Infrastructure:2022年2月度サービス・アップデート
Oracle Cloud Infrastructure:2022年2月度サービス・アップデート
 
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle Cloud Infrastructure:2022年1月度サービス・アップデートOracle Cloud Infrastructure:2022年1月度サービス・アップデート
Oracle Cloud Infrastructure:2022年1月度サービス・アップデート
 
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
Oracle Databaseはクラウドに移行するべきか否か 全10ケースをご紹介 (Oracle Cloudウェビナーシリーズ: 2021年11月30日)
 
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
Oracle Cloud Infrastructure:2021年12月度サービス・アップデートOracle Cloud Infrastructure:2021年12月度サービス・アップデート
Oracle Cloud Infrastructure:2021年12月度サービス・アップデート
 
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
【旧版】Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年12月版]
 
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
あなたのクラウドは大丈夫?NRI実務者が教えるセキュリティの傾向と対策 (Oracle Cloudウェビナーシリーズ: 2021年11月24日)
 
Oracle Cloud Infrastructure:2021年11月度サービス・アップデート
Oracle Cloud Infrastructure:2021年11月度サービス・アップデートOracle Cloud Infrastructure:2021年11月度サービス・アップデート
Oracle Cloud Infrastructure:2021年11月度サービス・アップデート
 
第18回しゃちほこオラクル俱楽部
第18回しゃちほこオラクル俱楽部第18回しゃちほこオラクル俱楽部
第18回しゃちほこオラクル俱楽部
 
第17回しゃちほこオラクル俱楽部
第17回しゃちほこオラクル俱楽部第17回しゃちほこオラクル俱楽部
第17回しゃちほこオラクル俱楽部
 
Oracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデートOracle Cloud Infrastructure:2021年10月度サービス・アップデート
Oracle Cloud Infrastructure:2021年10月度サービス・アップデート
 
ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)
ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)
ゼロトラスト、この1年でお客様の4つの気づき ~内部不正、ランサムウェアとの戦い方~ (Oracle Cloudウェビナーシリーズ: 2021年10月6日)
 

【再掲】クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク ~ Helidonの実力を見極めろ!

Editor's Notes

  1. $300の無料トライアルあります、Always Freeといって一生ただで使えるサービスもあります。 cloud.oracle.comからどうぞ
  2. オープンソース、一周年 Javaライブラリの集合体 アプリケーションをHelidonのライブラリと一緒にビルドして、デプロイするスタイル 出来上がるものはJava SE VMで動作するアプリケーションと思っていい Maven/Gradleのような一般的なビルドツールを使える 普通のJava SEアプリと同様、そのままOS上に動かしてもいいし、Dockerイメージにもできるし、Kubernetesに載せることもできる
  3. Helidonには SEとMPという ふたつのエディションがあります。 ざっくりいうと、SEの方が超軽量、最近トレンドのリアクティブなフレームワークをベースにしています。 GraalVMを使ってネイティブ・イメージを作成できます。 MPは、SEをベースにして、Eclipse MicroProfileという規格に準拠したフレームワークの機能を提供します。 機能的にもSEよりリッチですし、これまでJava EEで開発をしてきた方には取り組みやすいフレームワークと言えます。
  4. Helidonは最初に Reactive Web Server、Config、Security の 3つの機能の提供から始まりました。 ベースとなるサーバー機能は、Java Non-blocking IOをベースにしたNettyというフレームワークの上に、Reactive Streams APIを使ったシンプルな関数型のルーティングモデルを構築しています。これによって ・少ないスレッドで多くのコネクションをハンドルすることができたり ・メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを少なくしたり でき、 マイクロサービス・フレームワークに期待される要件を叶えています。 このノンブロッキングIOをベースにしたリアクティブなアーキテクチャによって、 少ないスレッドで多くのコネクションをハンドルすることができたり メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを少なくしたり でき、 マイクロサービス・フレームワークに期待される要件を叶えています。 --- Java NIO API = ノン・ブロッキングI/O 少ないスレッドで多くのコネクションをハンドル メモリー管理やコンテキスト・スイッチ等のオーバーヘッドを著しく削減 I/Oが無い場合、スレッドは他のタスクを実行可能 Netty ローレベルなAPIであるJava NIOを汎用的に利用可能にしたフレームワーク 非同期&イベント・ドリブン Flow = Reactive Streams ノン・ブロッキングなバックプレッシャー(流量)制御で非同期ストリーム処理をおこなうための標準仕様
  5. なぜ、GraalVMのnative imageがそんなに注目されるのか その背景にはマイクロサービス特有の要件があるから。 すなわち K8s上で速やかにかつ多くのインスタンスをスケールアウトしたり、FaaSでも 同じく 急速なトラフィック増加に対応したスケールアウトやコールドスタート時の時間短縮が求められるケースなどです。 なので、起動時間の短縮や、メモリー使用量の削減が重要な要件となります スライド右側にHelidon HotSpot mode(JITコンパイラモード)とnative imageの比較があります 起動時間が劇的に短縮されていたり、メモリーのフットプリントが大きく減っているのがご覧いただけると思います
  6. 1. 新しいJavaで書かれたJITコンパイラを提供している 2. AOTコンパイレーションという技術を使って、事前にマシン語にコンパイルしたネイティブイメージを作成できる GraalVMはオープンソースのCEと優れたパフォーマンスを提供する有償サポート版のEEがある EEはオラクルクラウドをご利用いただくお客様には無償で利用いただけます
  7. もともとの始まりは、Java EEをマイクロサービス・アーキテクチャのために最適化させた軽量版仕様 Java EEにはFull Profile, Web Profileという言葉があるが、それと同じ文脈だったと思います。 ビジネスロジックを実装してRESTサービスとして公開するための主要機能に加えて 1)CNCFで標準化されているような標準のJava実装のためのAPI 2)マイクロサービスのデザインパターンやベストプラクティスを共通化して実装するためのAPI これらをフレームワークとしてまとめたもの 開発者はビジネスロジックに集中できる ベンダ独自仕様に縛られるようなロックインを回避できる
  8. MicroProfileの1.0が2016年にリリースされたころはまさに右側にあるJavaEEの一部( CDI、JAX-RS、JSON-P)を切り出しただけの仕様だったが 年月を経るにつれ、左側にあるマイクロサービス標準に準拠した仕様が増えてきて、現在はバージョン3.2 Java EE由来の仕様は、主にビジネスロジックをRESTサービスとして提供するために必要なコアの機能を提供 一方、左側のMP固有の仕様は、 マイクロサービスに関連するオープン仕様(Open XX) やマイクロサービス構築の際に用いられるデザインパターンやベストプラクティスの類を規定としたものが 中心となっている
  9. REST APIのロジックを実装する部分の話 Java EEから必要十分な仕様を持ってきていて、わかりやすく非常に強力な開発フレームワークになっている。 Java EEにJAX-RSというRESTアプリケーションを開発するための仕様があるが、これは普通のJavaのクラス(プロパティとメソッドをもったクラス)にアノテーションをつけるだけで、RESTサービス化することができる。 さらに、RESTはJsonフォーマットのデータをやりとりするが、そのあたりもJSON-Bという機能を使って、Javaオブジェクトにバインディングされるので、Jsonデータを直接扱う必要はない(あつかってもいいけど – JSON-P)
  10. 注目仕様として3つ上げました なぜ、この3つかかというと、全て外部のエージェント/サービスと連携してシステムのリジリエンシーやオブザーバビリティの向上に寄与する類のもので、まさにマイクロサービス的だといえるからです。
  11. デフォルトの状態だとHelidonは Liveness – cpu使用率、ヒープ空き容量、デッドロックの有無 Readiness – 特になし、つねにUP HealthCheckインターフェースの実装クラスにLivenessもしくはReadinessのアノテーションをつけます、簡単。 Stateをtrueで返すかfalseで返すかで、状態をコントロールします
  12. 様々な監視モジュールやエージェントがこのパスのRESTをたたいてヘルスチェックを行うことができる KuberenetesにはLivenessProbeとReadinessProbeというのがあって、この仕組みをばっちり使うことができる 200 OK 503 Service Unavailable
  13. システムの健全性を測定するための情報を取得するための仕様 ヘルスチェックとは異なる目的… 取得する情報は3つのスコープがあり -MPが必ず実装しないといけないbaseスコープ -MPベンダーが任意に実装するvendoerスコープ -アプリケーションが自ら定義するapplicationスコープ だいたいのものは、baseとvendorでかなりカバーできていると思う。 Java EEではJMXという標準仕様があって、かっちりしたエコシステムが出来上がっていると思うが、 残念ながらJava EE/SEの世界に閉じたもので、マイクロサービスが前提としているPolyglotな世界で、NonJavaのアプリケーションとの共存は難しい、… ということで、マイクロサービス環境でJavaに閉じない共通的な監視情報提供を行うためのMetricsの仕様を定義している
  14. HelidonからエクスポーズされるMetricsは、Prometheus/Grafanaのようなツールを使って可視化することができます
  15. アプリケーション独自のメトリクスを取得する方法について いろいろやり方はあるが、一番簡単なのは、 Methodにアノテーションをつけると、自動的にそのメソッドのMetricsを取得することができる Metrics専用のオブジェクトをインジェクトして、プログラム的にオブジェクトを更新する このサンプルでは,,, @Metered をつけると、メソッドが呼ばれるたびにメーターがカウントされる totalというCounterオブジェクトがIngectされているが、blue()/Green()が呼ばれるたびにインクリメントされるようになっているので、この例ではtatalはblue()とGreen()のメソッドが呼ばれた合計値を表していることになる。 右のグラフは、そのメトリクスをGrafanaで可視化したもの
  16. 分散トレーシング: 分散されたシステムで処理されるリクエストを追跡(トレーシング)するためのもの マイクロサービスのような複数のサービスで構成されるシステム(分散システム)では、1つのリクエストが複数のサービスをまたいで処理されることにより、リクエスト全体の処理の流れを把握する(トレーサビリティ)ことが難しくなります。 トレーサビリティが低下することによって障害やリクエストのレイテンシーが悪化した際に、どのサービスに問題があるのかを見つけることも難しくなります。 このような問題をサービスの依存関係やサービス単位のレイテンシーを可視化することによって解決の手助けをするシステムを分散トレーシングシステムといいます。
  17. 理解を助けるための補足ですが、OpenTracingではトレースの単位をスパンで定義します。コール・ツリーの形で観ていくとスパンからスパンへの呼び出しの関係が左側のように表現でき、時系列で表現すると右のように階層型に重なっていくように表現できる
  18. Oracle Cloudで提供しているmanaged k8s環境であるOracle Container Engine for Kubernetes (OKE)の Kubernetesクラスタの上に、Helidonのポッドを4個デプロイして相互にRESTサービスを呼び合うようなリクエストを送ってみたいと思います。同時にJaegerのポッドをデプロイして、4つのHelidonのトレース情報がこのJaegerに集まるようにします。 これで、実際にJaegerでどう見えるかを確認してみましょう。 --- ここでのポイントは、 プログラムは一切にトレーシングについては、コーディングをしていない HelidonがHTTPのレベル、セキュリティのレベル、メソッドのレベルでトレーシング情報を自動で出している
  19. JAX-RSアプリケーションは追加的なコードを必要としないので、Helidonのデモでも、まったく何もしなくてもメソッドレベルのspanが表示されていたが、さらにコーディングで独自のスパンを定義することが可能 ここでは、JPAでデータベースをアクセスするSpanを定義している、JPAのコールの前後でスパンの開始・終了をコーディングしておけば、このスライドでみえるように、JPAの実行時間や付随する情報をトレースすることが可能
  20. まず、セキュリティの部分ですが、Helidonは認証、認可に関するいろいろな機能をプロバイダという形で提供しています。 - HTTP系の各種認証機能 - MPにも規定がある、JWTを使った認可機能 - 外部のIdPと連携する方式としては、Google Login用の認証プロバイダやOpen ID Connect標準を使った認証プロバイダ - さらには、Oracle Identity Cloud ServiceのグループとRoleをマッピングする機能を提供しています ABAC – attribute based access control
  21. マイクロサービス間はともかく、単一のマイクロサービス内で行われる単一データソースに対するローカルトランザクションのニーズは相変わらず高いと思いますし、特にデータベースに対するデータ操作やコミットの制御、さらにコネクションのプーリングによるパフォーマンスの向上などは、必須の機能と思いますし、MicroProfileの規定にない部分でもある。 Helidon MPは、JPA/JTAというJava EE/Jakarta EE標準のAPIをサポートします コネクションプールとして、Hikari CPとOracle UCPが使えます その他、 キャッシュサーバーの機能を提供するRedis用のクライアントや、Oracle CloudのObject Storage用のクライアントを提供しています
  22. 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についても使えるようになっています。
  23. なぜgRPCへの期待が高まっているか まず第一にベースとなるプロトコルがHttp2であること http/1.1と違って、バイナリフレームを利用し、双方向ストリーミングも対応できます。 gRPCにもストリーミング形式のメッセージの送受信が規定されいる 第二に、データ形式にProtocol Buffersを使っていること 送信データをProtocol Buffersでシリアライズしてバイナリに変換させるため、送信データ量が少なくなり高速になります。 このProtocol Buffersで送受信されるメッセージのスキーマは IDLというスキーマ定義言語で記述されます このIDLスキーマをprotocコンパイラを使って、使用する言語用にコンパイルすると、その言語での実装に必要なメッセージデータの定義や送受信に必要なスタブなどが生成され、これを使ってプログラミングしてきます
  24. Helidonはバックエンドのマイクロサービスを実装するためのフレームワークという前提でお話をしてきましたが、普通にSpringBootやTomcat/MVCで作ったアプリレベルのものも普通につくれちゃいますよという意味もこめたデモをお見せします。 UIはReactでもVueでなんでもいいですが、今回はOrale JET Javascript Extension Kit を使ってSingle Page Applicationを作ってみました。 JETは弊社のクラウドサービスの大多数のUIで使われてます。HelidonはフロントにスタティックコンテンツとAPIを提供するだけ。
  25. Helidon MPでもGraalVMのnative imageの作成ができるようになります CDIの参照実装であるWeldをカスタマイズしたものを使っていて、native imageを作成できますけどCDI compatibleです。native imageをビルドする際に標準的なCDIのアプローチを使ってCDIの依存性を解決しています。 Helidon DB Client – ノンブロッキング、リアクティブなDBアクセス、Java SEでリアクティブ処理を行うためのFlow API(Publisher/Subscriber)を使った実装、JDBCとMongoDBをサポート Reactive Streams Operators /Reactive Messaging などのリアクティブ処理を実現するMicroProfileのオプショナル仕様のサポートと、さらにKafka Connectorの提供 CLIを使ってプロジェクトライブラリの依存関係の管理やデプロイターゲット毎(Docker imageやnative image)のビルド作業を効率化してくれる Verrazzano という聞きなれない言葉がでてきました – Oracleがこれからリリースする新しいソリューションの名前です。
  26. Verrazzanoは、Helidonと並行して進められているOSSプロジェクトです。 マイクロサービスのライフサイクルを考えた場合、様々な切り口(CI/CD、耐障害性、可観測性やロギング)での考慮点があり、またその各々に適したソリューションが存在する。現在、非常にたくさんのオープンソースベースのソリューションがあって、それを組み合わせて一つのシステム体系にしていくのはエンドユーザーの責任となっているが、これを実現・維持していくのは実際かなりしんどい。 Verrazzanoは、上記のような最新のテクノロジートレンドを取り入れ、オンプレミスやマルチクラウド環境を横通しして包括的なアプリケーションの開発からデプロイ・監視までのライフサイクル管理を実現するソリューションを提供する。 RancherによるKubernetesのマルチクラスタ管理 yamlを使ったアプリケーションと周辺サービスの宣言的定義 Prometes,Grafanaでの監視、Elastic stackを使ったログ管理 KeycloakでID&アクセス管理