$30 off During Our Annual Pro Sale. View details »

クラウドで実践するEnterprise Java / ochacafe-enterprise-java

クラウドで実践するEnterprise Java / ochacafe-enterprise-java

Oracle Cloud Hangout Cafe Premium
2021/12/1 開催

第一部 Oracle Coherence アップデート
第二部 Helidon アップデート
第三部 WebLogic Kubernetes Toolkit 概説

セッション動画はこちら
https://youtu.be/DWCPLV3JsF0

oracle4engineer
PRO

December 01, 2021
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. クラウドで実践するEnterprise Java Oracle Cloud Hangout Cafe Premium December 1st, 2021

    Oracle Corporation Japan 第一部 Oracle Coherence アップデート 第二部 Helidon アップデート 第三部 WebLogic Kubernetes Toolkit 概説
  2. 以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とする ものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することを確約 するものではないため、購買決定を行う際の判断材料になさらないで下さい。 オラクル製品に関して記載されている機能の開発、リリース、時期及び価格については、弊社の裁量により決定され、変 更される可能性があります。 Safe harbor statement Copyright ©

    2021, Oracle and/or its affiliates 2
  3. Copyright © 2021, Oracle and/or its affiliates 3 第一部 Oracle

    Coherence アップデート
  4. Oracle Coherence Update Shingo Yamanari Solutions Architect Oracle Corporation Japan

    December 1st, 2021
  5. 日本オラクルのプリセールスで製品担当部署に所属 日本オラクル株式会社 クラウド・エンジニアリング統括 ソリューション・アーキテクト本部 プリンシパル・クラウド・ソリューション・エンジニア 山成慎吾 自己紹介 Copyright © 2021,

    Oracle and/or its affiliates 5
  6. Agenda Copyright © 2021, Oracle and/or its affiliates 6 Coherence

    Operator Oracle Coherence 新機能ハイライト Oracle Coherence とは
  7. Copyright © 2021, Oracle and/or its affiliates 7 Oracle Coherence

    とは
  8. Oracle Coherence とは? Oracle の KVS 型 インメモリ・キャッシュ製品 データベース負荷を下げ 性能を向上させる

    Copyright © 2021, Oracle and/or its affiliates 8 インメモリ キャッシュ データベース クライアント アプリケーション
  9. Oracle Coherence とは? Oracle の KVS 型 インメモリ・データ・グリッド製品 Copyright ©

    2021, Oracle and/or its affiliates 9 インメモリ ストレージ データ処理 アプリケーション 連携システム クライアント アプリケーション 大量データの高速処理を実装 するためのアプリケーション基盤
  10. データ・グリッドの機能とは Copyright © 2021, Oracle and/or its affiliates 10 •

    複数マシン上で大量データを分散管理する分散 データ管理機能 分散データ管理 • 分散された大量データを効率的に処理するための データ処理機能 分散データ処理 • 複数マシンを管理しスケールさせるための クラスタ機能 クラスタ管理 大量データを効率的に扱うためのアーキテクチャ 3つの特長
  11. スケーラブルなインメモリ分散KVSをベースとしたJava VMベースのデータ処理アプリケーション・プラットフォーム • 分散データ管理 • インメモリ分散Key-Value Store(KVS) • インメモリ・データ可用性 •

    拡張・縮退時の自律的なデータ・リバランス • 分散データ処理 • データアフィニティ • In-Place Processing • データストア連携 • イベント処理 etc • クラスタ管理 • 専用のクラスタ管理プロトコル(TCMP) • 動的な拡張・縮退 • 自律分散型でSPOF/SPOBなし • 高速な障害検知 Oracle Coherence Copyright © 2021, Oracle and/or its affiliates 11 Native Client (Java, .NET, C++) WAN DB Native I/F JCache I/F JCache Client (Java) REST API Polyglot App Client サーバを跨る分 散KVS In-Place Processing (処理の分散 実行) 他サイトのクラ スタ データ ストア Web サービス データストア連携
  12. データキャッシュ用途からリアルタイム・イベント処理まで Coherence の主なユースケース アクセス性能改善、 バックエンドのオフロード アプリケーション イベント処理型 アプリケーション イベント処理ロジック イベント・ストリーム

    イベント・ストリーム 高速データ分析・判定 グリッド・コンピューティング データ集約型ロジック Copyright © 2021, Oracle and/or its affiliates 12 大手ECサイト:カート/注文処理のDBオフロード 大手家電量販店:商品情報アクセスのDBオフロード 大手航空会社:空席照会のホスト負荷のオフロード メガバンク:為替レート情報のリアルタイム加工 大手通信業:ユーザ認証/契約サービス判定 インターネット・プロバイダ:課金処理の分散バッチ オンラインFX業:高速レート配信&取引 大手通信業:ネットワーク回線監視・異常検知 大手製造業:複合機監視・異常検知
  13. Partitioned Cache による分散データ管理 • Partitioned Cache • データを格納するPartitionを複数のJVMに分散配置 • 自動分散配置による動的スケール変更に対応

    • クライアントを含む全メンバがアクセス・ロジックを所持 • 1 hop でデータアクセスが可能 • データアクセスをパラレルに実施 • データ更新、集計、フィルタ、In-Place Processing、etc. • Map型APIによる透過的なデータアクセス • java.util.Map を継承したシンプルなアクセス • クラスタ全体のデータに対してMapのみでアクセス • サーバ側へのアクセス・ロジックはAPI内部で隠蔽 • 自動的にデータをリバランス Coherenceのデータ管理の基本的な仕組み Copyright © 2021, Oracle and/or its affiliates 13 アプリケーション A B C D 位置を意識しない 透過的なアクセス JVM JVM JVM JVM JVM サーバ追加 Coherenceデータグリッド E データ容量 & 処理性能を動的かつ均一に拡張
  14. データアクセスとデータ可用性の維持 • ハッシュ・ベースで分散配置されたパーティション単位で管理され、配置ロジックがクラスタ全体で共有される • データ保持ノードをクライアントから直接特定してアクセス可能 • バックアップは異なるマシン上に配置 = マシン・セーフ •

    クラウドの場合:異なるベアメタル・サーバ / FD / AD など • Get操作 (参照処理) はプライマリに対して実行、Put操作 (更新処理) はプライマリの更新とバックアップ更新を実 行 Coherenceの可用性担保の仕組み Copyright © 2021, Oracle and/or its affiliates 14 Machine 1 JVM 1 P B JVM 2 P B 1 2 3 5 Machine 2 JVM 3 P B JVM 4 P B 3 4 1 7 Machine 3 JVM 5 P B JVM 6 P B 5 6 2 8 Machine 4 JVM 6 P B JVM 8 P B 7 8 6 4 Client JVM Coherence API Application get put A B B A Coherenceクラスタ パーティション データ B バックアップ P プライマリ
  15. 障害時の振る舞い • 障害時はバックアップからパーティション単位で復旧 • 障害復旧の最小単位はパーティション単位 • 無くなったプライマリをバックアップから復旧(インメモリで昇格) • マシンセーフのためのプライマリの均等化(ネットワーク経由で再配置) •

    バックアップの再作成(ネットワーク経由でコピー) Coherenceの可用性担保の仕組み Copyright © 2021, Oracle and/or its affiliates 15 1 2 3 Machine 1 JVM 1 P B JVM 2 P B 1 2 3 5 Machine 2 JVM 3 P B JVM 4 P B 3 4 1 7 Machine 3 JVM 5 P B JVM 6 P B 5 6 2 8 Machine 4 JVM 6 P B JVM 8 P B 7 8 6 4 5 6 2 8 2 6 5 1 1 2 3 3 3 3 パーティション B バックアップ P プライマリ
  16. データベースやバックエンドとの連携 • データ連携処理はCacheStoreの実装クラスを利用 • 事前定義済みの JPA CacheStoreの利用 • カスタムで実装した任意のCacheStore •

    同期パターンを設定してCacheStoreの呼び出しタイ ミングを制御して外部データソースと連携 • 読み取り • キャッシュ・ミス時にDBからデータを取得してキャッシュに格 納(Read-Through) • 有効期限切れ前にデータをリフレッシュする設定可能 (Refresh-Ahead) • 書き込み • 同期更新(Write-Through) • 非同期更新(Write-Behind) 外部データソースとの連携 Coherenceのデータソース連携 Copyright © 2021, Oracle and/or its affiliates 16 Object load(Object key) void store(Object key, Object value) void erase(Object key) アプリケーション put JVM A CacheStore JVM CacheStore JVM CacheStore JVM CacheStore B D A C insert/update Write-Through or Write-Behind DB get select Read-Through or Refresh-Ahead
  17. データの更新イベントに基づいた処理 • データ変更に伴うイベント処理 • データ更新によりトリガされる処理を登録 • データ更新(insert/update/delete)イベントを受け取 り、対象データを伴う任意のイベント処理を実行 • フィルタによる対象データの絞り込みも可能

    • データ操作の種類 • Key/Valueに対する条件 • サーバ・サイドで利用可能なイベント処理 • データ変更のイベント • EntryProcessorによるIn-Place処理イベント • Partitionの移動、etc. Coherenceのイベント処理 Copyright © 2021, Oracle and/or its affiliates 17 イベントリスナー アプリケーション Coherenceデータグリッド JVM A JVM B JVM C JVM D ③ イベント通知 ① リスナー登録 ② データ変更 Listener Listener Filter Event Event Event
  18. データを保持するサーバ内での分散データ処理 • EntryProcessorによるIn-Place Processing • データの存在する場所(JVM)で処理を実行 • クライアントによる無駄なデータ送受信や大量のデータ 展開が不要 •

    Partitioned Cacheではデータの分散に沿ったパラレ ル処理が可能 • データの分散と合わせてデータの処理量も分散 • スケール・アウトによりデータ量と処理性能を同時に拡 張 CoherenceにおけるIn-Place Processing Copyright © 2021, Oracle and/or its affiliates 18 JVM Logic ① データを全件取得 ② 全件データを展開 ④ 結果を格納 ③ 全件データを集計 【クライアント・サイドの集計処理】 【EntryProcessorによるIn-Place集計処理】 JVM ① 処理のInvoke ② キャッシュサーバ単位で 並列に結果を集計 ③ サーバ数分の結果を取得 Logic ④ サーバ数分の 結果を集計
  19. In-Place Processingによるパラレル処理を活用したクエリ機能 • クエリ機能 = Key以外の条件によりデータを抽出する機能 • クエリ条件をFilter APIで指定して該当データのコレクションを取得 •

    内部的にIn-Place Processingで実現される並列クエリ • データを持つ各ノード上でそのノードがもつデータのみに対してクエリ処理をパラレルで実施 • クライアント側で結果がマージされる (マージ処理はAPI内で隠蔽) • 検索高速化のためのIndex作成も可能 クエリ機能 Copyright © 2021, Oracle and/or its affiliates 19 JVM A クエリ 実行 Index Result A JVM クエリ 実行 Result A App JVM クエリ 実行 Index Result JVM E クエリ 実行 Index Result G D B C G G クエリ 結果 D D F
  20. Copyright © 2021, Oracle and/or its affiliates 20 Oracle Coherence

    新機能ハイライト
  21. のコンテナによるプロダクション環境に対する商用サポートを提供 商用コンテナ環境に対するCertification • Coherence 12.2.1.3 以降のバージョンからサポート • CRI-O/Docker/Kubernetesに対応 (※1) Oracle

    公式レジストリにてイメージを提供 (※2) • Oracle 公式レジストリ:https://container-registry.oracle.com • [Middleware]->[coherence] から取得可能 コンテナ環境上でのライセンス条件 • 従来のOracle Partitioning Policyに準拠 • Kubernetes環境の場合ラベルによる制御によりライセンス対象の絞り込みが可能 https://www.oracle.com/a/tech/docs/running-and-licensing-programs-in-containers-and-kubernetes.pdf Coherenceのコンテナ化対応 Copyright © 2021, Oracle and/or its affiliates 21 ※1:Supported Virtualization and Partitioning Technologies for Oracle Fusion Middleware https://www.oracle.com/middleware/technologies/ias/oracleas-supported-virtualization.html ※2:後述の Coherence CE版のイメージは GitHub 上にて公開 https://github.com/oracle/coherence/pkgs/container/coherence-ce
  22. https://github.com/oracle/coherence-operator • Kubernetesに対する操作でCoherence構成をデプロイ • Coherenceイメージにアプリケーションを組み込み利用 • クラスタ・メンバ・ロールごとのスケール制御に対応 • Cache Sevrer/Client/Extend

    Proxy, etc. • クラウド上での利用を想定した可用性構成に対応 • Kubernetesゾーンを考慮した可用性構成 • Kubernetesクラスタを跨ぐフェデレーション構成 • 標準的なOSSスタックによるCoherenceクラスタの管理 • Prometheus/Grafanaによるメトリクス監視 • Fluentd/Elastic Stackによるログ連携 Coherence Operator for Kubernetes Copyright © 2021, Oracle and/or its affiliates 22 Kubernetes Cluster REST Management Coherence Cluster POD 1 POD 5 Coh POD 2 Coh POD 3 Coh POD 4 Coh Coh Operator Kubernetes
  23. Subscriber Group Coherenceデータグリッドを活用したPublish/Subscribe型のメッセージング • NamedTopicによる透過的なメッセージング • トピック・メッセージはデータグリッド上に分散配置 • NamedTopicでメッセージ配置を意識せずにアクセス •

    100,000~ msg/sec 規模の高速メッセージング • 2つのモードのメッセージング • アクティブ・サブスクライバ全体への配信 • キューを経由したサブスクライバ・グループへの配信 • サブスクライバ・グループ・メンバの1つに対してのみ配信 • ローカル・ストレージを利用した永続化に対応 • Publisher/Subscriber共にクラスタ・メンバのみ (※) Coherence Topics Copyright © 2021, Oracle and/or its affiliates 23 JVM JVM JVM JVM Coherenceデータグリッド Subscriber Group Named Topic Subscriber Publisher Subscriber ※Extend Proxyによるクラスタ外のPublisher/Subscriberは将来対応予定
  24. Coherenceに対する操作に対するトレーサビリティ • Coherenceに対する各操作のトレース情報を出力 • NamedCacheやイベント・リスナーによる処理イベント • CacheStore処理や永続化の操作、etc. • OpenTracing 対応ライブラリと連携したトレーシング

    • TracerResolverにより検出したTracerを利用 (Jaeger client等) • TracerFactoryによるTracerも組み込み利用も可能 • 2種類のトレースのモード • アプリケーション開始の外部Trace Spanへの抽入 • Coherence側で開始するTrace Spanでの収集 OpenTracing 対応 Copyright © 2021, Oracle and/or its affiliates 24
  25. GraalVMランタイムのサポートとPolyglot Coherenceアプリケーション GraalVM サポートと多言語対応 Copyright © 2021, Oracle and/or its

    affiliates 25 VMランタイムとしてのGraalVMサポート • Coherenceサーバ、クライアントでのGraalVMサポート • GraalVM Enterprise Editionと組み合わせて利用 Coherenceアプリケーションの多言語対応 • Coherenceサーバに組み込むアプリケーションをJava以外 で記述して呼出し可能 • Filter • EntryProcessor • ValueExtractor • Aggregator • 現時点ではJavaScriptに対応 (今後拡充予定)
  26. Coherenceの基本機能を無償で利用可能なオープンソース版として提供 • GitHubより任意に入手可能:https://github.com/oracle/coherence • Maven CentralやDocker Hubでもアーティファクト/イメージを提供 • Coherence CommunityによるSlackチャネルでのサポート

    (※) • オープンソースとしてのリリースサイクル • 6か月単位でリリース (開発中の機能含む) • 次期リリースが提供されるまでサポート Coherence Enterprise Edition 機能のサブセットを利用可能 • Coherenceのコア機能を全て利用可能 • Partitioned Cache, クエリ、イベント通知、In-place Processing、Cache Storeによるデータ連携、etc. • 利用できない機能 • WebLogic Serverとの連携機能 • Grid Editionの機能 (HotCache、Federated Cache、etc.) Coherence Community Edition (Coherence CE) Copyright © 2021, Oracle and/or its affiliates 26 ※Coherence Enterprise Edition等の商用ライセンスによりMyOracle Supportでの問い合わせも可能
  27. Coherence 各エディションの主要機能 主要機能 Standard Edition One Community Edition Enterprise Edition

    Grid Edition Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y ※2 ノードまで Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y Y N Y Y Y N Y Y Y N N Y Y N N Y Y N N Y Y N N Y Y N N Y Y N N Y Y N N N Y N N N Y N N N Y N N N Y N N N Y Copyright © 2021, Oracle and/or its affiliates 27 New!
  28. Copyright © 2021, Oracle and/or its affiliates 28 Coherence Operator

  29. https://github.com/oracle/coherence-operator • Kubernetesに対する操作でCoherence構成をデプロイ • Coherenceイメージにアプリケーションを組み込み利用 • クラスタ・メンバ・ロールごとのスケール制御に対応 • Cache Sevrer/Client/Extend

    Proxy, etc. • クラウド上での利用を想定した可用性構成に対応 • Kubernetesゾーンを考慮した可用性構成 • Kubernetesクラスタを跨ぐフェデレーション構成 • 標準的なOSSスタックによるCoherenceクラスタの管理 • Prometheus/Grafanaによるメトリクス監視 • Fluentd/Elastic Stackによるログ連携 再掲) Coherence Operator for Kubernetes Copyright © 2021, Oracle and/or its affiliates 29 Kubernetes Cluster REST Management Coherence Cluster POD 1 POD 5 Coh POD 2 Coh POD 3 Coh POD 4 Coh Coh Operator Kubernetes
  30. Coherence Operatorの利用の流れ Copyright © 2021, Oracle and/or its affiliates 30

    1. Coherence Operator のインストール • YAMLを利用してインストール • Helm を利用してインストール 2. Coherenceイメージのビルド (Jibを利用) • アプリケーション、構成ファイルを含むCoherenceイメージのビルド 3. コンテナ・イメージをレジストリにPush 4. Kubernetes上にYAMLでデプロイ $ kubectl apply -f https://github.com/oracle/coherence-operator/releases/download/v3.2.4/coherence-operator.yaml $ helm repo add coherence https://oracle.github.io/coherence-operator/charts $ helm repo update $ helm install –namespace <namespace> coherence coherence/coherence-operator $ kubectl create -f example-cluster-storage.yaml
  31. <Namespace> coherence-ns1 Coherence Operatorのトポロジの概要 Copyright © 2021, Oracle and/or its

    affiliates 31 <Service> storage-a-metrics <Service> client-a-metrics cluster-a <StatefulsSet> storage-a <Pod> storage-a-0 <Pod> storage-a-1 <Pod> storage-a-2 <StatefulsSet> client-a <Pod> client-a-0 <Pod> client-a-1 <StatefulsSet> proxy-a <Pod> proxy-a-0 <Pod> proxy-a-1 <Service> proxy-a-metrics <Service> proxy-a-proxy Service Monitor scrape Coherenceクラスタ外部からのアクセス Coherenceクラスタ 内部からのアクセス 各Coherenceインスタンスの Podがmetricsを提供 各metrics用のサービスを経由して Service Monitor経由でスクレイピング ロール (サーバ、クライアント、etc) ごとの StatefulSetとしてデプロイされる Sidecarコンテナからログ転送 transfer
  32. Coherence キャッシュ・サーバのデプロイとスケール・アウト & データ再配置の確認 Examples – Coherence Deployment Example https://oracle.github.io/coherence-

    operator/docs/latest/#/examples/021_deployment/README • 代表的なデプロイ・パターンのチュートリアル • キャッシュ・サーバのみ、Proxyを追加したクラスタ外からのアクセス、etc. Management Diagnostics – Using VisualVM https://oracle.github.io/coherence-operator/docs/latest/#/docs/management/030_visualvm • VisualVM からのCoherence接続のチュートリアル Coherence Operator デモ Copyright © 2021, Oracle and/or its affiliates 32
  33. デモ環境の構成の概要 Copyright © 2021, Oracle and/or its affiliates 33 Oracle

    Cloud Infrastructure (Phoenix) AD 1 VCN AD 2 AD 3 Public Subnet DRG Object Storage Private Subnet Private Subnet OKE Endpoint Worker Node #1 Worker Node #2 Worker Node #3 Console OCIR OKE JMXMPポートをSSHフォワード
  34. <Namespace> default デモ環境のトポロジの概要 (サーバのみをデプロイ) Copyright © 2021, Oracle and/or its

    affiliates 34 <Service> example-cluster-storage-jmx example-cluster <StatefulsSet> example-cluster-storage <Pod> example-cluster -storage-0 <Pod> example-cluster -storage-1 <Pod> example-cluster -storage-2 kubectl port-forward SSH port-forward metrics と同様に各Coherence インスタンスのJMXアクセスを提供
  35. デモ) キャッシュ・サーバを構成する場合の標準的なYAML記述例 Copyright © 2021, Oracle and/or its affiliates 35

    apiVersion: coherence.oracle.com/v1 kind: Coherence metadata: name: example-cluster-storage spec: cluster: example-cluster image: phx.ocir.io/orasejapan/sy_coherence/deployment-example:1.0.0 imagePullSecrets: - name: ocirsecret imagePullPolicy: Always replicas: 3 coherence: cacheConfig: storage-cache-config.xml metrics: enabled: true jvm: args: - -Dcoherence.management=all - -Dcoherence.management.remote=true - -Dcom.sun.management.jmxremote.ssl=false - -Dcom.sun.management.jmxremote.authenticate=false jmxmp: enabled: true port: 9099 memory: heapSize: 512m ports: - name: jmx port: 9099 - name: metrics Coherence カスタムリソース 利用するイメージCoherenceのイメージ クラスタ・サイズ キャッシュ構成ファイル metrics の有効化 JMXMPの有効化 インスタンスあたりのJVMヒープ Coherence クラスタ名
  36. デモ) デプロイされるKubernetesリソース (サーバのみ) Copyright © 2021, Oracle and/or its affiliates

    36 NAME READY STATUS RESTARTS AGE pod/example-cluster-storage-0 1/1 Running 0 4d2h pod/example-cluster-storage-1 1/1 Running 0 4d2h pod/example-cluster-storage-2 1/1 Running 0 4d2h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/example-cluster-storage-jmx ClusterIP 10.96.196.10 <none> 9099/TCP 4d2h service/example-cluster-storage-metrics ClusterIP 10.96.190.120 <none> 9612/TCP 4d2h service/example-cluster-storage-sts ClusterIP None <none> 7/TCP 4d2h service/example-cluster-storage-wka ClusterIP None <none> 7/TCP 4d2h service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 55d NAME READY AGE statefulset.apps/example-cluster-storage 5/5 4d2h キャッシュ・サーバ・ インスタンスごとのPod JMX 用のService metrics 用のService StatefulSet, WKA(※) 用のHeadless Service クラスタを構成するStatefulSet
  37. デモ) デプロイ&データ投入後のデータの配置の様子 Copyright © 2021, Oracle and/or its affiliates 37

  38. <Namespace> default デモ環境のトポロジの概要 (クライアントを追加でデプロイ) Copyright © 2021, Oracle and/or its

    affiliates 38 <Service> example-cluster-storage-jmx <Service> example-cluster-client-jmx example-cluster <StatefulsSet> example-cluster-storage <Pod> example-cluster -storage-0 <Pod> example-cluster -storage-1 <Pod> example-cluster -storage-2 <StatefulsSet> example-cluster-client <Pod> example-cluster -client-0 <Pod> example-cluster -client-1 kubectl port-forward SSH port-forward
  39. デモ) クライアントを構成する場合の標準的なYAML記述例 Copyright © 2021, Oracle and/or its affiliates 39

    apiVersion: coherence.oracle.com/v1 kind: Coherence metadata: name: example-cluster-client spec: cluster: example-cluster image: phx.ocir.io/orasejapan/sy_coherence/deployment-example:1.0.0 imagePullSecrets: - name: ocirsecret imagePullPolicy: Always replicas: 2 coherence: cacheConfig: storage-cache-config.xml storageEnabled: false metrics: enabled: true jvm: args: - -Dcoherence.management=all - -Dcoherence.management.remote=true - -Dcom.sun.management.jmxremote.ssl=false - -Dcom.sun.management.jmxremote.authenticate=false jmxmp: enabled: true port: 9099 memory: heapSize: 512m ports: - name: jmx port: 9099 - name: metrics strageEnabled = false (クライアント) サーバとは異なるロール (=クライアント) を指定 同じクラスタを指定
  40. デモ) デプロイされるKubernetesリソース (クライアント含む) Copyright © 2021, Oracle and/or its affiliates

    40 NAME READY STATUS RESTARTS AGE pod/example-cluster-client-0 1/1 Running 0 53m pod/example-cluster-client-1 1/1 Running 0 53m pod/example-cluster-storage-0 1/1 Running 0 4d4h pod/example-cluster-storage-1 1/1 Running 0 4d4h pod/example-cluster-storage-2 1/1 Running 0 4d4h NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/example-cluster-client-jmx ClusterIP 10.96.131.59 <none> 9099/TCP 53m service/example-cluster-client-metrics ClusterIP 10.96.1.161 <none> 9612/TCP 53m service/example-cluster-client-sts ClusterIP None <none> 7/TCP 53m service/example-cluster-client-wka ClusterIP None <none> 7/TCP 53m service/example-cluster-storage-jmx ClusterIP 10.96.196.10 <none> 9099/TCP 4d4h service/example-cluster-storage-metrics ClusterIP 10.96.190.120 <none> 9612/TCP 4d4h service/example-cluster-storage-sts ClusterIP None <none> 7/TCP 4d4h service/example-cluster-storage-wka ClusterIP None <none> 7/TCP 4d4h service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 55d NAME READY AGE statefulset.apps/example-cluster-client 3/3 53m statefulset.apps/example-cluster-storage 3/3 4d4h クライアントのインスタンスのPod サーバとは異なるサービス サーバとは異なるStatefulSet
  41. デモ) スケール・アウト( 3 → 5 )後のデータの配置の様子 Copyright © 2021, Oracle

    and/or its affiliates 41
  42. Oracle Coherence 14.1.1.0: https://docs.oracle.com/cd/F32751_01/coherence/14.1.1.0/index.html Coherence Community Edition:https://coherence.community/ • GitHub:https://github.com/oracle/coherence Coherence

    Operator • ドキュメント:https://oracle.github.io/coherence- operator/docs/latest/#/docs/about/01_overview • GitHub:https://github.com/oracle/coherence-operator Oracle Coherence 参考情報 Copyright © 2021, Oracle and/or its affiliates 42
  43. Copyright © 2021, Oracle and/or its affiliates 43 第二部 Helidon

    アップデート
  44. Helidon Update Oracle Cloud Hangout Cafe Tadahisa Kotegawa Senior Director,

    Solutions Architect Oracle Corporation Japan December 1st, 2021
  45. 自己紹介 45 古手川 忠久 日本オラクル株式会社 ソリューションアーキテクト本部 デブサミ2020 セッションレポート 読んで下さい! https://codezine.jp/article/detail/12054

    [CodeZine] これからのマイクロサービスに必要な最新技術 が凝縮した「Helidon」を徹底解説 @tkotegaw tkote oracle-japan @tkote Copyright © 2021, Oracle and/or its affiliates
  46. slideshare.net (オラクルエンジニア通信) Helidon に関する過去のセッション Copyright © 2021, Oracle and/or its

    affiliates 46 OCHaCafe Season 2 #4 - Cloud Native時代のモダンJavaの世界 クラウド・ネイティブ時代に最適なJavaベースの マイクロサービス・フレームワーク ~ Helidonの実力を見極めろ
  47. 1. Helidon のおさらい 2. Helidon アップデート情報 3. Helidon 注目新機能紹介 4.

    Helidon の監視 – OCI APM & Java Tracer Agenda Copyright © 2021, Oracle and/or its affiliates 47
  48. Helidon のおさらい Copyright © 2021, Oracle and/or its affiliates 48

  49. OracleがホストするOSSプロジェクト • GitHubでソースコードを公開:https://github.com/oracle/helidon • Helidonの商用サポートはWebLogic Server/Coherenceのサポート契約に含まれる マイクロサービスアプリケーションが必要とする機能(Webサーバ/コンフィギュレーション/セキュリティ)を提供するJavaライブラリの集合体 • 単体のJVMとして動作し、アプリケーションサーバ不要 •

    必要なコンポーネントを追加して拡張することも可能 2つのプログラミングモデルを提供 • Helidon MP:宣言的記法(Java EE開発者フレンドリー) • Helidon SE:関数的型記法 マイクロサービスの監視に適合 Project Helidon (helidon.io) Copyright © 2021, Oracle and/or its affiliates 49
  50. Helidonのポジショニング 50 Full Stack MicroProfile based Microframeworks Helidon MP Helidon

    SE Copyright © 2021, Oracle and/or its affiliates
  51. • PolyglotなMicroservices環境の中で協調して動く (=Microservices各種仕様に準拠する、 Microservices の各種デザインパターンを実装する) Javaアプリケーションの開発に必要な機能を、フレームワークとして規定したもの。 • 開発者はビジネスロジックの実装に集中でき、効率的な開発ができる。 • 基盤となる実装は、MicroProfileプロバイダの品質維持・向上を期待できる。

    Eclipse MicroProfile 51 OpenMetrics OpenTracing OpenAPI Circuit Breaker Bulk Head Health Check Copyright © 2021, Oracle and/or its affiliates Microservicesの 各種仕様に準拠する Microservicesの 各種デザインパターンを 実装する
  52. Helidon 2.4 Helidon MP を構成するコンポーネント Copyright © 2021, Oracle and/or

    its affiliates 52 MP Config Metrics Health Check Fault Tolerance JWT Auth JAX-RS CDI JSON-P / B Open API Open Tracing REST Client SE 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でも利用可)
  53. 以下の Oracle 製品に対する Oracle サポート契約に含まれる • Oracle WebLogic Server Standard

    Edition • Oracle WebLogic Server Enterprise Edition • Oracle WebLogic Suite • Oracle Coherence Enterprise Edition • Oracle Coherence Grid Edition • Oracle Verrazzano Enterprise Container Platform サブスクリプション コミュニティ・サポートに加えて以下のサポートを提供 • My Oracle Support (MOS) へのアクセス • Oracle WebLogic Server と Oracle Coherence に対して提供されるサポート・レベルと同等の Oracle による 24x7 サポート Bug とエンハンスメントへの修正はコミュニティ・サポートと同様 Helidonのサポートについて – Oracle サポート Copyright © 2021, Oracle and/or its affiliates 53 *詳細は My Oracle Supportより 「Oracle 商用提供の Helidon に対する Oracle サポートについて (Doc ID 2657182.1)」を参照ください
  54. https://oracle-japan-oss-docs.github.io/helidon/docs/v2/ Helidon 日本語ドキュメント Copyright © 2021, Oracle and/or its affiliates

    54
  55. Helidon アップデート情報 Copyright © 2021, Oracle and/or its affiliates 55

  56. 2.0.0 (2020年6月) 主要新機能 • MicroProfile Reactive Streams Operators • MicroProfile

    Reactive Streams Messaging • GraalVM native images for Helidon MP • jlink custom runtime images • Jakarta WebSocket • CORS • Move to Java 11 APIs • Move to Jakarta EE APIs • Improved discovery and handling of JAX-RS applications • New Helidon SE MediaSupport API • The Helidon CLI アーリーアクセス • Helidon SE reactive Web Client • Helidon SE reactive DB Client • Helidon SE Reactive Streams • Helidon SE Reactive Messaging 機能アップデート まとめ Copyright © 2021, Oracle and/or its affiliates 56 experimental experimental
  57. 2.1.0 以降 2.1.0 (2020年10月) • MicroProfile 3.3 support • New

    Helidon SE Fault Tolerance 2.2.0 (2020年12月) • Micronaut extension support • Graph QL Support • Loom support in Helidon MP 2.3.0 (2021年5月) • HashiCorp Vault support • Oracle OCI Vault support • Oracle OCI Object Storage support • Neo4J support • Micrometer metrics support • gRPC native image support • Reloadable WebServer TLS certificates • New metric: Exemplars • Scheduling feature • Performance improvements for JAX-RS 機能アップデート まとめ Copyright © 2021, Oracle and/or its affiliates 57 experimental experimental experimental experimental experimental experimental experimental experimental
  58. 2.4.0 2.4.0 (2021年11月) • MicroProfile Long Running Actions (LRA) •

    Configuration profiles • MicroStream integration • OCI ATP integration and OCI service health checks • Oracle UCP 21.3 native image support • JEP 290 serialization filtering checks • OpenID Connect improvements • Java 17 support • Numerous dependency upgrades 機能アップデート まとめ Copyright © 2021, Oracle and/or its affiliates 58 experimental
  59. MicroProfile Reactive Streams (MP) @outgoing, @incoming アノテーションを使って 非同期メッセージングの開発を簡易化 Connector を提供

    • Kafka, JMS, Oracle AQ リアクティブ・プログラミングの基礎からMicoProfileの 仕様まで詳説しています • Reactive Streams / Flow • MicroProfile Reactive Streams Operators • MicroProfile Reactive Streams Messaging • Connector アーキテクチャ • Kafka Connector 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 59 https://speakerdeck.com/oracle4engineer/reactive-java
  60. GraalVM native images for Helidon MP 作成方法はSEと同様 • 環境変数 GRAALVM_HOME

    を設定 • ビルド: mvn clean package -Pnative-image → target ディレクトリにネイティブ・イメージが作成される 全てのコンポーネントがネイティブ・イメージに対応している訳ではないので注意(ドキュメント参照) 未対応のコンポーネント • EclipseLink • Hibernate • JTA • REST Client • Provider: Google Login • Provider: IDCS Role Mapper 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 60
  61. MP Config 2.0 – Config Profile 複数の設定プロファイルが定義可能となる(=切り替えられる) mp.config.profile プロパティでプロファイルを指定 •

    環境変数や -Dmp.config.profile Java起動オプションでも指定可能 (=MP Configの機能) プロファイルが指定された場合、デフォルトの値を上書きする (1)プロパティ・レベル → 書式: %<profile name>.<original property name> (2)設定ソース・レベル → 同じプロパティがデフォルト設定ファイルにあった場合上書きする 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 61 project.name=local %dev.project.name=osaka %testing.project.name=ashburn %prod.project.name=tokyo META-INF/microprofile-config.properties META-INF/microprofile-config-dev.properties META-INF/microprofile-config-testing.properties META-INF/microprofile-config-prod.properties mp.config.profile = testing の場合 project.name = ashburn となる mp.config.profile = dev の場合 microprofile-config.properties をロードした後にさらに microprofile-config-dev.properties をロードする(同じプロパティは上書きされる)
  62. 活用方法の一例… ローカルでテストして Git Public Repository にパブリックな情報だけを push MP Config 2.0

    – Config Profile Copyright © 2021, Oracle and/or its affiliates 62 # APM Java Tracer tracing.data-upload-endpoint=<dev/test環境の値> tracing.private-data-key=<dev/test環境の値> # APM Java Tracer #tracing.data-upload-endpoint #tracing.private-data-key miroprofile-config.properties (push したい状態) miroprofile-config-dev.properties (push したくない情報入り) miroprofile-config-dev.properties .gitignore export mp_config_profile=dev 開発環境で環境変数をセット (アンダーバーは”.”の代替になる) mvn test ... 開発環境用のセッティングでビルド&テスト (devも読み込まれる) git add . ; git push ... git add & push この時、.gitignore のフィルタにより miroprofile-config-dev.properties はリポジトリに push されない 実行時のプロパティ値は環境変数 or Javaシステムプロパティで設定可能 • export • java –D • docker build (Dockerfile), docker run • Kubernetes manifest
  63. GraphQL (graphql.org) (MP) GraphQL = APIのための作られたオープンソースのデータクエリおよび操作言語 MicroProfile GraphQL (https://github.com/eclipse/microprofile-graphql) •

    「コードファースト」アプローチを使用 • 開発者はコードとスキーマの同期を手動で維持する必要がない • /graphql/schema.graphql でスキーマを取得 • Javaのコードにアノテーションを付加するとスキーマが生成される 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 63 @GraphQLApi @ApplicationScoped public class CountryGraphQLApi { @Query public Country getCountry(@Name("countryId") int countryId) {} @Mutation public int deleteCountry(@Name("countryId") int countryId) {} } type Query { country(countryId: Int!): Country } type Mutation { deleteCountry(countryId: Int!): Int! } curl -X POST -H "Content-Type: application/json" localhost:8080/graphql -d '{"query":"query{country(countryId:1){countryName}}"}' curl -X POST -H "Content-Type: application/json" localhost:8080/graphql -d '{"query":"mutation{deleteCountry(countryId:86)}"}' コード スキーマ /graphql/schema.graphql API Speakerdeckで資料公開中!
  64. Scheduling (SE & MP) Helidon SE → ScheduledConsumerをラムダ式で実装 • 固定レート型

    • Cron型 Helidon MP → メソッドにアノテーションをつける • 固定レート型 • Cron型 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 64 固定レート型とCron型の二種類のスケジューリングを提供 Scheduling.fixedRateBuilder() .delay(10) .initialDelay(5) .timeUnit(TimeUnit.MINUTES) .task(inv -> log(inv.description()) .build(); Scheduling.cronBuilder() .expression("0 15 8 ? * *") .task(inv -> log(inv.description()) .build(); @FixedRate(initialDelay = 5, value = 10, timeUnit = TimeUnit.MINUTES) public void method(FixedRateInvocation inv) { log(inv.description()); } @Scheduled("0 15 8 ? * *") public void method(FixedRateInvocation inv) { log(inv.description()); } void run(I invocation) void run(I invocation)
  65. MicroProfile Long Running Actions (LRA) 分散環境での一貫性を保証するための手法 マイクロサービスにおけるSAGA pattern(非同期通信、分散ロックなし、補償アクションを使ったリカバリ) • XAトランザクションの不都合(サービス間に強力な結合が導入される)を解消するための新たなアプローチ

    OASIS WS-LRAが起源 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 65 https://download.eclipse.org/microprofile/microprofile-lra-1.0-M2/ サービス1 サービス2 コーディネーター
  66. MicroProfile Long Running Actions (LRA) – Annotation, LRA Coordinator アノテーションを使ったプログラミング・モデル

    LRAの一連のライフサイクル処理を Annotation を使って 定義する LRA Coordinator がトランザクションの状態を管理 • すべてのLRAトランザクションを追跡し、LRAトランザク ションがキャンセルまたは完了したときに参加者の補 償RESTエンドポイントを呼び出す • Narayana coordinator互換の Helidon LRA Coordinatorを提供 2.0.0以降の注目新機能紹介 Copyright © 2021, Oracle and/or its affiliates 66 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(..
  67. Helidon の監視 – OCI APM & Java Tracer Copyright ©

    2021, Oracle and/or its affiliates 67
  68. アプリケーションの監視を容易に実現 分散トレーシング • OpenTracing、Open Telemetry互換 • APM Java Agent &

    Tracer (Java ライブラリ) エンドユーザー監視 • ブラウザから end-to-end のパフォーマンスを把握 • APM Browser Agent (Javascript) 合成モニタリング • 様々な地理的位置からシナリオベースでスケジュール された監視を実行 サーバー監視 • 多様なトランザクションメトリックによるサーバーのパ フォーマンス、可用性、負荷の分析 ダッシュボード Oracle Cloud Infrastructure Application Performance Monitoring (APM) Copyright © 2021, Oracle and/or its affiliates 68 Application Performance Monitoring エンドユーザー 性能監視 アプリケーション 監視 本日デモ 本日デモ 本日デモ
  69. 分散トレーシング:概要 分散したシステムで構成されているマイクロサービスで、 リクエストの軌跡をEnd to Endで可視化 • 全てのトランザクション(トレース)の全ての処理(スパン) を確認することが可能 • トレースに関する以下の情報を参照することが可能

    - 低速のトランザクション - エラーのあるトランザクション - サーバー・データセンター・バージョンなどの特定のリソースを使用する トランザクション • スパンに関する以下の情報を参照することが可能 - ページの読み込み - Ajax呼出し - サービスリクエスト - JDBC - HTTPアウトバウンド呼出し - 応答時間 etc Application Performance Monitoring Copyright © 2021, Oracle and/or its affiliates 69 ※スパン:ひとつのサービス内の処理 ※トレース:リクエストの開始から終了までの全てのスパン
  70. サーバー監視 アプリケーション・サーバーのヒープおよびCPUメトリックに 関する情報を収集 • メトリックはAPMダッシュボードおよびMonitoringサービスから 表示することが可能 - 平均ページ読み込み時間とApdex - リクエストサービス毎にグループ化された平均レスポンス時間

    - ロケーションごとのページグループ単位のリクエストレート - サードパーティサービスの呼出しのカウントと最大応答時間 • Monitoringサービス同様、カスタムメトリックの作成も可能 • 以下のアプリケーション・サーバーをサポート - WebLogic 10.3.6, 12.x, 14.x - Tomcat 6,7,8,9 - TomEE 1.7,7,8 - Springboot 1.x, 2.x Application Performance Monitoring Copyright © 2021, Oracle and/or its affiliates 70
  71. エンドユーザー監視 エンドユーザーのリアルな反応を可視化し、優れたエンド ユーザー・エクスペリエンスの提供を支援 • Javascriptのブラウザーエージェントによる監視 - WebページにJavascriptを埋め込むことで監視が可能 - 個人識別可能情報(PII)の収集を防止するルールセットを構成可 •

    各ユーザーセッションをEnd to Endで追跡 • Webアプリケーション、およびユーザー・エクスペリエンスの パフォーマンスを把握 - Apdexスコア - レスポンス時間 - スクリプト・エラー - Ajaxコールとエラー • Webアプリケーションの速度とパフォーマンスを測定することで、 ユーザー・エクスペリエンスを向上させるための修正処理を実行 が可能 Application Performance Monitoring Copyright © 2021, Oracle and/or its affiliates 71
  72. OpenTracing互換の分散トレーシングに加えてサーバーメトリクス/リソース収集をサポート OCI Application Performance Monitoringでは、APM専用のJavaライブラリを提供 • アプリケーションの変更無しで、分散トレーシングやメトリクス監視が可能 OCI APM Java

    Tracer を使ったアプリケーションのモニタリング Copyright © 2021, Oracle and/or its affiliates 72 分散トレーシング : スパン 分散トレーシング : トポロジー サーバーリソースのモニタリング アラートの設定
  73. pom.xml に Dependency と Repository を追加 (or Jaeger/Zipkin のDependency と入れ替え)

    microprofile-config.properties に設定を追加 (エンドポイント、データキー) Dependencyの変更だけで(=ソース変更なしで)トレーシングモニタを切り替え可 (APM⇔Jaeger⇔Zipkin) Helidon 向け APM Java Agent & Tracer Copyright © 2021, Oracle and/or its affiliates 73 <dependencies> <dependency> <groupId>com.oracle.apm.agent.java</groupId> <artifactId>apm-java-agent-tracer</artifactId> <version>[1.0.1389,)</version> </dependency> <dependency> <groupId>com.oracle.apm.agent.java</groupId> <artifactId>apm-java-agent-helidon</artifactId> <version>[1.0.1389,)</version> </dependency> </dependencies> <repositories> <repository> <id>oci</id> <name>OCI Object Store</name> <url>https://objectstorage.us-ashburn-1.oraclecloud.com/n/idhph4hmky92/b/prod-agent-binaries/o</url> </repository> </repositories> microprofile-config.properteis に以下の項目を設定 (OCI APMへの接続情報) tracing.name=<名前> tracing.data-upload-endpoint=<エンドポイントURL> tracing.private-data-key=<データ・キー> # サーバメトリクスを収集 tracing.collect-metrics=true/false # サーバリソースを収集 tracing.collect-resources= true/false Maven Central Repository ではないので注意
  74. トレース情報と併せてK8s Cluster, Node, Podの情報を取得 デモ: Helidon & APM Java Tracer

    を使った Pod間APIコールのトレーシング Copyright © 2021, Oracle and/or its affiliates 74 Pod mp-0 Pod mp-1 Pod mp-2 Pod mp-3 OKE Application Performance Monitoring Java Tracer Java Tracer Java Tracer Java Tracer Node #1 Node #2 Node #3 エラー 外部API 外部API /var/log/containers/* /var/log/containers/* /var/log/containers/* Cloud Agent Cloud Agent Cloud Agent OCI Logging OCI Logging カスタムログ OCI APM トレーシング APM トレーシング スパン詳細 本日は トピック外 APM Browser Agent curl
  75. https://github.com/oracle-japan/ochacafe-microprofile-demo Helidon の色々な機能を試すことができます。 デモのソース Copyright © 2021, Oracle and/or its

    affiliates 75
  76. Appendix Copyright © 2021, Oracle and/or its affiliates 76

  77. ネームスペース: oracle_apm_monitoring APM Java Agent が提供するメトリクス Copyright © 2021, Oracle

    and/or its affiliates 77 METRIC DESCRIPTION Unit GcAfterOldCommitted 古い世代のガベージ・コレクション後にコミットされたヒープ。 BYTES GcAfterOldUsed 古い生成ガベージ・コレクション後に使用されたヒープ。 BYTES GcAfterYoungCommitted 若い世代のガベージ・コレクション後にコミットされたヒープ。 BYTES GcAfterYoungUsed 若い世代のガベージ・コレクション後に使用されるヒープ。 BYTES GcOldTotalCount JVMが起動してからの古い世代のガベージ・コレクションの数。 – GcOldTotalTime JVMの起動後に古い世代のガベージ・コレクションに使用された合計時間。 ミリ秒 GcYoungTotalCount JVMの起動後の若い世代のガベージ・コレクションの数。 – GcYoungTotalTime JVMの起動後に若い世代のガベージ・コレクションに使用された合計時間。 ミリ秒 HeapCommitted ヒープ使用量に割り当てられている現在のシステム・メモリー。 BYTES HeapUsed 現在のヒープ・メモリー使用率。この値は、HeapCommitted値よりも小さいか、等しくなる。 BYTES NonHeapCommitted ヒープ以外の使用量に割り当てられている現在のシステム・メモリー。 BYTES NonHeapUsed 現在の非ヒープ・メモリー使用率。この値は、NonHeapCommitted値よりも小さいか、等しくなる。 BYTES ProcessCpuLoad JVMプロセスの現在のCPU負荷。 – ProcessCpuTime JVMプロセスの全CPU時間。 ナノ秒 SystemCpuLoad システムの現在のCPU負荷。 – SystemPhysicalMemoryFree システムに残っている空きメモリー。 BYTES SystemSwapFree システムに残っている空きスワップ・ディスク領域。 BYTES SystemVirtualMemoryCommitted JVMプロセスのコミットされた仮想メモリー。 BYTES ThreadBlockedCount JVM内で「BLOCKED」状態のスレッドの数。 – ThreadCount JVM内のスレッドの合計数。 – ThreadDeadlockCount JVM内でデッドロックされたスレッドの数。 – ThreadTimedWaitingCount JVMのTIMED_WAITING状態のスレッドの数。 – ThreadWaitingCount JVM内の"WAITING"状態のスレッドの数。 – TotalTraceCount 評価されたトレースの合計数。 – TotalSpanCount 評価されたスパンの合計数。 – TotalTraceSampledCount サンプリングされたトレースの合計数。 – TotalSpanSampledCount サンプリングされたスパンの合計数。 – Uptime JVMが開始してからの経過時間。 ミリ秒 WeblogicStuckThreadCount 定義された期間(デフォルトでは10分)より長く連続して動作しているスレッドの数。これは、Oracle WebLogicサーバーに固有です。 –
  78. ネームスペース: oracle_apm_monitoring Category Demension Kubernetes KubernetesNamespace KubernetesNodeName KubernetesPodAnnotations KubernetesPodLabels KubernetesPodName

    Oracle Cloud Infrastructure OciAvailabilityDomain OciCompartmentId OciComputeShape OciDisplayName OciFaultDomain OciInstanceId OciRegion Container Engine for Kubernetes (OKE) OkeClusterId OkeClusterLabel OkeCompartmentName OkeKubernetesVersion OkeNodePoolId OkeNodepoolLabel OkeTenancyId Operating System OsAvailableProcessors OsName OsVersion APM Java Agent で利用可能なディメンション Copyright © 2021, Oracle and/or its affiliates 78 Category Demension Application Server Appserver AppserverDisplayPort AppserverDomainName AppserverId AppserverName AppserverPorts AppserverServerName AppserverType AppserverVersion Generic ApmVersion DisplayName ServiceInstanceId ServiceName Host HostAddress HostAddresses Hostname HostnameCanonical Hostnames Java Virtual Machine (JVM) ProcessId VmName VmVendor VmVersion WorkingDirectory
  79. Copyright © 2021, Oracle and/or its affiliates 79 第三部 WebLogic

    Kubernetes Toolkit 概説
  80. Oracle WebLogic Kubernetes Toolkit Oracle Cloud Hangout Cafe Kyotaro Nonaka

    Solutions Architect Oracle Corporation Japan December 1st, 2021
  81. • 野中 恭大郎 • 日本オラクル ソリューションアーキテクト本部 • 前職はECパッケージのアプリエンジニア • OCHaCafe出場6回目

    ~近況~ • また太ってきたので今度はジム通いを始めました • 課金することで自分に枷をする • 弟の結婚式で地元の九州に行ってきました • 行きの飛行機で珍しいぐらい綺麗に富士山が見れた! 自己紹介 Copyright © 2021, Oracle and/or its affiliates 81 @non_kyon
  82. 1. WebLogic Kubernetes Toolkitとは? 2. ユースケースから見るToolkitの役割 3. Toolkit詳細 4. デモ

    アジェンダ Copyright © 2021, Oracle and/or its affiliates 82
  83. ドメイン/管理サーバ/管理対象サーバ/クラスタ WebLogic Serverの基本的な概念 Copyright © 2021, Oracle and/or its affiliates

    83 WebLogic ドメイン 管理対象 サーバ#1 管理 サーバ 管理対象 サーバ#2 管理対象 サーバ#3 管理対象 サーバ#4 管理対象 サーバ#5 管理対象 サーバ#6 管理コンソール (Web) WebLogic Scripting Tool アプリケーション WebLogicドメイン WebLogicシステムの管理単位 管理サーバ WebLogic ドメイン内のサーバ構成やアプリケーションの配置を管理する機 能を提供するサーバ 管理対象サーバ アプリケーションを稼働させるためのサーバ クラスタ 複数の管理対象サーバによる可用性構成を提供するグループ Node Manager Node Manager Node Manager Node Manager Node Manager Node Manager ノードマネージャー ※サーバの起動/停止などを行う WebLogic クラスタ #1 WebLogic クラスタ #2
  84. WebLogicワークロードのライフサイクル全てをカバーするOSSツール群 Oracle WebLogic Kubernetes Toolkit Copyright © 2021, Oracle and/or

    its affiliates 84 Oracle WebLogic Kubernetes Operator Kubernetes上におけるWebLogic ド メインの作成/構成/管理を実現 Oracle WebLogic Deploy Tooling 既存のドメイン構成やアプリを抽出し、 VMやKubernetes上などの異なる環境 への移行を実現 Oracle WebLogic Image Tool WebLogic Dockerイメージの構築/パッ チ適用/更新を実現 WebLogic Server Remote Console あらゆる場所で稼働するWebLogicドメ インを管理するための軽量なコンソール・ アプリケーション Toolkit UI WebLogic Toolkitの操作をUIベースで 提供 Oracle WebLogic Monitoring Exporter WebLogic環境のメトリクスを Prometheusの形式でエクスポートし、ド メインの監視を実現 Oracle WebLogic Logging Exporter WebLogic環境のログをエクスポートし、 Elastic Stackとの統合を実現
  85. Toolkitそれぞれの大まかな役割 WebLogic Kubernetes Tookit Copyright © 2021, Oracle and/or its

    affiliates 85 On-Premis/Cloud WebLogic Server Managed Server pod WLS Admin Server Sidecar WLS Managed Server Jar アプリ モデル化 Oracle WebLogic Deploy Tooling Oracle WebLogic Image Tool コンテナ化 Toolkit UI デプロイ Oracle WebLogic Monitoring Exporter Oracle WebLogic Logging Exporter Oracle WebLogic Kubernetes Operator
  86. ユースケース: 移行 1. Oracle WebLogic Deploy Tooling (WDT)がアプリと構成を抽出 2. Oracle

    WebLogic Image Tool (WIT)がJDKとWebLogic Serverをコンテナとしてパッケージング ・WITを利用せずWebLogic Server for OCI(VM/BMベース)にWDTを利用したデプロイも可能 ・適用モデルによって、アプリやアプリ構成も含めてパッケージング可能 3. Oracle WebLogic Kubernetes Operator (WLS Operator)が動作するOKEクラスタ上にデプロイ WebLogic Kubernetes Tookitの役割 Copyright © 2021, Oracle and/or its affiliates 86 On-Premis/Cloud WebLogic Server アプリ ドメイン構成 WDT_Model.yaml (メタデータ) WDT 1. アプリ抽出/構 成情報の変換 アプリ アーカイブ(.zip) WIT 2. コンテナ作成 WLS ドメイン構成 アプリ WLS Admin Server WLS Managed Server WLS Operator アプリ WLS Managed Server アプリ 3. デプロイ 2’. デプロイ WDT WLS Admin Server WLS Managed Server アプリ WLS Managed Server アプリ WebLogic Server for OCI WebLogic Server for OKE
  87. WDT ユースケース: CI/CD, GitOps WDTモデル、WIT、WLS Operatorを活用し、Java EEアプリのCI/CD環境を構築できる 1. ソースコードの変更、ドメインモデルの変更をコミット 2.

    JavaEEアプリケーションのビルド 3. ドメインのモデルであるWDTモデルを取得(WDTで検証が可能) 4. WITを用いてアプリとドメインモデルをコンテナ化 5. コンテナレジストリにpush WebLogic Kubernetes Tookitの役割 Copyright © 2021, Oracle and/or its affiliates 87 1. コミット 2. ビルド リポジトリ アプリ WDT_Model.yaml (メタデータ) WIT WLS ドメイン構成 アプリ アプリ構成 5. push コンテナ レジストリ 4. コンテナ化 WLS Operator WebLogic Domain pod1 AS pod2 MS pod3 MS Domain Custom Resource CI/CD パイプライン 3.ドメインモ デルの変更
  88. Managed Server pod ユースケース: 管理・運用 • Oracle WebLogic Kubernetes Operator

    (WLS Operator)上に WebLogicクラスタをデプロイ • Oracle WebLogic Monitoring ExporterがPrometheusにメトリクスを出力 • デプロイ方法はWAR/サイドカー(Operator v3.2以降)から選択 • モニタリングの用途としては、OCI Application Performance Monitoring が利用可能 • APM Java AgentをWLSにインストール • Oracle WebLogic Logging Exporterが Elasticsearchにログをプッシュ • ローカルのWebLogic Server Remote Consoleから管理コンソールにアクセス • 他のWebLogic サーバ/クラスタの管理を1つの Remote Consoleに集約 WebLogic Kubernetes Tookitの役割 Copyright © 2021, Oracle and/or its affiliates 88 WLS Admin Server WLS Operator Monitoring Exporter Remote Console WLS Managed Server Logging Exporter(.jar) アプリ push push APM Java Agent push Application Performance Monitoring
  89. WebLogic環境のKubernetesによるオーケストレーション運用・管理を実現するプラグイン Oracle WebLogic Kubernetes Operator (WLS Operator) Copyright © 2021,

    Oracle and/or its affiliates 89 WebLogic環境のIaCを実現 • WebLogicのDockerイメージをベースにKubernetes環境に WebLogicドメイン環境をプロビジョニング • YAMLファイルに記述したWebLogicドメイン構成の定義を適用 するだけで自動的にWebLogicドメイン環境を構成 • YAMLファイルをバージョン管理することでWebLogicドメイン環 境をImmutableな再現性の高い環境として管理可能 Kubernetesへの管理の一本化 • 標準的なKubernetesのコマンドのみでWebLogic環境を運用 • 他のコンテナ・ベースのアプリケーションと運用方式を統一すること で効率よくクラウド・アプリケーションを運用管理 WLS AP WLS AP WLS Admin Operator Framework WebLogic Operator • Domain: A • Managed x 2 • Data Source: … apply WLS AP WLS AP WLS Admin Operator Framework WebLogic Operator WLS AP • Domain: A • Managed x 3 • Data Source: … apply
  90. Domain in PV (Persistent Volume) モデル概要 • WebLogicベースイメージのみコンテナ化 • WebLogicの構成とアプリケーションはPV上に配置

    • WebLogicの構成変更はWLST、管理コンソール、 もしく はConfigMapによる上書きによって行う ユースケース • Kubernetes上でWebLogicのIaC運用を実現 WLS Operatorの適用モデル Copyright © 2021, Oracle and/or its affiliates WLS WLS Operator Framework WLS Operator WLS Admin WLS 1. build 2. push 3. apply WLS domain.yaml create-domain-inputs.yaml AP AP 4. deploy PV 管理コンソール /WLST 90 WLS
  91. Domain in Image モデル概要 • WebLogicベースイメージ/WebLogicの構成/アプリケー ションをセットでコンテナ化 • セットでコンテナ化したコンテナイメージをKubernetes上に デプロイ

    • WebLogicの構成変更はコンテナイメージの更新か ConfigMapによる上書きによって行う ユースケース • コンテナベースのCI/CD運用の実現 WLS Operatorの適用モデル Copyright © 2021, Oracle and/or its affiliates WLS AP WLS AP WLS AP Operator Framework WLS Operator WLS Admin WLS AP 1. build 2. push 3. apply WLS AP domain.yaml create-domain-inputs.yaml 91
  92. Model In Image モデル概要 • WebLogicベースイメージをコンテナ化 • WebLogicの構成(WDTモデルファイル)をどう配置するかは 以下の選択肢 •

    WebLogicベースイメージに含める • Auxiliary Imageとして分けてイメージ化 • ConfigMapとして保持 • アプリケーションをどう配置するかは以下の選択肢 • WebLogicベースイメージに含める • Auxiliary Imageとして分けてイメージ化 ユースケース • コンテナベースのCI/CD運用の実現 • Auxiliary Imageを活用した柔軟なコンテナの構成 WLS Operatorの適用モデル Copyright © 2021, Oracle and/or its affiliates WLS AP WLS AP Operator Framework WLS Operator WLS Admin WLS AP 1. build 2. push 3. apply WLS AP domain.yaml wdt-model.yaml 92 WLS AP ※ WLS/WDTモデル/アプリケーションをまとめてコンテナ化するパターン
  93. Model in Imageにおけるコンテナは柔軟に構成が可能 • WebLogicバイナリとJavaのみが含まれたイメージを WebLogic Imageとする • WDTモデルファイルやアプリケーションなどをAuxiliary Imageと

    してPodに含められる メリット • WebLogicバイナリのイメージと、アプリやモデルのイメージを分 けて管理できるため、それぞれのイメージをそれぞれのライフサイ クルで更新可能になる • 1つのWebLogic Imageを異なる複数のモデル構成で共有で きる Auxiliary Image Copyright © 2021, Oracle and/or its affiliates 93 アプリケーション Auxiliary Image その他のファイル WDTモデル OS WLS バイナリ WebLogic Image JDK パッチ OL 7-slim 分けて管理
  94. WebLogicドメイン構成の自動化を容易にするスクリプト・ツール 既存WebLogic環境のアプリケーション/構成を抽出 • オンプレミスのWebLogic環境やJava Cloud Serviceから構成情報 を抽出してメタデータ(YAML形式)に変換 • デプロイ済みのアプリケーションも同時に抽出 メタデータからドメイン構成を容易に再現

    • ドメインの全情報を異なるWebLogic環境にそのまま反映 • メタデータを編集してテンプレート化も可能 アプリケーションやドメイン構成の更新の同期 • 移行元の更新を移行先の環境に差分更新 • アプリケーションのデプロイのみの用途でも利用可能 Oracle WebLogic Deploy Tooling (WDT) Copyright © 2021, Oracle and/or its affiliates 94 resources: JDBCSystemResource: MyDataSource: Target: '@@PROP:myjcs.cluster1.name@@' JdbcResource: JDBCDataSourceParams: JNDIName: jdbc/generic1 JDBCDriverParams: DriverName: oracle.jdbc.OracleDriver URL: 'jdbc:oracle:thin:@//@@PROP:dbcs1.url@@' PasswordEncrypted: '@@PROP:dbcs1.password@@' Properties: user: Value: '@@PROP:dbcs1.user@@' oracle.net.CONNECT_TIMEOUT: Value: 5000 JDBCConnectionPoolParams: MaxCapacity: 50 appDeployments: Application: simpleear : SourcePath: wlsdeploy/applications/simpleear.ear Target: '@@PROP:myjcs.cluster1.name@@' ModuleType: ear Library: 'jsf#2.0': SourcePath: '@@WL_HOME@@/common/deployable-libraries/jsf-2.0.war' Target: '@@PROP:myjcs.cluster1.name@@' ModuleType: war
  95. WebLogic Scripting Tool (WLST)を介してYAMLファイルからドメイン構成を作成・更新 WLSTを間接的に利用してWebLogicドメイン構成とYAML形式のモデルをスクリプトで相互変換 • WLSTを利用してドメイン構成を取得しYAML形式のモデルとアプリケーション・アーカイブを抽出 • モデルを元にWLSTを利用してドメイン構成を作成・更新 •

    アプリケーション・アーカイブとモデルを元にWLSTを利用してアプリケーションをデプロイ WebLogic Deploy Tooling (WDT) の仕組み Copyright © 2021, Oracle and/or its affiliates 95 Source WebLogic Domain cluster JDBC #1 App #1 App #2 JDBC #1 Metadata Model (YAML/JSON) Application Archive WLST WLST Discover Domain Create/Update Domain Deploy Applications WLST App #1 App #2 Target WebLogic Domain cluster MS1 AS MS2 JDBC #1 App #1 App #2 JDBC #1 WDT WDT WDT 既存のWebLogicドメイン 反映先のWebLogicドメイン Metadata Model (YAML/JSON) MS1 AS MS2
  96. WebLogic Serverコンテナ運用の自動化を容易にするスクリプト・ツール WebLogic Serverコンテナイメージの作成 • JDKとWebLogicをインストールしたコンテナイメージの作成 • イメージ内にWebLogicドメインを作成 • カスタムファイルをイメージに内包可能

    既存のイメージを基に新しいイメージを作成 • JDKとOracle Homeのインストールのみも可能 既存のイメージにパッチを適用 • ドメインの作成/更新が可能 • アプリケーションの展開も可能 Oracle WebLogic Image Tool (WIT) Copyright © 2021, Oracle and/or its affiliates 96 $ imagetool rebase Docker Imageの 新規作成 Docker Imageの更新 既存Imageをベースにして Docker Imageの作成
  97. WebLogic Serverからメトリクスを出力する、2種類のPrometheus互換エクスポーター Oracle WebLogic Monitoring Exporter Copyright © 2021, Oracle

    and/or its affiliates 97 サーバにデプロイするWebアプリケーション • WARファイルに設定ファイルを直接含めることが可能 • 稼働中のシステムでもWebフォームを利用して設定変更することが可能 スタンドアロンプロセス(サイドカー) • Operator側にMonitoring Exporterセクションを追加後、PUTリクエスト (REST API)で設定ファイルを送信してプロセスを構成 • WLS Operator v3.2以降より使用可能
  98. WebLogic ServerのログとElastic Stackを統合するツール Oracle WebLogic Logging Exporter Copyright © 2021,

    Oracle and/or its affiliates 98 REST APIでElasticsearchにプッシュ REST APIでFluentd Aggregatorにプッシュ JSONフォーマットでファイルシステムに出力 • FluentdやLogstashによるログの収集と出力を可能に サーバーログ以外のログ出力 PLANNED PLANNED PLANNED
  99. 様々な場所で稼働するWebLogic Serverドメインを管理する軽量なコンソール WebLogic Server Remote Console Copyright © 2021, Oracle

    and/or its affiliates 99 どこでもインストールと実行が可能 • 軽量でモダンなアプリケーション • REST APIでWebLogic Serverを操作 複数ドメインの管理コンソールを集約 • 物理マシン/VM/Kubernetesなどプラットフォー ムを跨る管理の統一化 WebLogic Serverフットプリントを小さく • WebLogic Server “slim” インストーラを利用
  100. Toolkitの機能をUIベースで提供 Kubernetes上のWebLogic Serverライフサイクル管理を簡単にする • ドメイン情報の抽出 • ドメインモデルの編集 • イメージの作成/更新 •

    Operatorをプロビジョニング • ドメインをプロビジョニング • Ingressをプロビジョニング WebLogic Kubernetes ToolKit UI Copyright © 2021, Oracle and/or its affiliates 100
  101. ToolkitUIの操作や設定をかいつまんでご紹介 v1.0.0におけるToolkitUIの機能 • Project Setting • WKTプロジェクトの設定 • Model •

    モデルの検証 • Image • Imageの作成 • Imageのpush • Kubernetes • Kubernetes Clientの構成 • WebLogic Operatorのインストール • WebLogic Domain管理 • Ingress Controllerのインストール/更新 デモ: WebLogic Kubernetes ToolKit UIを簡単に紹介 Copyright © 2021, Oracle and/or its affiliates 101
  102. WebLogicをKubernetesにデプロイした場合の形を見る デモ: KubernetesとWebLogicの両方からOperatorのリソースを見てみる Copyright © 2021, Oracle and/or its affiliates

    102 <Namespace> [domain_name]-ns <Service:Cluster> [domain_name]- adminserver <Ingress> wls-admin-ingress <Ingress> wls-cluster-ingress <Service:Cluster> domain1-cluster-domain1-cluster WebLogic ドメイン 管理 サーバ 管理対象 サーバ#1 管理対象 サーバ#2 WebLogicクラスタ <Service:Cluster> [domain_name] -managed-server2 <Pod> [domain_name] -managed-server2 <Pod> [domain_name] -adminserver Load Balancer <Namespace> wls4oke-operator-ns <Service:Cluster> internal-weblogic-operator-svc <Deployment> weblogic-operator <Pod> weblogic-operator-xx <Service:Cluster> [domain_name] -managed-server1 <Pod> [domain_name] -managed-server1
  103. Managed ServerをスケールアウトしてKubernetesによるWebLogicの操作を行ってみる デモ: KubernetesとWebLogicの両方からOperatorの操作をしてみる Copyright © 2021, Oracle and/or its

    affiliates 103 WLS AP WLS AP WLS Admin Operator Framework WebLogic Operator WLS AP WLS AP WLS Admin Operator Framework WebLogic Operator WLS AP replicas: 2 ->3 $ kubectl edit domain [domain_name] –n [namespace]
  104. ご清聴ありがとうございました! 104 Copyright © 2021, Oracle and/or its affiliates

  105. None
  106. None