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

Oracle Transaction Manager for Microservices Free 22.3 製品概要

Oracle Transaction Manager for Microservices Free 22.3 製品概要

製品ドキュメントはこちらです。
https://docs.oracle.com/cd/F75578_01/index.html

oracle4engineer

December 21, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

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

    状態遷移が複雑化し アプリケーション開発保守性が低下 Oracleによるマイクロサービス環境におけるデータ・マネージメント Copyright © 2023, Oracle and/or its affiliates. 2 コンテナ・データベースで 基盤運用を簡素化・効率化 • 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
  2. 迅速に高品質なシステムを育て続けるための戦略 マイクロサービスの世界観 Copyright © 2023, Oracle and/or its affiliates. DevOps

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

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

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

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

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

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

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

    • トランザクション管理を共通フレームワーク化 • イニシエータや参加者によるトランザクション制御 実装が不要 • トランザクション管理をイニシエータから分離して運用 • ログ用ストアなどの基盤管理を集約して効率化 トランザクション・コーディネータの必要性 Copyright © 2023, Oracle and/or its affiliates. 12 在庫管理 サービス 在庫マスタ 在庫の予約 ポイント サービス ポイントマスタ ポイントの確保 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 参加者の実装に合わせた個別の トランザクション制御の実装が必要 トランザクション・ログのストアなどの環境は イニシエータごとに用意して管理が必要 イニシエータの数に依らずストア などの基盤管理を集約可能 トランザクション制御の実装は一切不要
  10. TCC/LRA(Saga)/XA 対応の分散トランザクション・コーディネーター 13 Copyright © 2023, Oracle and/or its affiliates.

    Oracle Transaction Manager for Microservices (MicroTx) ▪ ユースケース • マイクロサービス間におけるデータの一貫性を確保 • 標準規格に準拠したトランザクション・フレームワークの導入 ▪ 特徴 • 幅広いトランザクション・プロトコルをサポート • TCC、MicroProfile LRA (Saga)、XA * • 多種のプログラミング言語に対応 • Java, JavaScript, Python(TCCのみ)(他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
  11. 主な仕様 動作条件 • Kubernetes 1.21.x と互換性のある Kubernetes ディストリビューション ※ インストール・バイナリは

    Istio サービス・メッシュを前提にした helm チャートを提供、任意のサービス・メッシュも利用可 • Docker 20.10.x もしくは互換性のあるバージョン (Docker Swarm) サポートする Kubernetes 環境 Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE) Minikube Oracle Linux Container Native Environment サポートする 言語 及び フレームワーク TypeScript または JavaScript (フレームワーク: Node.js) 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 Microsoft Azure Active Directory 及び Active Directory 制限事項 最大 4,800 トランザクション/時間 の制限あり トランザクション・ログ (ステート情報) はメモリーにのみ保存される ライセンス Oracle Free Use Terms and Conditions https://www.oracle.com/downloads/licenses/oracle-free-license.html Oracle Transaction Manager for Microservices Free 23.4 Copyright © 2023, Oracle and/or its affiliates. 14
  12. MicroTx の適用例 マイクロサービスにおけるサービス間のデータ整合性確保 Java EE アプリケーションのアーキテクチャ刷新 15 Copyright © 2023,

    Oracle and/or its affiliates. APP サービス A flight APP サービス B hotel MicroTx OKE istio マイクロサービスな世界 TCC/LRA/XA APP Coordinator MicroTx Lib MicroTx Lib MicroTx Lib MicroTx OKE istio XA Coordinator MicroTx Lib XA対応 Database Java EE Application Server APP XA Transaction Manager APP Helidon, SpringBoot, etc. XA対応 Database • コンテナ化対応 • フットプリント軽減 • TXマネージャを基盤 サービスとして外出し
  13. Saga (LRA) デモ Copyright © 2023, Oracle and/or its affiliates.

    17 予約 予約確認 Database Identity Database MicroTx
  14. MicroTxによるSagaパターン実装時の一連のシーケンス MicroTx Saga Sample (成功パターン:Close) Copyright © 2023, Oracle and/or

    its affiliates. 18 POST /trip PUT /complete (LRA_ID) complete (LRA_ID) client flight-booking (participant) MicroTx (Saga:LRA) hotel-booking (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 (LRA_ID) PUT /complete (LRA_ID) PUT /trip/{bookingId} header: LRA_ID header: LRA_ID 予約 予約確認 MicroTxのライブラリとLRA フレームワークにより隠蔽される実装 Database HOTEL FLIGHT PROVISIONAL PROVISIONAL CONFIRMED CONFIRMED
  15. MicroTxによるSagaパターン実装時の一連のシーケンス MicroTx Saga Sample (失敗パターン:Cancel) Copyright © 2023, Oracle and/or

    its affiliates. 19 POST /trip PUT /compensate (LRA_ID) compensate(LRA_ID) client flight-booking (participant) MicroTx (Saga:LRA) hotel-booking (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 (LRA_ID) PUT /compensate (LRA_ID) 予約処理失敗 (エラー応答) 予約 status 500 MicroTxのライブラリとLRA フレームワークにより隠蔽される実装 Database HOTEL FLIGHT PROVISIONAL FAILED CANCELED
  16. マイクロサービスにおけるデータ整合性の考え方 • Saga 結果整合性 ~ XAトランザクション まで幅広い選択肢 • 要件に応じた適切なトランザクション・モデルを選択する トランザクション・コーディネータの必要性

    • アプリケーションの実装コストの削減・開発期間の短縮 • トランザクションの管理性向上 Oracle Transaction Coordinator Microservices の特長 • マイクロサービス・アーキテクチャの分散トランザクション管理を提供するトランザクション・コーディネータとライブラリ • TCCパターン、Sagaパターン、XA に対応 • 多種のプログラミング言語に対応 - Java, JavaScript, Python(TCCのみ) (今後対応予定 C/C++, Go) • 可用性、スケーラビリティ、セキュリティ、オブザーバビリティ • オラクル・データベースへの最適化、Tuxedoとの連携 まとめ Copyright © 2023, Oracle and/or its affiliates. 21
  17. 標準規格に準拠した Saga トランザクション・コーディネータ • MicroTxによりアプリケーションコードを簡素化 • 開発者はコアなビジネスロジックに集中 • Eclipse MicroProfile

    Long Running Actions (LRA) 仕様に準拠 • 複数のプログラミング言語フレームワークのサポート • Java、Node.js, Python • JavaでのLRAアノテーションのサポート MicroTx - Saga オーケストレーション Copyright © 2023, Oracle and/or its affiliates. 24
  18. 強力な一貫性のためのトランザクション管理 • 高スループットと低レイテンシーのための最適化 • 1フェーズ・コミット最適化 • プロモータブル・トランザクション • Logging Last

    Resource • トランザクション管理のためのREST APIを提供 • 開始、コミット、ロールバック、エンリスト • トランザクションAPIのプログラミング言語サポート • Java、Node.js • 一般的なフレームワークのサポート • Helidon、Spring Boot • オラクル・データベースに加えて、すべてのXA準拠のリ ソース・マネージャをサポート MicroTx - XAトランザクション Copyright © 2023, Oracle and/or its affiliates. 25
  19. • Oracleデータベース・アプリケーションがXA、TCC、 Sagaトランザクションに参加可能 • APEX アプリケーション • PL/SQL ストアド・プロシージャを使用するアプリケーション •

    トランザクションにOracleデータベースの外部で動作 するマイクロサービスを含めることができる • Oracle REST Data Services (ORDS)を使用し てRESTエンドポイントを公開 • MicroTxトランザクションコーディネーターと通信するために 使用される • トランザクションログやGlobal Temporary Table にAPEXアプリと同じデータベース環境を使用可能 MicroTx - Oracle データベース 常駐アプリケーション Copyright © 2023, Oracle and/or its affiliates. 26
  20. Sagaパターンにおける補償トランザクションのJava規格 連携するサービス間で、処理状態を判別して補償処理を調停するフレームワーク仕様 • LRA (=複数のサービスによる一連の処理) 内の1つのサービスが失敗すると、他のサービスの補償処理を呼び出す • JAX-RSで呼び出されるメソッドにアノテーションを付与して調停が必要な処理をマーク • LRAの開始/終了/参加/離脱、補償処理、正常終了、etc.

    • LRAのコンテキストIDがHTTPヘッダで伝播される Eclipse MicroProfile LRA (Long Running Action) Copyright © 2023, Oracle and/or its affiliates. @Path("/") @ApplicationScoped public class SimpleLRAParticipant { @LRA(LRA.Type.REQUIRES_NEW) @Path("/cdi") @PUT public void doInTransaction(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) URI lraId) {...} @Complete @Path("/complete") @PUT public Response completeWork(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) URI lraId, String data) {...} @Compensate @Path("/compensate") @PUT public Response compensateWork(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) URI lraId, String data) {...} } 呼び出されるとLRAが開始される LRAが完了すると呼び出される(リソースのクリーンアップなどに使う) LRAがキャンセルされるとと呼び出される (補償処理に使う) 成功 失敗 キャンセル (補償処理) LRAコンテキスト LRAコンテキスト 28
  21. MicroProfile LRAに対応したオラクル発のマイクロサービス・アプリケーション・フレームワーク OracleがホストするOSSプロジェクト • GitHubでソースコードを公開: https://github.com/helidon-io/helidon • Helidonの商用サポートはWebLogic Server/Coherence/Verrazzanoのサポート契約に含まれる マイクロサービスアプリケーションが必要とする機能を提供するJavaライブラリの集合体

    • 単体のJVMとして動作し、アプリケーションサーバ不要、容易なコンテナ化 • 必要なコンポーネントを追加して拡張することも可能 マイクロサービスの開発・運用を支援する機能を提供 • OpenMetrics(監視)、OpenTelemetry(監視、ログ、追跡)、OpenAPI(API公開) • 耐障害性/回復性: ヘルスチェック、サーキット・ブレーカ 2つのプログラミングモデルを提供 • Helidon MP:MicroProfile標準仕様準拠の宣言的記法(Java EE開発者フレンドリー) • Helidon SE:関数的型記法 Helidon Copyright © 2023, Oracle and/or its affiliates. 29
  22. Our mission is to help people see data in new

    ways, discover insights, unlock endless possibilities.