Slide 1

Slide 1 text

Helidon 概要 クラウドネイティブ時代のマイクロサービス・フレームワーク 日本オラクル株式会社 2023年12月

Slide 2

Slide 2 text

エンタープライズ・アプリケーションの世界の変化 Copyright © 2023, Oracle and/or its affiliates. 2 Build Deploy Test Release DevOps Cycle 場所を問わず動作する クラウドネイティブな コンテナの展開 オープンソースの DevOps ツール群の連携 マイクロサービスと サーバーレス・ アプリケーション 複数言語を扱う Polyglot な アプリケーション Micro service 1 Busines s Domain Micro service 2

Slide 3

Slide 3 text

Javaのマイクロサービス・フレームワーク OracleがホストするOSSプロジェクト • GitHubでソースコードを公開:https://github.com/oracle/helidon • Helidonの商用サポートはWebLogic Server/Coherence/Verrazzanoのサポート契約に含まれる マイクロサービスアプリケーションが必要とする機能を提供するJavaライブラリの集合体 • 単体のJVMとして動作し、アプリケーションサーバ不要、容易なコンテナ化 • 必要なコンポーネントを追加して拡張することも可能 マイクロサービスの開発・運用を支援する機能を提供 • OpenMetrics(監視)、OpenTelemetry(監視、ログ、追跡)、OpenAPI(API公開) • 耐障害性/回復性: ヘルスチェック、サーキット・ブレーカ 2つのプログラミングモデルを提供 • Helidon MP:宣言的記法(Java EE開発者フレンドリー) • Helidon SE:関数的型記法 Project Helidon 4.0 Copyright © 2023, Oracle and/or its affiliates. 3

Slide 4

Slide 4 text

Helidonのポジショニング 4 Copyright © 2023, Oracle and/or its affiliates. Full Stack MicroProfile based Microframeworks Helidon MP Helidon SE

Slide 5

Slide 5 text

Helidon SE と MP 5 • マイクロ・フレームワーク • 超軽量フットプリント • 関数型 • 仮想スレッドを利用したWebサーバ • Eclipse MicroProfile 準拠 • 軽量フットプリント • 宣言型 • Java EEサブセット + マイクロサービス関連機能 Helidon MP Helidon SE フットプリント重視 機能性重視 互換性(MicroProfile準拠)重視 Copyright © 2023, Oracle and/or its affiliates. ≒ + Eclipse MicroProfile + 拡張機能

Slide 6

Slide 6 text

Helidon MP が準拠する業界規格 • マイクロサービス環境の中で動作するJavaアプリケーションの開発に必要な機能を規定 • マイクロサービス各種仕様に準拠 • マイクロサービスのデザインパターンを実装 • 業界規格フレームワークの恩恵 • 開発者はビジネスロジックの実装に集中でき、効率的な開発ができる • 基盤となる実装は、MicroProfileプロバイダの品質維持・向上を期待できる • ベースは JavaEE (JakartaEE) のサブセット – アプリケーション・サーバー開発経験者が取り組みやすい Eclipse MicroProfile Copyright © 2023, Oracle and/or its affiliates. 6 Open Telemetry OpenAPI Circuit Breaker Bulk Head Health Check マイクロサービス各種仕様に準拠 マイクロサービスのデザインパターンを実装 OpenMetrics

Slide 7

Slide 7 text

• Helidon は ライブラリをパッケージングした Java SE アプリケーションとして実行される • Helidon アプリケーションは個々の Java VM 上で実行(Java VM は共有されない) • 複数の パッケージング・オプション、Dockerにも対応 – ビルド・ツールを使って簡単に作成 多彩なパッケージング Copyright © 2023, Oracle and/or its affiliates. 7 実行可能 Jar Jlink ランタイム・イメージ GraalVM ネイティブ・イメージ Container Application Java Runtime Linux Container Custom Java Runtime Linux Container Native Application Linux Application

Slide 8

Slide 8 text

周辺 システム Cloud Services WebLogic Helidon ~ OCI上でのアプリケーション構成例 Copyright © 2023, Oracle and/or its affiliates. 8 App #1 デプロイメント App #2 デプロイメント App #3 デプロイメント App #4 デプロイメント フロント層 バック層 データ永続化層 OCI Database サービス • レプリカセットの維持(再起動) • ローリングアップデート • スケーリング APIs for Business Load Balancer API Gateway APIs for IT ReplicaSet Autonomous Database Streaming No SQL Database Functions Container Engine For Kubernetes Container Engine For Kubernetes Exadata Cloud Database Cloud Service MySQL Database Service Browser(SPA) Mobile App IoT App App App App App App App App App App App App ReplicaSet ReplicaSet ReplicaSet

Slide 9

Slide 9 text

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/Coherence/Verrazzanoライセンス保有のお客様にHelidonのサポートを提供中 Helidonのサポートについて 9 Copyright © 2023, Oracle and/or its affiliates.

Slide 10

Slide 10 text

クラウド・ネイティブ時代に最適なJavaベースのマイクロサービス・フレームワーク マイクロサービス環境に適したアプリケーションを効率的に開発 • SEとMPの二つのエディションを用意 – 要件に応じた使い分け MicroProfileによる仕様標準化の恩恵、ロックインの回避 • Metrics, Health, OpenAPI, OpenMetrics、OpenTracingなどはノー・コーディングで利用可能 • 開発者はビジネスロジックの開発に専念できる • ベンダーの健全な競争の下で、フレームワーク実装の品質向上が見込める 実際のプロジェクトで必要となる拡張機能の提供 – セキュリティ、データベース接続、etc. 多くの実績の中で育まれたJavaのエコシステム • IDE、ライブラリ、モニタリング・プロファイリング・デバッギング、etc. • GraalVMの活用 まとめ - Helidonを採用すべき理由 10 Copyright © 2023, Oracle and/or its affiliates.

Slide 11

Slide 11 text

ありがとうございました 11 Copyright © 2023, Oracle and/or its affiliates.

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

Appendix Copyright © 2023, Oracle and/or its affiliates. 13

Slide 14

Slide 14 text

https://oracle-japan-oss-docs.github.io/helidon/docs/v3/ Helidon 日本語ドキュメント Copyright © 2023, Oracle and/or its affiliates. 14

Slide 15

Slide 15 text

Helidon 4.0.0 Helidon MP を構成するコンポーネント Copyright © 2023, Oracle and/or its affiliates. 15 MP Config Metrics Health Check Fault Tolerance JWT Auth JAX-RS CDI JSON-P / B Open API Open Telemetry REST Client SE SE CORS WebSocket gRPC + オリジナル JavaEE由来 MicroProfile Sandbox Reactive Streams Operators Reactive Streams Messaging OCI Object Storage, Vault, ATP GraphQL SE MicroProfile = JPA Bean Validation JTA Kafka/JMS Connector SE SE Scheduling DB Client HashiCorp Vault Web Client SE For SE For SE SE SE SE Helidon オリジナル SE Long Running Actions SE For SE SEにも同等の機能あり SE向けに提供 (MPでも利用可) Open Tracing SE

Slide 16

Slide 16 text

1ステートメントで起動できるREST APIサーバー Helidon SE – 関数スタイルのシンプルなRESTサーバー開発 16 public static void main(String[] args) throws Exception { WebServer webServer = WebServer .builder() .routing(Main::routing) .build() .start(); } static void routing(HttpRouting.Builder router) { // パスやレスポンスを登録するrouting設定を定義 router.get("/*", (req, res) -> res.send("WebServer Works!")); } Helidon SE Copyright © 2023, Oracle and/or its affiliates.

Slide 17

Slide 17 text

アノテーションでPOJO(=普通のJavaクラス)がRESTサービスに! Helidon MP – MicroProfileを使ったRESTサーバー開発 17 @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 © 2023, Oracle and/or its affiliates. Helidon MP

Slide 18

Slide 18 text

様々な認証・認可スキームに対応 / IDCSを使った認証・認可を効率的に開発可能 JWT Provider HTTP Basic Authentication HTTP Digest Authentication Header Assertion HTTP Signatures ABAC Authorization Google Login Authentication Provider OIDC (OpenID Connect) Authentication Provider IDCS Role Mapping Provider • IDCSのユーザー/グループを使ったアクセス制御 Helidonが提供するSecurity Providers Copyright © 2023, Oracle and/or its affiliates. 18 Identity Provider Helidon OpenID Connect 認証シーケンス Browser OIDC (Open ID Connect) Authentication Provider を使ったユーザー認証 user/group scope * IDCS = Oracle Identity Cloud Service @GET @Path("/admin-role") @Authenticated @RolesAllowed("admin") public void somemethod() { return; } IDCSで定義した adminロールに マッピングする MicroProfileの ソースコードの例

Slide 19

Slide 19 text

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 データの永続化/キャッシュが必要な場合に便利な機能 19 CDI extension = CDIのライフサイクルイベントを受け取って独自の実装を追加するための仕様 JPA = Javaオブジェクトをデータベースに永続化するための仕様 JTA (Java Transaction API) = トランザクションを管理するための仕様 Helidon MP JDBC Driver Java Transaction API EclipseLink (JPA) Entity App Hikari Connection Pool application.yaml persistence.xml Helidon MPによるJPA/JTAサポート Copyright © 2023, Oracle and/or its affiliates. Helidon MP

Slide 20

Slide 20 text

※現在はExperimentalのステータス gRPCのサーバー&クライアント実装を簡単に開発できる SE、MP両エディションでサポート • SE – リアクティブ・スタイル • MP – POJO + アノテーション • 従来からのProtobufサービス/スタブも利用可能 ペイロード・タイプは Protocol Buffers と Java Serialization をサポート Security, Telemetry, Health Check機能を提供 もちろんRESTサービスと共存(サーバー・ポートは別) gRPC のサポート 20 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 © 2023, Oracle and/or its affiliates.

Slide 21

Slide 21 text

MicroProfile Reactive Messaging 準拠のKafka Connector MicroProfile Reactive MessagingをベースにKafkaとの送受信機能を提供 • アノテーションを使って簡単に送受信を実装 Kafkaの接続情報は設定ファイル内で指定 • アプリケーションはKafka接続への依存性を排除できる OCI Streaming ともKafka互換APIを使って通信可能 Helidon Kafka Connector Copyright © 2023, Oracle and/or its affiliates. 21 Helidon Kafka Connector Producer Helidon Kafka Connector Consumer Kafka-pub Kafka-sub MicroProfile Reactive Messaging MicroProfile Reactive Messaging Kafkaへの送信 Kafkaからの受信

Slide 22

Slide 22 text

分散環境での一貫性を保証するための手法 マイクロサービスにおけるSAGA pattern(非同期通信、分散ロックなし、補償アクションを使ったリカバリ) • XAトランザクションの不都合(サービス間に強力な結合が導入される)を解消するための新たなアプローチ OASIS WS-LRAが起源 MicroProfile Long Running Actions (LRA) Copyright © 2023, Oracle and/or its affiliates. 22 https://download.eclipse.org/microprofile/microprofile-lra-1.0-M2/ サービス1 サービス2 コーディネーター Helidon MP

Slide 23

Slide 23 text

Annotation, LRA Coordinator アノテーションを使ったプログラミング・モデル LRAの一連のライフサイクル処理を Annotation を使って 定義する LRA Coordinator がトランザクションの状態を管理 • すべてのLRAトランザクションを追跡し、LRAトランザク ションがキャンセルまたは完了したときに参加者の補 償RESTエンドポイントを呼び出す • Narayana coordinator互換の Helidon LRA Coordinatorを提供 MicroProfile Long Running Actions (LRA) Copyright © 2023, Oracle and/or its affiliates. 23 Coordinator Annotation Description @LRA LRAのライフサイクルを制御する @Compensate LRAがキャンセルされた場合に呼び出される @Complete LRAがクローズされた場合に呼び出される @Forget LRAに割り当てられたリソースを解放する @Leave LRAとの関連が無くなった場合に呼び出される @Status LRAのステータスを報告する @AfterLRA LRAが最終ステートに到達した際に呼び出される @LRA(LRA.Type.REQUIRES_NEW) @Path("/cdi") @PUT public void doInTransaction(@HeaderParam(.. Helidon MP

Slide 24

Slide 24 text

OpenTracing互換の分散トレーシングに加えてサーバーメトリクス/リソース収集をサポート OCI Application Performance Monitoringでは、Helidon専用のJavaライブラリを提供 • アプリケーションの変更無しで、分散トレーシングやメトリクス監視が可能 OCI APM Java Tracer を使った Helidon アプリケーションのモニタリング Copyright © 2023, Oracle and/or its affiliates. 24 分散トレーシング : スパン 分散トレーシング : トポロジー サーバーリソースのモニタリング アラートの設定

Slide 25

Slide 25 text

Eclipse MicroProfile準拠のフレームワークが最適 Java EE標準企業が選択すべき次世代フレームワークは? Copyright © 2023, Oracle and/or its affiliates. 25 • Java EEが現行標準フレームワーク • Java EEの開発・運用スキルを保有 • マイクロサービス志向 - 高頻度リリース、変更の局所化 - コンテナ化/軽量フットプリント - CI/CDとの連携・DevOpsとの親和性 • APIファースト - サービス定義の明確化と共有化 - モジュール(API)の再利用性向上 • SPA(Single Page Application) - UIの柔軟性向上、高機能化 - フロントエンドとバックエンドの分離 技術 トレンド バック グラウンド Eclipse MicroProfile規格が要件にフィット • マイクロサービスのためのフレームワーク - 軽量フレームワーク、Java SEベース - REST APIを効率的に開発可能 - CI/CDとの親和性が高い - Metrics, Health, OpenTelemetryなど運用監視に 必要な機能を標準実装 - Cloud Native Computing Foundation(CNCF)の 各種規格への準拠 = Interoperability高 • ベースとなる規格はJava EEのサブセット - Javaスキル保有者の学習コスト低 • 共通規格 = ベンダ・ロックインを回避 Helidon MP

Slide 26

Slide 26 text

Oracle主導で開発されるOSS GraalVM:Java SE互換の次世代多言語プログラミング実行環境 Copyright © 2023, Oracle and/or its affiliates. 26 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はOracle Cloud 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アプリ (マシン語) シングルバイナリ

Slide 27

Slide 27 text

エンタープライズ・コンテナ・プラットフォーム VERRAZZANO Copyright © 2023, Oracle and/or its affiliates. 27 Public Cloud Private Cloud Multi-Cloud Kubernetes Kubernetes Kubernetes Traditional Applications Polyglot Microservices Java Microservices Multi-Cluster Infrastructure Management Intelligent Workload Management Across Environments Application Lifecycle Management/ DevOps Enablement Automated Built-in Observability Cross-cloud Consistency VERRAZZANO

Slide 28

Slide 28 text

Our mission is to help people see data in new ways, discover insights, unlock endless possibilities.