製品ドキュメントはこちらです。 https://docs.oracle.com/cd/F75578_01/index.html
Oracle Transaction Manager for MicroservicesFree 22.3 製品概要マイクロサービスのトランザクション管理ソリューション日本オラクル株式会社2023年1月v1.3.1
View Slide
マイクロサービス導入の負の側面を補うOracleの代表的なソリューションデータソースはマイクロサービス毎に分離して独立性を高めべきである分散化による無駄とリスクの増加データベースは扱うデータ・タイプに合わせたものを選択するのが良いガバナンス(運用/セキュリティ)の欠如多様なスキルセットが必要サービス間のトランザクションは非同期で結果整合性を確保する状態遷移が複雑化しアプリケーション開発保守性が低下Oracleによるマイクロサービス環境におけるデータ・マネージメントCopyright © 2023, Oracle and/or its affiliates. All rights reserved.2コンテナ・データベースで基盤運用を簡素化・効率化• Relational• Key-Value• Documents• Graph• Geospatial• Cubeコンバージド・データベースで運用の労力とリスクを軽減最適なトランザクションモデルを選択してアプリケーション開発・保守を容易化OracleTransaction Manger for Microservicesコンバージド・データベースAPP APPMicroTxKubernetes istioトランザクションMicroTx LibMicroTx LibAPPMicroTx Lib3つの異なるトランザクションモデル• XA• TCC• Saga同期/ACID非同期/結果整合性コンテナ・データベース課題ソリューション課題ソリューション課題ソリューションServiceAServiceBServiceC
デジタルトランスフォーメーション | 社内業務の効率化から新ビジネスの創造へビジネスにもとめられる進化のスピードと品質✓サービスの早期リリース✓市場の動向/反応を早期フィードバックして対応✓サービス停止による機会損失をなくすシステムは変化するビジネス要件に合わせ短い時間で高頻度にリリースする事が求められる✓アプリの変更をすぐに本番環境に適用✓変化を許容できるシステムを構築✓停止時間の短縮と運用作業の効率化企業システムに求められるニーズの変化Copyright © 2023, Oracle and/or its affiliates. All rights reserved.業務効率化社外社内業務の効率化社外顧客向け新ビジネス創造3
迅速に高品質なシステムを育て続けるための戦略マイクロサービスの世界観Copyright © 2023, Oracle and/or its affiliates. All rights reserved.DevOps• 自動化された高頻度リリース• フィードバックに基づく継続リリースマイクロサービス・アーキテクチャ• 疎結合型アーキテクチャ• サービス単位のデプロイメントサービス単位の組織• 小規模でサービス毎の自主性・自律性• 機能横断的なチーム4
サービス間の影響を極小化しシステムの変更容易性を高めるアーキテクチャ保守とテストの容易性• 分割したサービス毎に組織を編成し開発・運用の自由度を高める• 更新単位を最小限にすることでテスト規模を最小化疎結合• API化や非同期化によりサービス間の結合度を低減• 変更による他の稼働中のサービスにへの影響を極小化独立してデプロイ可能• データソースやアプリケーション・モジュールをサービス毎で占有• デプロイやスケールの変更の単位サービス毎で任意に最適化マイクロサービス・アーキテクチャとはCopyright © 2023, Oracle and/or its affiliates. All rights reserved.APIサービス実装データストアイベント・ストア5
結果整合性による一貫性相手のサービスのデータソースには直接アクセスしない• 分散トランザクションによる一貫性の確保は利用すべきでないとされる• 自サービスと相手のサービスそれぞれの「結果整合性」により全体の一貫性を保つマイクロサービスにおけるデータ整合性の考え方在庫管理サービス注文管理サービスCopyright © 2023, Oracle and/or its affiliates. All rights reserved.6他のサービスのデータソースに直接アクセスしない
サービス間をまたがるトランザクションの仕組みSagaパターン補償トランザクションによる(事後)結果整合性• 処理の成功を前提とした楽観的な呼出し手法• 一部の処理が失敗した場合に、既に完了した処理を取り消す「補償トランザクション」により整合性を取るTCC (Try/Confirm/Cancel) パターン予約ベースの(事前)結果整合性• 処理完了の可否を事前に確認した上で処理を実施• Tryフェーズにより不整合の生じる処理を行わないことで整合性を担保マイクロサービスで検討される代表的なデータ整合性の仕組みCopyright © 2023, Oracle and/or its affiliates. All rights reserved.7InsertDeleteInsertReserveUpdateReserveUpdate
障害時などにビジネス・トランザクションとして回復する何らかの障害で処理を完了できない場合に、処理を取り消して整合性を合わせる。例:注文マスタの更新に失敗 → 在庫修正を元に戻してもらう (=注文のキャンセルを発行)複数個所での障害など、補償トランザクションの設計が煩雑になりやすい。。。 → 長いトランザクションは控えるのがbetterSagaパターンの補償トランザクション注文管理サービス在庫管理サービス在庫マスタAPI注文2. 在庫確保イベント・チャネルイベント・チャネル注文マスタ4. 注文確定の失敗Copyright © 2023, Oracle and/or its affiliates. All rights reserved.86. 在庫戻し1. 注文3. 在庫確保OK7. 在庫戻しOK5. 注文キャンセル通常処理の依頼 通常処理の応答通常処理フロー補償処理の依頼 補償処理の応答補償処理フロー注文確定失敗はのためキャンセル注文のキャンセルのため在庫を戻す6. 注文失敗
予約していたリソースを解放するのみで対応可能Tryフェーズで予約したリソースを解放する処理• 予約が成功したサービスに対して取消を発行• 各サービスへの予約の状態は同一のコンテキスト(例:注文番号など)での管理が必要• 予約が成功した相手のみを抽出してCancelサービス自体の障害を考慮して、イベント・ストア等を活用した自動リトライの仕組みも要検討• Try に対する応答時に呼出し元がダウン• Try時は稼働していた呼出し先のサービスがCancel時にダウンTCC パターンの障害ケースCopyright © 2023, Oracle and/or its affiliates. All rights reserved.9注文管理サービス在庫管理サービス在庫マスタ在庫の予約注文マスタポイントサービスポイントマスタポイントの確保注文管理サービス在庫管理サービス在庫マスタ予約の取消し注文マスタポイントサービスポイントマスタTryCancelOK
XAトランザクションを利用したデータ整合性の担保X/Open XA• X/Open社による分散トランザクションの標準規格• 2フェーズ・コミットをベースとしたデータ整合性担保のしくみ2フェーズ・コミットの仕組み• 更新対象のデータを排他ロック• 更新可能かどうかを事前にチェック• 全員更新可能であれば一斉にコミット、一人でもNGなら全員ロールバックXAのメリットとデメリット• メリット• 複数のデータソースに跨る一貫性を確実に担保でき実装も容易• デメリット• 広範囲の排他ロックにより性能ボトルネックになり易い従来のデータソース間のデータ整合性の担保のしくみCopyright © 2023, Oracle and/or its affiliates. All rights reserved.正常時の動作 障害時の動作リソース・マネージャOKOKトランザクション・マネージャOKNGリソース・マネージャトランザクション・マネージャ10
Sagaパターン TCCパターン XA整合性の確実さ 補償処理の失敗やトランザクション間における同一データに対する競合により一貫性が損なわれやすいトランザクション間でのデータ競合を防ぐことで一貫性を確実に保証データセットに対する排他によりトランザクションの一貫性を確実に保証整合性制御の複雑さ トランザクション参加者の処理順序や結果を踏まえた補償処理の制御が必要失敗時の回復を含めトランザクション内に閉じて容易に制御異なるトランザクション間でのデータを完全に排他することによりシンプルに制御ビジネス・データに対する排他 データアクセス単位の排他のみ 予約により異なるトランザクション間でデータが競合しない処理対象となるデータセットに対する排他ロックサービス間のデータソース分離 トランザクション参加者ごとにデータソースを分離トランザクション参加者ごとにデータソースを分離トランザクション・イニシエータが他のサービスのデータソースを直接参照主なデメリット トランザクション間での競合などを加味した補償処理の確実な自動化が困難一定期間の予約状態によりビジネス・データが遊休状態になる完全な排他により、他のトランザクションへのレイテンシや並列度に影響が生じやすい利用が想定される領域 他のトランザクションと分離されやすく、補償処理に人手が関与しやすい領域• ユーザ単位で行われる受付業務• カート→チェックアウト→配送のような長期的なトランザクション、etc.確実な一貫性が求められ、業務的に一時的な予約が許容される領域• 複数商材の一括決済、在庫を要する修理手配• デポジット型のポイント決済、etc.ACID特性の順守が必要な領域• 勘定系• システム制御マスタ、etc.Saga、TCC及びXAのトランザクション制御の特性Copyright © 2023, Oracle and/or its affiliates. All rights reserved.11
コーディネータが参加者のやり取りを仲介し、アプリケーション実装コストを軽減し、管理性を向上させる【トランザクション管理の独自実装による課題】• イニシエータ側でトランザクション制御の実装が必要• イニシエータ側でトランザクション・ログの構成が必要• トランザクション制御の実装ごとに、ログ用のストアとその運用管理も必要【コーディネータによるトランザクション管理の集約の効果】• トランザクション管理を共通フレームワーク化• イニシエータや参加者によるトランザクション制御実装が不要• トランザクション管理をイニシエータから分離して運用• ログ用ストアなどの基盤管理を集約して効率化トランザクション・コーディネータの必要性Copyright © 2023, Oracle and/or its affiliates. All rights reserved.12在庫管理サービス在庫マスタ在庫の予約ポイントサービスポイントマスタポイントの確保Try (A)OK (A)TCCトランザクション管理の実装A + B 用トランザクション・ログ(A+B用)TCC 実装ATCC 実装BCancel (A)Try (B)NG (B)Cancel (B)注文管理サービス注文マスタTryOKTCC ランザクションコーディネータトランザクション・ログ在庫管理サービス在庫マスタ在庫の予約TCCフレームワークポイントサービスポイントマスタポイントの確保TCCフレームワークCancel注文管理サービス注文マスタTCCフレームワークCancel参加者の実装に合わせた個別のトランザクション制御の実装が必要トランザクション・ログのストアなどの環境はイニシエータごとに用意して管理が必要 イニシエータの数に依らずストアなどの基盤管理を集約可能トランザクション制御の実装は一切不要
TCC/LRA(Saga)/XA 対応の分散トランザクション・コーディネーター13 Copyright © 2023, Oracle and/or its affiliates | Confidential: InternalOracle Transaction Manager for Microservices (MicroTx)■ ユースケース• マイクロサービス間におけるデータの一貫性を確保• 標準規格に準拠したトランザクション・フレームワークの導入■ 特徴• 幅広いトランザクション・プロトコルをサポート• TCC、MicroProfile LRA (Saga)、XA *• 多種のプログラミング言語に対応• Java, JavaScript (Python, C/C++, Go 対応予定)• エンタープライズ向けソリューション• 可用性、スケーラビリティ、セキュリティ、オブザーバビリティ• オラクル・データベースへの最適化、Tuxedoとの連携■ 価格Free Edition (無償) を提供中※今後Enterprise Edition をリリース予定ContainerJava AppMicroTx Lib SVC FWContainerNode.js AppMicroTx Lib SVC FWMicroTx Transaction CoordinatorContainerSagaOrchestrationTCCCoordinationXACoordination* TCC = Try-Confirm-Cancel サービス間でデータ一貫性を確保するのための処理パターンMicroProfile LRA = Long Running Actions - Eclipse MicroProfile の中の非同期分散処理のための規格XA = X/Openが策定した分散トランザクション処理のための標準規格AutonomousDatabaseMySQL DatabaseServiceExadata No SQLDatabaseDatabase XA/OpenXA Resource
主な仕様動作条件 • Kubernetes 1.21.x と互換性のある Kubernetes ディストリビューション※ インストール・バイナリは Istio サービス・メッシュを前提にした helm チャートを提供、任意のサービス・メッシュも利用可• Docker 20.10.x もしくは互換性のあるバージョン (Docker Swarm)サポートするKubernetes 環境Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)MinikubeOracle Linux Container Native Environmentサポートする言語 及び フレームワークTypeScript または JavaScript (フレームワーク: Node.js)Java (フレームワーク: Helidon, Spring Boot, WebLogic Server など Eclipse Jersey 実装の JAX-RS)サポートするXA リソース・マネージャOracle Database 19cPostgreSQL 14.2その他 XA 準拠のリソース・マネージャ: MySQL, Microsoft SQL Server などサポートするアイデンティティ・プロバイダOracle IDCSOracle IAMKeycloakMicrosoft Azure Active Directory 及び Active Directory制限事項 最大 4,800 トランザクション/時間 の制限ありトランザクション・ログ (ステート情報) はメモリーにのみ保存されるライセンス Oracle Free Use Terms and Conditionshttps://www.oracle.com/downloads/licenses/oracle-free-license.htmlOracle Transaction Manager for Microservices Free 22.3Copyright © 2023, Oracle and/or its affiliates. All rights reserved.14
MicroTx の適用例マイクロサービスにおけるサービス間のデータ整合性確保 Java EE アプリケーションのアーキテクチャ刷新15 Copyright © 2023, Oracle and/or its affiliates. All rights reserved.APPサービス AflightAPPサービス BhotelMicroTxOKE istioマイクロサービスな世界TCC/LRA/XAAPPCoordinatorMicroTx LibMicroTx LibMicroTx LibMicroTxOKE istioXA CoordinatorMicroTx LibXA対応DatabaseJava EE Application ServerAPPXA TransactionManagerAPPHelidon, SpringBoot, etc.XA対応Database• コンテナ化対応• フットプリント軽減• TXマネージャを基盤サービスとして外出し
Copyright © 2023, Oracle and/or its affiliates. All rights reserved.16デモ
Saga (LRA) デモCopyright © 2023, Oracle and/or its affiliates. All rights reserved.17予約 予約確認DatabaseIdentityDatabaseMicroTx
MicroTxによるSagaパターン実装時の一連のシーケンスMicroTx Saga Sample (成功パターン:Close)Copyright © 2023, Oracle and/or its affiliates. All rights reserved.18POST /tripPUT /complete (LRA_ID)complete (LRA_ID)clientflight-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_IDheader: LRA_ID予約予約確認MicroTxのライブラリとLRAフレームワークにより隠蔽される実装DatabaseHOTEL FLIGHTPROVISIONALPROVISIONALCONFIRMEDCONFIRMED
MicroTxによるSagaパターン実装時の一連のシーケンスMicroTx Saga Sample (失敗パターン:Cancel)Copyright © 2023, Oracle and/or its affiliates. All rights reserved.19POST /tripPUT /compensate (LRA_ID)compensate(LRA_ID)clientflight-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 500MicroTxのライブラリとLRAフレームワークにより隠蔽される実装DatabaseHOTEL FLIGHTPROVISIONALFAILEDCANCELED
Copyright © 2023, Oracle and/or its affiliates. All rights reserved.20まとめ
マイクロサービスにおけるデータ整合性の考え方• Saga 結果整合性 ~ XAトランザクション まで幅広い選択肢• 要件に応じた適切なトランザクション・モデルを選択するトランザクション・コーディネータの必要性• アプリケーションの実装コストの削減・開発期間の短縮• トランザクションの管理性向上Oracle Transaction Coordinator Microservices の特長• マイクロサービス・アーキテクチャの分散トランザクション管理を提供するトランザクション・コーディネータとライブラリ• TCCパターン、Sagaパターン、XA に対応• 多種のプログラミング言語に対応 - Java, JavaScript (今後対応予定 - Python, C/C++, Go)• 可用性、スケーラビリティ、セキュリティ、オブザーバビリティ• オラクル・データベースへの最適化、Tuxedoとの連携まとめCopyright © 2023, Oracle and/or its affiliates. All rights reserved.21
Copyright © 2023, Oracle and/or its affiliates. All rights reserved.22付録
• 2フェーズ・コミット・モデルに似ているが、TCCではデータがロックされず予約されるという点が異なる• トランザクション開始者または最初のサービス/リソースがTCCコーディネータにトランザクションを登録する• TCCコーディネータはすべての参加者の状態を保持し、確定またはキャンセルの調整を行う• 全てHTTPのVerb(メソッド)を通じて実行される• 複数のプログラミング言語フレームワークのサポートMicroTx - Try-Confirm-Cancel (TCC)Copyright © 2023, Oracle and/or its affiliates. All rights reserved.23
標準規格に準拠した Saga トランザクション・コーディネータ• MicroTxによりアプリケーションコードを簡素化• 開発者はコアなビジネスロジックに集中• Eclipse MicroProfile Long Running Actions(LRA) 仕様に準拠• 複数のプログラミング言語フレームワークのサポート• Java、Node.js• JavaでのLRAアノテーションのサポートMicroTx - Saga オーケストレーションCopyright © 2023, Oracle and/or its affiliates. All rights reserved.24
強力な一貫性のためのトランザクション管理• 高スループットと低レイテンシーのための最適化• 1フェーズ・コミット最適化• プロモータブル・トランザクション• Logging Last Resource• トランザクション管理のためのREST APIを提供• 開始、コミット、ロールバック、エンリスト• トランザクションAPIのプログラミング言語サポート• Java、Node.js• 一般的なフレームワークのサポート• Helidon、SpringBoot• オラクル・データベースに加えて、すべてのXA準拠のリソース・マネージャをサポートMicroTx - XAトランザクションCopyright © 2023, Oracle and/or its affiliates. All rights reserved.25
• 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. All rights reserved.26
Tuxedoサービスとの分散トランザクションが可能TuxedoサービスをXAトランザクションに参加できるようにする• SALT Webサービス・ゲートウェイ経由でTuxedoサービスを呼び出すTuxedoからXAトランザクションは開始できない(今後対応予定)MicroTx - Tuxedo との連携Copyright © 2023, Oracle and/or its affiliates. All rights reserved.27
Sagaパターンにおける補償トランザクションのJava規格連携するサービス間で、処理状態を判別して補償処理を調停するフレームワーク仕様• LRA (=複数のサービスによる一連の処理) 内の1つのサービスが失敗すると、他のサービスの補償処理を呼び出す• JAX-RSで呼び出されるメソッドにアノテーションを付与して調停が必要な処理をマーク• LRAの開始/終了/参加/離脱、補償処理、正常終了、etc.• LRAのコンテキストIDがHTTPヘッダで伝播されるEclipse MicroProfile LRA (Long Running Action)Copyright © 2023, Oracle and/or its affiliates. All rights reserved.@Path("/")@ApplicationScopedpublic class SimpleLRAParticipant{@LRA(LRA.Type.REQUIRES_NEW)@Path("/cdi")@PUTpublic void doInTransaction(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) URI lraId) {...}@Complete@Path("/complete")@PUTpublic Response completeWork(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) URI lraId, String data) {...}@Compensate@Path("/compensate")@PUTpublic Response compensateWork(@HeaderParam(LRA_HTTP_CONTEXT_HEADER) URI lraId, String data) {...}}呼び出されるとLRAが開始されるLRAが完了すると呼び出される(リソースのクリーンアップなどに使う)LRAがキャンセルされるとと呼び出される (補償処理に使う)成功 失敗 キャンセル (補償処理)LRAコンテキスト LRAコンテキスト28
MicroProfile LRAに対応したオラクル発のマイクロサービス・アプリケーション・フレームワークOracleがホストするOSSプロジェクト• GitHubでソースコードを公開: https://github.com/helidon-io/helidon• Helidonの商用サポートはWebLogic Server/Coherence/Verrazzanoのサポート契約に含まれるマイクロサービスアプリケーションが必要とする機能を提供するJavaライブラリの集合体• 単体のJVMとして動作し、アプリケーションサーバ不要、容易なコンテナ化• 必要なコンポーネントを追加して拡張することも可能マイクロサービスの開発・運用を支援する機能を提供• OpenMetrics(監視)、OpenTracing(追跡)、OpenAPI(API公開)• 耐障害性/回復性: ヘルスチェック、サーキット・ブレーカ2つのプログラミングモデルを提供• Helidon MP:MicroProfile標準仕様準拠の宣言的記法(Java EE開発者フレンドリー)• Helidon SE:関数的型記法HelidonCopyright © 2023, Oracle and/or its affiliates. All rights reserved.29
Our mission is to help people see data in new ways,discover insights, unlock endless possibilities.