Upgrade to Pro — share decks privately, control downloads, hide ads and more …

マイクロサービスのトランザクション管理

 マイクロサービスのトランザクション管理

2023年4月19日開催 Oracle Cloud Hangout Cafe Premium
https://ochacafe.connpass.com/event/270028/

アーカイブ
https://youtu.be/nfk9n4olOEM

oracle4engineer

April 19, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2023, Oracle and/or its affiliates. All rights reserved.

    | 2 日本オラクルのプリセールスで製品担当部署に所属 日本オラクル株式会社 クラウド・エンジニアリング統括 ソリューション・アーキテクト本部 プリンシパル・クラウド・ソリューション・エンジニア 山成慎吾 自己紹介
  2. 1. マイクロサービスの基礎とトランザクション管理 2. Oracle Transaction Manager for Microservices (MicroTx) のコンセプトと仕組み

    3. MicroTxを使ったSagaパターンの実装例 (チュートリアルによるデモ) Agenda Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 3
  3. Copyright © 2023, Oracle and/or its affiliates. All rights reserved.

    | 4 マイクロサービスの基礎とトランザクション管理 Subhead goes here
  4. 迅速に高品質なシステムを育て続けるための戦略 マイクロサービスの世界観 Copyright © 2023, Oracle and/or its affiliates. All

    rights reserved. | DevOps • 自動化された高頻度リリース • フィードバックに基づく継続リリース マイクロサービス・アーキテクチャ • 疎結合型アーキテクチャ • サービス単位のデプロイメント サービス単位の組織 • 小規模でサービス毎の自主性・自律性 • 機能横断的なチーム 6
  5. サービス間の影響を極小化しシステムの変更容易性を高めるアーキテクチャ 保守とテストの容易性 • 分割したサービス毎に組織を編成し開発・運用の自由度を高める • 更新単位を最小限にすることでテスト規模を最小化 疎結合 • API化や非同期化によりサービス間の結合度を低減 •

    変更による他の稼働中のサービスにへの影響を極小化 独立してデプロイ可能 • データソースやアプリケーション・モジュールをサービス毎で占有 • デプロイやスケールの変更の単位サービス毎で任意に最適化 マイクロサービス・アーキテクチャとは Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | API サービス実装 データストア イベント・ストア 7
  6. サービス間をまたがるトランザクションの仕組み Sagaパターン 補償トランザクションによる(事後)結果整合性 • 処理の成功を前提とした楽観的な呼出し手法 • 一部の処理が失敗した場合に、既に完了した処理を 取り消す「補償トランザクション」により整合性を取る TCC (Try/Confirm/Cancel)

    パターン 予約ベースの(事前)結果整合性 • 処理完了の可否を事前に確認した上で処理を実施 • Tryフェーズにより不整合の生じる処理を行わないこと で整合性を担保 マイクロサービスで検討される代表的なデータ整合性の仕組み Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 9 Insert Delete Insert Reserve Update Reserve Update
  7. 障害時などにビジネス・トランザクションとして回復する 何らかの障害で処理を完了できない場合に、処理を取り消して整合性を合わせる。 例:注文マスタの更新に失敗 → 在庫修正を元に戻してもらう (=注文のキャンセルを発行) 複数個所での障害など、補償トランザクションの設計が煩雑になりやすい。。。 → 長いトランザクションは控えるのがbetter Sagaパターンの補償トランザクション

    注文管理 サービス 在庫管理 サービス 在庫マスタ API 注文 2. 在庫確保 イベント・チャネル イベント・チャネル 注文マスタ 4. 注文確定の失敗 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 10 6. 在庫戻し 1. 注文 3. 在庫確保OK 7. 在庫戻しOK 5. 注文キャンセル 通常処理の依頼 通常処理の応答 通常処理フロー 補償処理の依頼 補償処理の応答 補償処理フロー 注文確定失敗は のためキャンセル 注文のキャンセル のため在庫を戻す 6. 注文失敗
  8. 予約していたリソースを解放するのみで対応可能 Tryフェーズで予約したリソースを解放する処理 • 予約が成功したサービスに対して取消を発行 • 各サービスへの予約の状態は同一のコンテキスト (例:注文番号など)での管理が必要 • 予約が成功した相手のみを抽出してCancel サービス自体の障害を考慮して、イベント・ストア等を活

    用した自動リトライの仕組みも要検討 • Try に対する応答時に呼出し元がダウン • Try時は稼働していた呼出し先のサービスがCancel 時にダウン TCC パターンの障害ケース Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 11 注文管理 サービス 在庫管理 サービス 在庫マスタ 在庫の予約 注文マスタ ポイント サービス ポイントマスタ ポイントの確保 注文管理 サービス 在庫管理 サービス 在庫マスタ 予約の取消し 注文マスタ ポイント サービス ポイントマスタ Try Cancel OK
  9. XAトランザクションを利用したデータ整合性の担保 X/Open XA • X/Open社による分散トランザクションの標準規格 • 2フェーズ・コミットをベースとしたデータ整合性担保のしくみ 2フェーズ・コミットの仕組み • 更新対象のデータを排他ロック

    • 更新可能かどうかを事前にチェック • 全員更新可能であれば一斉にコミット、一人でもNGなら 全員ロールバック XAのメリットとデメリット • メリット • 複数のデータソースに跨る一貫性を確実に担保でき 実装も容易 • デメリット • 広範囲の排他ロックにより性能ボトルネックになり易い 従来のデータソース間のデータ整合性の担保のしくみ Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 正常時の動作 障害時の動作 リソース・ マネージャ OK OK トランザクション・ マネージャ OK NG リソース・ マネージャ トランザクション・ マネージャ 12
  10. Sagaパターン TCCパターン XA 整合性の確実さ 補償処理の失敗やトランザクション間における 同一データに対する競合により一貫性が損 なわれやすい トランザクション間でのデータ競合を防ぐこと で一貫性を確実に保証 データセットに対する排他によりトランザクショ

    ンの一貫性を確実に保証 整合性制御の複雑さ トランザクション参加者の処理順序や結果を 踏まえた補償処理の制御が必要 失敗時の回復を含めトランザクション内に閉 じて容易に制御 異なるトランザクション間でのデータを完全に 排他することによりシンプルに制御 ビジネス・データに対する排他 データアクセス単位の排他のみ 予約により異なるトランザクション間でデータ が競合しない 処理対象となるデータセットに対する排他ロッ ク サービス間のデータソース分離 トランザクション参加者ごとにデータソースを 分離 トランザクション参加者ごとにデータソースを 分離 トランザクション・イニシエータが他のサービス のデータソースを直接参照 主なデメリット トランザクション間での競合などを加味した補 償処理の確実な自動化が困難 一定期間の予約状態によりビジネス・データ が遊休状態になる 完全な排他により、他のトランザクションへの レイテンシや並列度に影響が生じやすい 利用が想定される領域 他のトランザクションと分離されやすく、補償処 理に人手が関与しやすい領域 • ユーザ単位で行われる受付業務 • カート→チェックアウト→配送のような長期 的なトランザクション、etc. 確実な一貫性が求められ、業務的に一時的 な予約が許容される領域 • 複数商材の一括決済、在庫を要する修 理手配 • デポジット型のポイント決済、etc. ACID特性の順守が必要な領域 • 勘定系 • システム制御マスタ、etc. Saga、TCC及びXAのトランザクション制御の特性 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 13 失敗時に補償処理を呼び出し 忘れると整合性が崩壊する 失敗時に予約を解放し忘れ ると業務データが枯渇する サービス間のデータソースが 蜜結合する
  11. Copyright © 2023, Oracle and/or its affiliates. All rights reserved.

    | 14 Oracle Transaction Manager for Microservices (MicroTx) のコンセプトと仕組み
  12. マイクロサービス導入の負の側面を補うOracleの代表的なソリューション データソースはマイクロサービス毎に 分離して独立性を高めべきである 分散化による無駄とリスクの増加 データベースは扱うデータ・タイプに 合わせたものを選択するのが良い ガバナンス(運用/セキュリティ)の欠如 多様なスキルセットが必要 サービス間のトランザクションは 非同期で結果整合性を確保する

    状態遷移が複雑化し アプリケーション開発保守性が低下 Oracleによるマイクロサービス環境におけるデータ・マネージメント Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 15 コンテナ・データベースで 基盤運用を簡素化・効率化 • Relational • Key-Value • Documents • Graph • Geospatial • Cube コンバージド・データベースで 運用の労力とリスクを軽減 最適なトランザクションモデルを選択して アプリケーション開発・保守を容易化 Oracle Transaction Manger for Microservices コンバージド・データベース APP APP MicroTx Kubernetes istio トランザクション MicroTx Lib MicroTx Lib APP MicroTx Lib 3つの異なる トランザクションモデル • XA • TCC • Saga 同期/ ACID 非同期/ 結果整合性 コンテナ・データベース 課題 ソリューション 課題 ソリューション 課題 ソリューション Service A Service B Service C
  13. TCC/LRA(Saga)/XA 対応の分散トランザクション・コーディネーター 16 Copyright © 2023, Oracle and/or its affiliates.

    All rights reserved. | Oracle Transaction Manager for Microservices (MicroTx) ▪ ユースケース • マイクロサービス間におけるデータの一貫性を確保 • 標準規格に準拠したトランザクション・フレームワークの導入 ▪ 特徴 • 幅広いトランザクション・プロトコルをサポート • TCC、MicroProfile LRA (Saga)、XA * • 多種のプログラミング言語に対応 • Java, JavaScript (Python, C/C++, Go 対応予定) • エンタープライズ向けソリューション • 可用性、スケーラビリティ、セキュリティ、オブザーバビリティ • オラクル・データベースへの最適化、Tuxedoとの連携 ▪ 価格 Free Edition (無償) を提供中 ※今後Enterprise Edition をリリース予定 Container Java App MicroTx Lib SVC FW Container Node.js App MicroTx Lib SVC FW MicroTx Transaction Coordinator Container Saga Orchestration TCC Coordination XA Coordination * TCC = Try-Confirm-Cancel サービス間でデータ一貫性を確保するのための処理パターン MicroProfile LRA = Long Running Actions - Eclipse MicroProfile の中の非同期分散処理のための規格 XA = X/Openが策定した分散トランザクション処理のための標準規格 Autonomous Database MySQL Database Service Exadata No SQL Database Database XA/Open XA Resource
  14. コーディネータが参加者のやり取りを仲介し、アプリケーション実装コストを軽減し、管理性を向上させる 【トランザクション管理の独自実装による課題】 • イニシエータ側でトランザクション制御の実装が必要 • イニシエータ側でトランザクション・ログの構成が必要 • トランザクション制御の実装ごとに、ログ用のストア とその運用管理も必要 【コーディネータによるトランザクション管理の集約の効果】

    • トランザクション管理を共通フレームワーク化 • イニシエータや参加者によるトランザクション制御 実装が不要 • トランザクション管理をイニシエータから分離して運用 • ログ用ストアなどの基盤管理を集約して効率化 トランザクション・コーディネータの必要性 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 17 在庫管理 サービス 在庫マスタ 在庫の予約 ポイント サービス ポイントマスタ ポイントの確保 Try (A) OK (A) TCCトランザクション管理の実装 A + B 用 トランザクション・ログ (A+B用) TCC 実装A TCC 実装B Cancel (A) Try (B) NG (B) Cancel (B) 注文管理 サービス 注文マスタ Try OK TCC ランザクション コーディネータ トランザクション・ログ 在庫管理 サービス 在庫マスタ 在庫の予約 TCCフレームワーク ポイント サービス ポイントマスタ ポイントの確保 TCCフレームワーク Cancel 注文管理 サービス 注文マスタ TCCフレームワーク Cancel 参加者の実装に合わせた個別の トランザクション制御の実装が必要 トランザクション・ログのストアなどの環境は イニシエータごとに用意して管理が必要 イニシエータの数に依らずストア などの基盤管理を集約可能 トランザクション制御の実装は一切不要
  15. 無償利用可能なMicroTx最新バージョン MicroTx Free Editionの概要 • FUTCライセンス、商用サポートの提供はなし • Oracle Software Delivery

    Cloudにて配布 • MicroTxを利用したアプリケーションの開発方法の習得等の 学習用途としても気軽に利用可能 • 現時点での制限事項 • 運用管理系の機能は付随しない • 扱えるトランザクション量= 4,800 トランザクション/時間 • 対応するKubernetesは以下に限定 • Oracle Container Engine for Kubernetes (OKE) • Oracle Cloud Native Environment (OCNE) • Minikube Oracle Transaction Manager for Microservices (MicroTx) Free 22.3.1 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 18 https://www.oracle.com/database/technologies/transaction-manager-for-microservices-downloads.html
  16. 既存のモノリシックな アプリケーション Saga/TCCによるマイクロサービス間の連携やXA前提のアプリケーションのコンテナ化 フレームワーク・ベースのアプリケーションに対してトランザクション管理機能をコンテナ・ランタイム側で提供 MicroTx の適用イメージ Copyright © 2023, Oracle

    and/or its affiliates. All rights reserved. | 19 MicroTx OKE istio マイクロサービスな世界 XA Coordinator サービスA APP MicroTx Lib サービスC APP XA サービスC1 APP MicroTx Lib サービスB APP MicroTx Lib Saga / TCC Saga/TCC Coordinator サービスC2 APP MicroTx Lib Java EEコンテナ XAを提供するアプリケーション・サーバ前提の アプリケーションのコンテナ化&サービス化 XA
  17. 主な仕様 動作条件 • Kubernetes 1.21.x と互換性のある Kubernetes ディストリビューション ※ インストール・バイナリは

    Istio サービス・メッシュを前提にした helm チャートを提供、任意のサービス・メッシュも利用可 • Docker 20.10.x もしくは互換性のあるバージョン (Docker Swarm) サポートする Kubernetes 環境 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) Minikube Oracle Cloud Native Environment サポートする 言語 及び フレームワーク TypeScript または JavaScript (フレームワーク: Node.js + Express) Java (フレームワーク: Helidon, Spring Boot, WebLogic Server など Eclipse Jersey 実装の JAX-RS) サポートする XA リソース・マネージャ Oracle Database 19c PostgreSQL 14.2 その他 XA 準拠のリソース・マネージャ: MySQL, Microsoft SQL Server など サポートする アイデンティティ・プロバイダ Oracle IDCS および Oracle IAM Keycloak Azure Active Directory 及び Microsoft Active Directory サポートする永続ストア etcd 及び Oracle Database 制限事項 最大 4,800 トランザクション/時間 の制限あり ライセンス Oracle Free Use Terms and Conditions https://www.oracle.com/downloads/licenses/oracle-free-license.html Oracle Transaction Manager for Microservices Free 22.3.1 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 20
  18. 追加された可用性向上の機能 トランザクション・ログの永続化とReplica構成に対応 • 永続化によりMicroTx Pod間でトランザクションを共有 • Replica構成時における共有 • MicroTx Pod障害時のトランザクションの自動復旧

    • アフィニティ設定によるインメモリ構成時のReplica構成にも対応 • MicroTX Pod障害時はトランザクションはロスト 対応するトランザクション・ログの永続ストア • OCIで提供されるOracle Databaseサービス • Autonomous Database • Exadata Cloud Service, Exadata Cloud@Customer • DB Systems (Bare Metal & Virtual Machine) • オンプレミスのOracle Database • Kubernetesクラスタ内の etcd Oracle Transaction Manager for Microservices Free 22.3.1 ハイライト #1 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 21 Pod Java App MicroTx Lib SVC FW MicroTx (Pod) Service / StatefulSet Saga TCC XA MicroTx (Pod) Saga TCC XA Autonomous Database Exadata Database On-Premise Oracle Database トランザクション・ログの永続化 • MicroTx Pod間でのトランザクションの共有 • MicroTx Pod障害時のトランザクションの復旧
  19. トランザクションIDとPodを紐づけたアフィニティによる連携 複数Podで構成されるアプリケーショ ンへのコールバック制御 • 参加をリクエストしたPodに対して completeやcompensateをコー ルバックするケース • インメモリ上のデータの利用など、 ステートレースではないアプリケー

    ションを利用するケース 全てのXA呼出しを同一DBセッション に集約 • XAに同一セッションの利用が必 須とされるリソースマネージャを利 用する(PostgreSQL)ケース • Logging Last Resourceなど非 XAリソースが参加するケース MicroTxをインメモリ構成を複数Pod で利用 • 永続化ストアを利用せず MicroTxをスケールさせたいケース • トランザクションIDとMicroTxの Podを紐づけ Oracle Transaction Manager for Microservices Free 22.3.1 ハイライト #2 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 22 Service / Deployment App (Pod) App (Pod) Service / StatefulSet MicroTx (Pod) join #1 compensate #1 Service / Deployment App (Pod) App (Pod) Service / StatefulSet MicroTx (Pod) prepare commit SVC FW 同一DBセッション join #2 complete #2 Service / Deployment App (Pod) Service / StatefulSet MicroTx (Pod) MicroTx (Pod) join #1 compensate #1 join #2 complete #2 commit (LLR) XA非対応 リソース #1 #2 Tx#1 Tx#2 Log
  20. 主な登場人物とそれらの関係 ① Kubernetes クラスタ内のコンポーネント • MicroTx Transaction Coordinator • Istio

    (アプリケーション間の通信を仲介) • MicroTxライブラリを組み込んだアプリケーション ② Identity Provider (IDP) • Istioによるアプリケーション間通信の認証用途 ③ アプリケーション用データベース • MicroTxのXAコーディネーターと連携 ④ トランザクション・ログの永続ストア • etcd または Oracle Database への永続化 • インメモリも可能 (障害時にトランザクションをロスト) MicroTx の構成の全体像 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 23 ① Kubernetes ④Transaction Log Store ② IDP IAM IDCS Keycloak Azure AD ③ Application Database Oracle Database Oracle Database Pod Java App MicroTx Lib SVC FW Pod Node.js App MicroTx Lib SVC FW Pod Python App MicroTx Lib SVC FW MicroTx Transaction Coordinator Pod Saga Orchestration TCC Coordination XA Coordination
  21. OKEを利用したMicroTx環境の構成例 Copyright © 2023, Oracle and/or its affiliates. All rights

    reserved. | 24 Oracle Cloud Infrastructure (Phoenix) AD 1 VCN AD 2 AD 3 Public Subnet (Load Balancer) Object Storage Public Subnet (OKE Endpoint) Private Subnet (OKE Cluster) OKE Endpoint Worker Node #1 Worker Node #2 Worker Node #3 Bastion OCIR OKE Internet Gateway Service Gateway Autonomous Database Load Balancer MicroTx OKE cluster Sample App IAM or IDCS
  22. Istio 及び MicroTxインストール時にデプロイされるリソース • MicroTx の Service/StatefulSet、Pod リソース • Istiod

    と Istio ingress gateway の Service/Deployment、Pod リソース • MicroTx の Service にルーティングするためのVirtualService と DestinationRule リソース • Istio ingress gatewayに関連付ける Gateway リソース アプリケーションのデプロイ時にデプロイするリソース • アプリケーション自体のリソース • Service/Deployment、Pod などのリソース • 必要に応じてPVやPVCなどアプリケーションに必要となるKubernetesリソース • AuthorizationPolicyで制御するためのServiceごとのServiceAccount • アプリケーションへのルーティングに必要なリソース • 各アプリケーションの Service にルーティングするための VirtualService と DestinationRule リソース MicroTx 利用時にデプロイする必要のあるKubernetesリソース Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 25
  23. Load Balancer (Public) OKE (Private) 26 Copyright © 2023, Oracle

    and/or its affiliates. All rights reserved. | MicroTxのKubernetesリソースの全体像 (サンプル構成の場合) <Namespace> otmm <Namespace> istio-system <Service:LB> istio-ingressgateway <Deployment> istio-ingressgateway <Pod> istio-ingressgateway-xx <Service:ClusterIP> istiod <Deployment> istiod <Pod> istiod-xx <Service:Cluster> trip-manager <Deployment> trip-manager <Pod> trip-manager-xx <Container> trip-manager <Container> istio-proxy <Service:Cluster> hotel <Deployment> hotel <Pod> hotel-xx <Container> hotel <Container> istio-proxy <Service:Cluster> flight <Deployment> flight <Pod> flight-xx <Container> flight <Container> istio-proxy <Service:Cluster> otmm-tcs <StatefulSet> otmm-tcs <Pod> otmm-tcs-xx <Container> otmm-tcs <Container> istio-proxy Load Balancer <VirtualService> otmm-sampleappsXXX <VirtualService> otmm <Gateway> otmm-gateway アプリケーションのデプロイ時に作成する Kubernetesリソース • アプリケーションのリソース • ルーティングのためのVirtualService 作成先の namespace はMicroTxと分離 することも検討 <DestinationRule> trip-manager <DestinationRule> hotel <DestinationRule> flight <DestinationRule> otmm <ServiceAccount> trip-manager <ServiceAccount> hotel <ServiceAccount> flight <ServiceAccount> otmm-tcs
  24. <VirtualService> otmm-sampleappsXXX /tripService /hotelService /flightService trip-manager : /tripService hotel :

    /hotelService flight : /flightService Istioによる通信経路の定義 MicroTx の Istio サービスメッシュの構成例 (サンプル構成の場合) Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 27 <Gateway> otmm-gateway istio-ingressgateway : 80, 443 <VirtualService> otmm /api/v1/tcc-transaction /api/v1/lra-coordinator /api/v1/xa-transaction /admin/v1 /config /health /metrics otmm-tcs : * <Service:Cluster> trip-manager <Service:Cluster> hotel <Service:Cluster> flight <Service:Cluster> otmm-tcs <Service:LB> istio-ingressgateway Istio インストール (istioctl install) 時に構成される MicroTxインストール 時に構成される Istio 関連のカスタム・リソース Kubernetes標準リソース 凡例 アプリケーションのデプロイ時にアプリケーショ ンに合わせて作成する <DestinationRule> trip-manager <DestinationRule> hotel <DestinationRule> flight <DestinationRule> otmm-tcs
  25. Load Balancer (Public) OKE (Private) 28 Copyright © 2023, Oracle

    and/or its affiliates. All rights reserved. | Istioを介したアプリケーション間の通信 MicroTxとアプリケーション間の通信の経路 #1 <Namespace> otmm <Namespace> istio-system <Service:LB> istio-ingressgateway <Deployment> istio-ingressgateway <Pod> istio-ingressgateway-xx <Service:ClusterIP> istiod <Deployment> istiod <Pod> istiod-xx <Service:Cluster> trip-manager <Deployment> trip-manager <Pod> trip-manager-xx <Container> trip-manager <Container> istio-proxy <Service:Cluster> hotel <Deployment> hotel <Pod> hotel-xx <Container> hotel <Container> istio-proxy <Service:Cluster> flight <Deployment> flight <Pod> flight-xx <Container> flight <Container> istio-proxy <Service:Cluster> otmm-tcs <StatefulSet> otmm-tcs <Pod> otmm-tcs-xx <Container> otmm-tcs <Container> istio-proxy Load Balancer Envoyを経由して通信 Envoyを経由して通信 Envoyを経由して通信 Envoyを経由して通信
  26. Load Balancer (Public) OKE (Private) 29 Copyright © 2023, Oracle

    and/or its affiliates. All rights reserved. | Istioを介したMicroTxとアプリケーション間の通信 MicroTxとアプリケーション間の通信の経路 #2 <Namespace> otmm <Namespace> istio-system <Service:LB> istio-ingressgateway <Deployment> istio-ingressgateway <Pod> istio-ingressgateway-xx <Service:ClusterIP> istiod <Deployment> istiod <Pod> istiod-xx <Service:Cluster> trip-manager <Deployment> trip-manager <Pod> trip-manager-xx <Container> trip-manager <Container> istio-proxy <Service:Cluster> hotel <Deployment> hotel <Pod> hotel-xx <Container> hotel <Container> istio-proxy <Service:Cluster> flight <Deployment> flight <Pod> flight-xx <Container> flight <Container> istio-proxy <Service:Cluster> otmm-tcs <StatefulSet> otmm-tcs <Pod> otmm-tcs-xx <Container> otmm-tcs <Container> istio-proxy Load Balancer Envoyを経由して通信 (クラスタ外のアプリケーション) Envoyを経由して通信 Envoyを経由して通信 Envoyを経由して通信
  27. Kiali を利用して確認できる通信の流れ (LRAの場合) Istioを経由したMicroTxアプリケーションの通信の概観 #1 Copyright © 2023, Oracle and/or

    its affiliates. All rights reserved. | 30 サービス間の呼出し (trip-manager -> flight) イニシエータからの MicroTx の呼出し (トランザクションの close など) MicroTx から参加者へのコールバック (トランザクションの complete, compensate など) トランザクションに関わるコンポーネントと通信 の関係をEnvoy間の通信から追跡
  28. Jaeger を利用して確認できる通信の流れ (LRAの場合) Istioを経由したMicroTxアプリケーションの通信の概観 #2 Copyright © 2023, Oracle and/or

    its affiliates. All rights reserved. | 31 旅行 (ホテルとフライト) の予約 旅行の予約の確定 (トランザクションの完了) Envoy間の通信からのJAX-RS通信の 時系列に沿った呼出し関係のトレース MicroTx から参加者へのコールバック (トランザクションの complete, compensate など) イニシエータからの MicroTx の呼出し (トランザクションの close など)
  29. OKE上でMicroTxをクイックに始める場合 ご参考) Kubernetes上でのMicroTxのセットアップの流れ Copyright © 2023, Oracle and/or its affiliates.

    All rights reserved. | 32 ➡ インストール・メディアに含まれる runme.sh で ④~⑥ をCUIウィザード形式で実行可能 ① メディアの取得 ② IDプロバイダの準備 ③ Kubernetesクラスタの作成と インストール作業環境の準備 ④ Kubernetesクラスタに対する設定 ⑤ MicroTx用の セキュリティ関連リソースの作成 ⑥ MicroTxのインストール • OTN → Software Delivery Cloud から MicroTxのメディアをダウンロードしてインストール作業環境に展開 • IAMやIDCSでConfidential Application を作成 • Confidential Applicationに対するクライアント資格、JWTアサーション、リフレッシュ・トークン、認証コード、リダイレクト URLなどの設定 • Kubernetsクラスタの作成 (OKEのクイック作成、カスタム作成、いずれでも可) • インストール作業環境で kubectl, helm, 及び istioctl が使えるまでの設定 • istio の Kubernetsクラスタへのインストール (istioctl installを使用) • MicroTx/アプリケーション用のnamespaceの作成・設定や、コンテナ・レジストリアクセス用の secret などの設定 • MicroTxのコンテナイメージをコンテナ・レジストリに登録 • MicroTxと通信する際のトークンを暗号化キーの secret の設定 • トランザクション・トークンに対する署名用の秘密鍵/公開鍵用の secret の設定 • MicroTx 及び Istio に対する設定のためのファイル (values.yaml) の作成 • MicroTx のインストール (helm installを使用) • [オプション] MicroTxのサンプル・アプリケーションのインストール
  30. ご参考) アプリケーション作成~Kubernetes環境へのデプロイまでの流れ Copyright © 2023, Oracle and/or its affiliates. All

    rights reserved. | 33 ① プロジェクト/コードの作成 ② コンテナ・イメージのビルド/登録 ③ Helmチャートの作成 (オプション) ④ Kubernetesへのデプロイ • 開発環境での事前準備 • ビルド・プロジェクトの(Maven, npm)設定とMicroTxとの接続定義 • MicroTxを利用したアプリケーション・コードの作成 (イニシエータ側 and 参加者側) • Dockerfileの準備 • アプリケーションのコンテナ・イメージのビルドとコンテナ・レジストリへの登録 • Helmテンプレートの作成 (アプリケーション・リソース及びIstioのリソース) • value.yamlの定義 • Helm install, kubectl apply によるデプロイ
  31. 対話形式のインストーラー 最低限の入力のみでサンプル・アプリケーション を含めたMicroTx環境をセットアップ • クラスタへのIstioのインストール • 暗号化キーの自動生成 • MicroTx のビルドやレジストリへの登録

    • MicroTx のクラスタへのインストール • サンプル・アプリケーションのビルドとデプロイ etc. 手軽に動かしてみたい方にオススメ! runme.sh によるクイック・セットアップ Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 34
  32. Copyright © 2023, Oracle and/or its affiliates. All rights reserved.

    | 36 MicroTx を利用したSagaパターンの実装例 デモンストレーション
  33. LRA(Sagaパターン)を使ったホテルとフライトを同時に予約するケース [正常ケース] ホテルとフライトを同時に仮予約 → 予約する2ステップの処理 [障害ケース] 3件目のフライトを仮予約しようとするとフライトの仮予約が失敗し、ホテルも自動的にキャンセルされる デモ・アプリケーションの概要 Copyright ©

    2023, Oracle and/or its affiliates. All rights reserved. | 37 Step 1 : 仮予約 trip-manager flight hotel console trip-manager console flight hotel Step 2 : 確定 Step 1 : 仮予約 Step 2 : 予約失敗 trip-manager flight hotel console trip-manager console flight hotel LRA + MicroTxにより自動的にキャンセル
  34. OKEを利用したMicroTx環境のデモ環境の構成 Copyright © 2023, Oracle and/or its affiliates. All rights

    reserved. | 38 Oracle Cloud Infrastructure (Phoenix) AD 1 VCN AD 2 AD 3 Public Subnet (Load Balancer) Object Storage Public Subnet (OKE Endpoint) Private Subnet (OKE Cluster) OKE Endpoint Worker Node #1 Worker Node #2 Worker Node #3 Bastion OCIR OKE Internet Gateway Service Gateway Autonomous Database Load Balancer (AP) Load Balancer (Kiali&Jaeger) MicroTx OKE cluster Sample App IDCS OSOK
  35. Load Balancer (Public) OKE (Private) 39 Copyright © 2023, Oracle

    and/or its affiliates. All rights reserved. | MicroTx を利用したデモ環境の Kubernetes リソースの全体像 <Namespace> otmm <Namespace> istio-system <Service:LB> istio-ingressgateway <Deployment> istio-ingressgateway <Pod> istio-ingressgateway-xx <Service:ClusterIP> istiod <Deployment> istiod <Pod> istiod-xx <Service:Cluster> trip-manager <Deployment> trip-manager <Pod> trip-manager-xx <Container> trip-manager <Container> istio-proxy <Service:Cluster> hotel <Deployment> hotel <Pod> hotel-xx <Container> hotel <Container> istio-proxy <Service:Cluster> flight <Deployment> flight <Pod> flight-xx <Container> dlight <Container> istio-proxy <Service:Cluster> otmm-tcs <StatefulSet> otmm-tcs <Pod> otmm-tcs-xx <Container> otmm-tcs <Container> istio-proxy Load Balancer (AP) <VirtualService> otmm-sampleappslra <VirtualService> otmm <Gateway> otmm-gateway <Service:Cluster> console <Deployment> console <Pod> console-xx <Container> console <Container> istio-proxy <DestinationRule> console <DestinationRule> trip-manager <DestinationRule> flight <DestinationRule> hotel <DestinationRule> otmm <ServiceAccount> console <ServiceAccount> trip-manager <ServiceAccount> flight <ServiceAccount> hotel <ServiceAccount> otmm-tcs Load Balancer (Kiali&Jaeger)
  36. MicroTx を利用したデモ環境の Istio サービスメッシュの構成 Copyright © 2023, Oracle and/or its

    affiliates. All rights reserved. | 40 <Gateway> otmm-gateway istio-ingressgateway : 80, 443 <VirtualService> otmm /api/v1/tcc-transaction /api/v1/lra-coordinator /api/v1/xa-transaction /admin/v1 /config /health /metrics otmm-tcs : * <VirtualService> otmm-sampleappslra /tripService /hotelService /flightService trip-manager : /tripService hotel : /hotelService flight : /flightService /demo-console console : /demo-console <Service:LB> istio-ingressgateway Istio 関連のカスタム・リソース Kubernetes標準リソース 凡例 <Service:Cluster> trip-manager <DestinationRule> trip-manager <Service:Cluster> hotel <DestinationRule> hotel <Service:Cluster> flight <DestinationRule> flight <Service:Cluster> otmm-tcs <DestinationRule> otmm-tcs <Service:Cluster> console <DestinationRule> console
  37. LRA(Sagaパターン)を使ったホテルとフライトを同時に予約するケース [正常ケース] ホテルとフライトを同時に仮予約 → 予約する2ステップの処理 [障害ケース] 3件目のフライトを仮予約しようとするとフライトの仮予約が失敗し、ホテルも自動的にキャンセルされる 再掲) デモ・アプリケーションの概要 Copyright

    © 2023, Oracle and/or its affiliates. All rights reserved. | 41 Step 1 : 仮予約 trip-manager flight hotel console trip-manager console flight hotel Step 2 : 確定 Step 1 : 仮予約 Step 2 : 予約失敗 trip-manager flight hotel console trip-manager console flight hotel
  38. MicroTxによるSagaパターン実装時の一連のシーケンス 正常ケースのSagaトランザクションの流れ Copyright © 2023, Oracle and/or its affiliates. All

    rights reserved. | 42 POST /trip PUT /complete (LRA_ID) complete (LRA_ID) console flight (participant) MicroTx (Saga:LRA) hotel (participant) trip-manager (initiator) POST /hotel (LRA_ID, hotelName) POST /flight (LRA_ID, flightName) close (LRA_ID) book (LRA_ID, hotelName) book (LRA_ID, flightName) complete (LRA_ID) join (LRA_ID, ‘/complete’, ‘/compensate’) join (LRA_ID, ‘/complete’, ‘/compensate’) startLRA (), join(LRA_ID, ..) PUT /complete (LRA_ID) PUT /trip/{bookingId} header: LRA_ID header: LRA_ID 仮予約 確定 MicroTxのライブラリとLRA フレームワークにより隠蔽される実装 Database HOTEL FLIGHT PROVISIONAL PROVISIONAL CONFIRMED CONFIRMED Step 1 : 仮予約 trip-manager flight hotel console trip-manager console flight hotel Step 2 : 確定
  39. LRA(Sagaパターン)を使ったホテルとフライトを同時に予約するケース [正常ケース] ホテルとフライトを同時に仮予約 → 予約する2ステップの処理 [障害ケース] 3件目のフライトを仮予約しようとするとフライトの仮予約が失敗し、ホテルも自動的にキャンセルされる 再掲) デモ・アプリケーションの概要 Copyright

    © 2023, Oracle and/or its affiliates. All rights reserved. | 43 Step 1 : 仮予約 trip-manager flight hotel console trip-manager console flight hotel Step 2 : 確定 Step 1 : 仮予約 Step 2 : 予約失敗 trip-manager flight hotel console trip-manager console flight hotel LRA + MicroTxにより自動的にキャンセル
  40. MicroTxによるSagaパターン実装時の一連のシーケンス 障害ケースのSagaトランザクションの流れ Copyright © 2023, Oracle and/or its affiliates. All

    rights reserved. | 44 POST /trip PUT /compensate (LRA_ID) compensate(LRA_ID) console flight (participant) MicroTx (Saga:LRA) hotel (participant) trip-manager (initiator) POST /hotel (LRA_ID, hotelName) POST /flight (LRA_ID, flightName) cancel (LRA_ID) book (LRA_ID, hotelName) book (LRA_ID, flightName) compensate (LRA_ID) join (LRA_ID, ‘/complete’, ‘/compensate’) join (LRA_ID, ‘/complete’, ‘/compensate’) startLRA (), join(LRA_ID, ..) PUT /compensate (LRA_ID) 予約処理失敗 (エラー応答) 仮予約 status 500 MicroTxのライブラリとLRA フレームワークにより隠蔽される実装 Database HOTEL FLIGHT PROVISIONAL FAILED CANCELED 予約失敗 LRA対象のメソッドが例外終了することで 自動的にMicroTxにcancel指示を出す Step 1 : 仮予約 Step 2 : 予約失敗 trip-manager flight hotel console trip-manager console flight hotel
  41. マイクロサービスで利用されるトランザクション管理パターンの特性 • Saga:「補償トランザクションによる整合性」。補償処理が複雑化し過ぎないように、場合によりは手動による補償も。 • TCC:「事前のデータ予約による整合性」。長期のデータ予約による業務データの枯渇に注意。 • XA:「データソースによる排他的な整合性」。結合度が高いため多用は避ける (自チーム内のサービスのみ、など) Oracle Transaction

    Manager for Microservicese (MicroTx)の特長 • LRA (Saga), TCC, XAに対応したコーディネーター・ベースのトランザクション管理 • アプリケーションから分離されたコーディネーター・ベースのトランザクション管理の機構を採用 • 複雑なトランザクション管理をサービス毎に個別に開発しない • サービス間で共通の機構を利用することで、トランザクション管理の品質を均一に • Istio を活用したスケール構成やオブザーバビリティの拡張 • アプリケーションやMicroTxのレプリカ構成時のアフィニティ制御 • Kiali + Jaegerの標準機能のみでトランザクションの全貌を追跡 まとめ) マイクロサービスのトランザクション管理の仕組みと MicroTxの特長 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 45
  42. Oracle Transaction Manager for Microservices 製品概要 https://www.oracle.com/jp/database/transaction-manager-for-microservices/ Oracle Transaction Manager

    for Microservices 製品ドキュメント https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/22.3/index.html Oracle Transaction Manager for Microservices Free ダウンロード https://www.oracle.com/database/technologies/transaction-manager-for-microservices-downloads.html Oracle Transaction Manager for Microservices 22.3.1 アナウンス情報 [Blog]) https://blogs.oracle.com/database/post/announcing-oracle-transaction-manager-for-microservices-new-release Oracle Transaction Manager for Microservices (MicroTx) を体験してみよう [チュートリアル・ハンズオン] https://oracle-japan.github.io/ocitutorials/cloud-native/microtx-for-beginners/ Oracle Transaction Manager for Microservices 公開情報 Copyright © 2023, Oracle and/or its affiliates. All rights reserved. | 46