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

MicroProfile LRAで実現するマイクロサービス間トランザクション/Transact...

MicroProfile LRAで実現するマイクロサービス間トランザクション/Transaction for Microservices with MicroProfile LRA

oracle4engineer

February 28, 2023
Tweet

More Decks by oracle4engineer

Other Decks in Technology

Transcript

  1. Copyright © 2023, Oracle and/or its affiliates. 2 1. マイクロサービス間のトランザクション整合性の考え⽅

    2. MicroProfile LRA 3. マイクロサービス間のトランザクション整合を実現するOracleソリューション 4. デモ 5. まとめ Agenda
  2. Copyright © 2023, Oracle and/or its affiliates. 3 ⾃⼰紹介 仁井⽥

    拓也 • ⽇本オラクル株式会社 • ソリューション・アーキテクト本部 • AppDev/Container/FaaS/(a little)ML… • Oracle Cloud Hangout Caféメンバー/Oracle Groundbreakers Advocate • 前職は某SIer • Oracle歴/Cloud Native歴︓4年弱 • ジブリ⼤好き(今回は⾃重) • ⾒たい⽅はぜひOCHaCafeで…!! @takuya_0301
  3. Copyright © 2023, Oracle and/or its affiliates. 5 相⼿のサービスのデータソースに直接アクセスできない •

    分散トランザクションによる⼀貫性の確保は利⽤すべきでないとされる • ⾃サービスと相⼿のサービスそれぞれの「結果整合性」により全体の⼀貫性を保つ マイクロサービスにおけるデータ整合性の考え⽅ 在庫管理 サービス 注文管理 サービス 他のサービスのデータソース に直接アクセスできない
  4. Copyright © 2023, Oracle and/or its affiliates. 6 X/Open XA

    • X/Open社による分散トランザクションの標準規格 • 2フェーズ・コミットをベースとしたデータ整合性担保のしくみ 2フェーズ・コミットの仕組み • 更新対象のデータを排他ロック • 更新可能かどうかを事前にチェック • 全員更新可能であれば⼀⻫にコミット、⼀⼈でもNGなら 全員ロールバック XAのメリットとデメリット • メリット • 複数のデータソースに跨る⼀貫性を確実に担保でき 実装も容易 • デメリット • 広範囲の排他ロックにより性能ボトルネックになり易い 【参考】従来のデータソース間のデータ整合性の担保のしくみ 正常時の動作 障害時の動作 リソース・ マネージャ prepare : consume prepare : update commit : consume commit : update OK OK トランザクション・ マネージャ prepare : consume prepare : update rollback : consume rollback : update OK NG リソース・ マネージャ トランザクション・ マネージャ
  5. Copyright © 2023, Oracle and/or its affiliates. 7 Sagaパターン 補償トランザクションによる事後結果整合性

    • 処理の成功を前提とした楽観的な呼出し⼿法 • ⼀部の処理が失敗した場合に、既に完了した処理 を取り消す「補償トランザクション」により整合性を取 る TCC (Try/Confirm/Cancel) パターン 予約ベースの事前結果整合性 • 処理完了の可否を事前に確認した上で処理を実 施 • Tryフェーズにより不整合の⽣じる処理を⾏わないこ とで整合性を担保 マイクロサービスで検討される代表的なデータ整合性の仕組み OK Insert Delete Delete Insert Fail Insert Insert OK Reserve Update Confirm Try OK Confirm Try Reserve Update
  6. Copyright © 2023, Oracle and/or its affiliates. 8 Sagaパターン 補償トランザクションによる事後結果整合性

    • 処理の成功を前提とした楽観的な呼出し⼿法 • ⼀部の処理が失敗した場合に、既に完了した処理 を取り消す「補償トランザクション」により整合性を取 る TCC (Try/Confirm/Cancel) パターン 予約ベースの事前結果整合性 • 処理完了の可否を事前に確認した上で処理を実 施 • Tryフェーズにより不整合の⽣じる処理を⾏わないこ とで整合性を担保 マイクロサービスで検討される代表的なデータ整合性の仕組み OK Insert Delete Delete Insert Fail Insert Insert OK Reserve Update Confirm Try OK Confirm Try Reserve Update
  7. • トランザクション開始者が2つの異なるデータに対してアクセスを実施 • 「注⽂処理」と⾔う1つのビジネストランザクションを”Saga”と⾔う⼀連のトランザクションで実装 • 各サービスのデータアクセスは、それぞれのローカルトランザクションで実施 Sagaパターンのトランザクションの通常ケース 注文管理 サービス 在庫管理

    サービス 在庫マスタ API 注文 2. 在庫確保 イベント・チャネル イベント・チャネル 注文マスタ 4. 注文確定 Copyright © 2023, Oracle and/or its affiliates. 9 1. 注文 3. 在庫確保OK 通常処理の依頼 通常処理の応答 通常処理フロー 5. 注文成功 通常処理フロー トランザクション① トランザクション②
  8. • 何らかの障害で処理を完了できない場合に、処理を取り消して整合性を合わせる。 • 以下の例では、注⽂マスタの更新に失敗 → 在庫修正を元に戻してもらう (=注⽂のキャンセルを発⾏) • 複数個所での障害など、補償トランザクションの設計が煩雑になりやすい →

    ⻑いトランザクションは控えるのがbetter Sagaパターンの障害ケース (補償トランザクション) 注文管理 サービス 在庫管理 サービス 在庫マスタ API 注文 2. 在庫確保 イベント・チャネル イベント・チャネル 注文マスタ 4. 注文確定の失敗 Copyright © 2023, Oracle and/or its affiliates. 10 6. 在庫戻し 1. 注文 3. 在庫確保OK 7. 在庫戻しOK 5. 注文キャンセル 通常処理の依頼 通常処理の応答 通常処理フロー 補償処理の依頼 補償処理の応答 補償処理フロー 注文確定失敗 のためキャンセル 注文のキャンセル のため在庫を戻す 6. 注文失敗 この「補償トランザクション」をJavaのエコシステムを利用してもう少し楽に実装できないか….??
  9. Copyright © 2023, Oracle and/or its affiliates. 12 マイクロサービス環境の中で動作するJavaアプリケーションの開発に必要な機能を規定 •

    マイクロサービス各種仕様に準拠 • マイクロサービスのデザインパターンを実装 • 業界規格フレームワークの恩恵 • 開発者はビジネスロジックの実装に集中でき、効率的な開発ができる • 基盤となる実装は、MicroProfileプロバイダの品質維持・向上を期待できる • ベースは Java EE (Jakarta EE) のサブセット – アプリケーション・サーバー開発経験者が取り組みやすい Eclipse MicroProfile OpenMetrics OpenTracing OpenAPI Circuit Breaker Bulk Head Health Check マイクロサービス各種仕様に準拠 マイクロサービスのデザインパターンを実装
  10. Copyright © 2023, Oracle and/or its affiliates. 13 サービス間のアクティビティ(トランザクション)を調整するためのAPI仕様 •

    https://github.com/eclipse/microprofile-lra • 最新v2.0(2023/1現在) • 2021年5⽉にGA • JAX-RSに統合 • CDI(アノテーション)とHTTPヘッダーによる伝播を利⽤ • 以下を⽬的として策定 • ⻑時間のアクティビティのサポート • サービス間を疎結合に維持 • 可能な限りのアクティビティの早期終了 • 補償トランザクションのサポート • 結果整合性 • トランザクション管理を⾏うコーディネーターが存在 MicroProfile LRA 参考:https://download.eclipse.org/microprofile/microprofile-lra-1.0/microprofile-lra-spec-1.0.pdf
  11. Copyright © 2023, Oracle and/or its affiliates. 14 LRAの処理の流れ(通常トランザクション時) PUT

    /complete (LRA_ID) complete (LRA_ID) Service2 (participants2) LRA-coordinator Service1 (participants1) initiator POST / operation (LRA_ID, xxx) POST /service2 (LRA_ID, yyy) close (LRA_ID) operation (LRA_ID, xxx) operation (LRA_ID, yyy) complete (LRA_ID) join (LRA_ID, ‘/complete’, ‘/compensate’) join (LRA_ID, ‘/complete’, ‘/compensate’) startLRA PUT /complete (LRA_ID) LRA全体のライフサイクル サービス毎のライフサイクル JAX-RS内でHTTPヘッダーを伝播 パスは任意
  12. Copyright © 2023, Oracle and/or its affiliates. 15 LRAの処理の流れ(補償トランザクション時) PUT

    /compensate (LRA_ID) compensate (LRA_ID) Service2 (participants2) LRA-coordinator Service1 (participants1) initiator POST /service1(LRA_ID, xxx) POST /service2 (LRA_ID, yyy) cancel (LRA_ID) operation (LRA_ID, xxx) operation (LRA_ID, yyy) compensate (LRA_ID) join (LRA_ID, ‘/complete’, ‘/compensate’) join (LRA_ID, ‘/complete’, ‘/compensate’) startLRA PUT /compensate (LRA_ID) 処理失敗 (エラー応答) LRA全体のライフサイクル サービス毎のライフサイクル JAX-RS内でHTTPヘッダーを伝播 パスは任意
  13. Copyright © 2023, Oracle and/or its affiliates. 16 LRAのライフサイクル(LRA全体) ActiveLRA

    トランザクションが存在 Closing トランザクションクローズ中 Closed トランザクションクローズ済 FailedToClose トランザクションクローズ失敗 Cancelling 補償トランザクション実行中 FailedToCancel 補償トランザクション実行失敗 Cancelled 補償トランザクション実行済 startLRA close cancel 正常パターン 補償トランザクションパターン
  14. Copyright © 2023, Oracle and/or its affiliates. 17 LRAのライフサイクル(サービス毎) Active

    トランザクションが存在 Completing トランザクションクローズ中 Completed トランザクションクローズ済 FailedToComplete トランザクションクローズ失敗 Compensating 補償トランザクション実行中 FailedToCompensate 補償トランザクション実行失敗 Compensated 補償トランザクション実行済 join complete compensate 正常パターン 補償トランザクションパターン
  15. Copyright © 2023, Oracle and/or its affiliates. 18 Annotation 利用用途

    @LRA LRA全体のライフサイクルを制御 ex)トランザクションの開始(startLRA) @Compensate トランザクションがキャンセルされた場合に呼び出す @Complete LRAをクローズ(正常終了)する場合に呼び出す @Forget LRAに割り当てられたリソースを解放する @Leave 参加しているトランザクションから削除する @Status LRAのステータスを報告する場合 @afterLRA LRAが最終ステート(Closed/Cancelledなど)に到達した際に呼び出す LRAで利⽤可能なアノテーション
  16. Copyright © 2023, Oracle and/or its affiliates. 19 LRAのサンプル実装 –

    initiator(クライアント)のLRA開始時の実装 - LRAに関連するアノテーション定義。LRA.Typeに定義可能な値は以下の通り。(一部のみ記載) 値 意味 MANDATORY 既存のLRAに参加(すでにLRAが実行されていることを想定) LRAが存在しない場合は412エラー REQUIRED LRAが存在しない場合、新しいLRAとして実行 REQUIRES_NEW 新しいLRAを実行
  17. Copyright © 2023, Oracle and/or its affiliates. 20 LRAのサンプル実装 –

    participant(サービス)側のoperation実装 – LRAに関連するアノテーション定義。LRA.Typeに定義可能な値は以下の通り。(一部のみ記載) 値 意味 MANDATORY 既存のLRAに参加(すでにLRAが実行されていることを想定) LRAが存在しない場合は412エラー REQUIRED LRAが存在しない場合、新しいLRAとして実行 REQUIRES_NEW 新しいLRAを実行
  18. Copyright © 2023, Oracle and/or its affiliates. 21 LRAのサンプル実装 –

    initiator(クライアント)のLRAクローズ時の実装 - LRAに関連するアノテーション定義。LRA.Typeに定義可能な値は以下の通り。(一部のみ記載) 値 意味 MANDATORY 既存のLRAに参加(すでにLRAが実行されていることを想定) LRAが存在しない場合は412エラー REQUIRED LRAが存在しない場合、新しいLRAとして実行 REQUIRES_NEW 新しいLRAを実行
  19. Copyright © 2023, Oracle and/or its affiliates. 22 LRAのサンプル実装 –

    participant(サービス)側のcomplete/compensate LRAに関連するアノテーション定義。
  20. Copyright © 2023, Oracle and/or its affiliates. 23 LRA-coordinator •

    オープンソースとしては以下が存在 • Narayana LRA Coordinator(ArjunaCore) • Experimental Helidon LRA Coordinator • コーディネーター部分の実装をユーザ側で⾯倒を⾒ るようなことはしたくない… • トランザクション・コーディネーターとしての可⽤性、信 頼性やセキュリティ性を求めたい マイクロサービス間のトランザクション実装に向けて・・・ ここが重要…!! エンタープライズ・グレードなトランザクショ ン・コーディネーターが欲しい…!!
  21. Copyright © 2023, Oracle and/or its affiliates. 24 アプリケーションフレームワーク •

    Eclipse MicroProfile規格に準拠したフレームワークの 利⽤ • MicroProfile LRAの利⽤が可能に • マイクロサービスアーキテクチャとの親和性 • 軽量フレームワーク • 柔軟な拡張性(API/フレームワークの追加が容易) • ヘルスチェックやサーキットブレイカーなど、マイクロ サービスで利⽤されるデザインパターンの機能提供 トランザクションコーディネーター • コーディネーターはベンダーが提供する信頼性の⾼ いものを利⽤ • エンタープライズ向けにも安⼼して利⽤可能な機能 の提供 • 可⽤性、スケーラビリティ、セキュリティ、オブザー バビリティなどのサポート • MicroProfile LRA(Sagaパターン)のサポートだけでは なく、他のトランザクションモデルへの対応 • TCCパターン、XAのサポート マイクロサービス間トランザクションの効率的な実装に必要な要素
  22. Copyright © 2023, Oracle and/or its affiliates. 26 アプリケーションフレームワーク •

    Eclipse MicroProfile規格に準拠したフレームワークの 利⽤ • MicroProfile LRAの利⽤が可能に • マイクロサービスアーキテクチャとの親和性 • 軽量フレームワーク • 柔軟な拡張性(API/フレームワークの追加が容易) • ヘルスチェックやサーキットブレイカーなど、マイクロ サービスで利⽤されるデザインパターンの機能提供 トランザクション・コーディネーター • コーディネーターはベンダーが提供する信頼性の⾼ いものを利⽤ • エンタープライズ向けにも安⼼して利⽤可能な機能 の提供 • 可⽤性、スケーラビリティ、セキュリティ、オブザー バビリティなどのサポート • MicroProfile LRA(Sagaパターン)のサポートだけでは なく、他のトランザクションモデルへの対応 • TCCパターン、XAのサポート マイクロサービス間トランザクションの効率的な実装に必要な要素 Project Helidon Oracle Transaction Manager for Microservices(MicroTx)
  23. Copyright © 2023, Oracle and/or its affiliates. 27 アプリケーションフレームワーク •

    Eclipse MicroProfile規格に準拠したフレームワークの 利⽤ • MicroProfile LRAの利⽤が可能に • マイクロサービスアーキテクチャとの親和性 • 軽量フレームワーク • 柔軟な拡張性(API/フレームワークの追加が容易) • ヘルスチェックやサーキットブレイカーなど、マイクロ サービスで利⽤されるデザインパターンの機能提供 トランザクション・コーディネーター • コーディネーターはベンダーが提供する信頼性の⾼ いものを利⽤ • エンタープライズ向けにも安⼼して利⽤可能な機能 の提供 • 可⽤性、スケーラビリティ、セキュリティ、オブザー バビリティなどのサポート • MicroProfile LRA(Sagaパターン)のサポートだけでは なく、他のトランザクションモデルへの対応 • TCCパターン、XAのサポート マイクロサービス間トランザクションの効率的な実装に必要な要素 Project Helidon Oracle Transaction Manager for Microservices(MicroTx)
  24. Copyright © 2023, Oracle and/or its affiliates. 28 マイクロサービス・アーキテクチャの分散トランザクション管理 を提供するトランザクション・コーディネータ

    • TCCパターン、Sagaパターン (MicroProfile LRA準拠) • XA - XA準拠のリソースマネージャに対応 トランザクション制御実装の複雑さを専⽤ライブラリが吸収 多種のプログラミング⾔語に対応 • Java, JavaScript, Python, C/C++, Go エンタープライズ向けソリューション • 可⽤性、スケーラビリティ、セキュリティ、オブザーバビリティ • オラクル・データベースへの最適化、Tuxedoとの連携 Oracle Transaction Manager for Microservices (MicroTx) TMMで全て対応可能 XA TCC LRA 同期 ACID特性 要実装コード 少 非同期 結果整合性 要実装コード 多 Oracle Transaction Manager for Microservices アーキテクチャ Container Java App TMM Lib SVC FW Container Node.js App TMM Lib SVC FW MicroTx Container Saga Orchestration TCC Coordination XA Coordination Oracle Converged Database JSON RAC RAC RAC Other Resources Transaction Log Store
  25. Copyright © 2023, Oracle and/or its affiliates. 29 Free Editionの概要

    • 無償利⽤可能(FUTC(Oracle Free Use Terms and Conditions)ライセンス) • Oracle Software Delivery Cloudにて配布 • MicroTxを利⽤したアプリケーションの開発⽅法の習得向け • 扱えるトランザクション量= 4,800 トランザクション/時間 • 商⽤版(予定)との主な違い • 運⽤管理系の機能は付随しない • 冗⻑構成なし (replicas=1) • トランザクション・ログはメモリ内 (etcdやOracle Databaseへのトランザクション・ログ永続は未対応) • 対応するKubernetesは以下に限定 • Oracle Container Engine for Kubernetes (OKE) • Oracle Cloud Native Environment (OCNE) • Minikube Oracle Transaction Manager for Microservices (MicroTx) Free Edition 22.3 https://www.oracle.com/database/technologies/transaction-manager-for-microservices-downloads.html
  26. Copyright © 2023, Oracle and/or its affiliates. 30 【参考】Oracleによるマイクロサービス環境におけるデータ・マネージメント データソースはマイクロサービス毎に

    分離して独⽴性を⾼めべきである 分散化による無駄とリスクの増加 データベースは扱うデータ・タイプに 合わせたものを選択するのが良い ガバナンス(運⽤/セキュリティ)の⽋如 多様なスキルセットが必要 サービス間のトランザクションは ⾮同期で結果整合性を確保する 状態遷移が複雑化し アプリケーション開発保守性が低下 コンテナ・データベースで 基盤運⽤を簡素化・効率化 • Relational • Key-Value • Documents • Graph • Geospatial • Cube コンバージド・データベースで 運⽤の労⼒とリスクを軽減 最適なトランザクションモデルを選択して アプリケーション開発・保守を容易化 Oracle Transaction Manger for Microservices コンバージド・データベース APP APP MicroTx Kubernetes istio トランザクション TMMLib TMMLib APP TMMLib 3つの異なる トランザクションモデル • XA • TCC • Saga 同期/ ACID ⾮同期/ 結果整合性 コンテナ・データベース 課題 ソリューション 課題 ソリューション 課題 ソリューション Service A Service B Service C
  27. Copyright © 2023, Oracle and/or its affiliates. 31 アプリケーションフレームワーク •

    Eclipse MicroProfile規格に準拠したフレームワークの 利⽤ • MicroProfile LRAの利⽤が可能に • マイクロサービスアーキテクチャとの親和性 • 軽量フレームワーク • 柔軟な拡張性(API/フレームワークの追加が容易) • ヘルスチェックやサーキットブレイカーなど、マイクロ サービスで利⽤されるデザインパターンの機能提供 トランザクション・コーディネーター • コーディネーターはベンダーが提供する信頼性の⾼ いものを利⽤ • エンタープライズ向けにも安⼼して利⽤可能な機能 の提供 • 可⽤性、スケーラビリティ、セキュリティ、オブザー バビリティなどのサポート • MicroProfile LRA(Sagaパターン)のサポートだけでは なく、他のトランザクションモデルへの対応 • TCCパターン、XAのサポート マイクロサービス間トランザクションの効率的な実装に必要な要素 Project Helidon Oracle Transaction Manager for Microservices(MicroTx)
  28. Copyright © 2023, Oracle and/or its affiliates. 32 OracleがホストするOSSプロジェクト •

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

    と MP • マイクロ・フレームワーク • 超軽量フットプリント • 関数型 • Reactive Web Server • Eclipse MicroProfile 準拠 • 軽量フットプリント • 宣言型 • Java EEサブセット + マイクロサービス関連機能 Helidon MP Helidon SE フットプリント重視 機能性重視 互換性(MicroProfile準拠)重視 ≒ + Eclipse MicroProfile + 拡張機能
  30. Copyright © 2023, Oracle and/or its affiliates. 34 Helidonのポジショニング Full

    Stack MicroProfile based Microframeworks Helidon MP Helidon SE
  31. MicroTx Saga Sample (成功パターン︓Close) Copyright © 2023, Oracle and/or its

    affiliates. 37 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 PUT /complete (LRA_ID) PUT /trip/{bookingId} header: LRA_ID header: LRA_ID 予約 予約確定 Database HOTEL FLIGHT PROVISIONAL PROVISIONAL CONFIRMED CONFIRMED
  32. MicroTx Saga Sample (失敗パターン︓Cancel) Copyright © 2023, Oracle and/or its

    affiliates. 38 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 PUT /compensate (LRA_ID) 予約処理失敗 (エラー応答) 予約 status 500 Database HOTEL FLIGHT PROVISIONAL FAILED CANCELED
  33. Copyright © 2023, Oracle and/or its affiliates. 40 Javaでのマイクロサービス間のトランザクション整合性担保 •

    マイクロサービス環境の中で動作するJavaアプリケーションの開発に必要な機能を規定したMicroProfile • マイクロサービス間のトランザクション整合性担保のための仕様であるMicroProfile LRA MicroProfile LRA • JAX-RSベースで疎結合なトランザクション管理を実行可能 • トランザクション管理はCDIの仕組みで実施 • エンタープライズ・グレードなトランザクション・コーディネーターの必要性 MicroProfile LRA実践のためのOracleソリューション(Helidon/MicroTx) • MicroProfile準拠の軽量なJavaアプリケーションフレームワーク • LRAにおけるトランザクション・コーディネータをベンダーサービスとして提供 • MicroTxはLRAだけではなく、TCC/XAもサポート まとめ
  34. Copyright © 2023, Oracle and/or its affiliates. 41 Helidon •

    https://helidon.io/ • https://github.com/helidon-io/helidon MicroTx Free • https://www.oracle.com/database/transaction-manager-for-microservices/ • https://docs.oracle.com/en/database/oracle/transaction-manager-for-microservices/22.3/index.html MicroProfile LRA • https://github.com/eclipse/microprofile-lra • https://download.eclipse.org/microprofile/microprofile-lra-1.0/microprofile-lra-spec-1.0.pdf MicroTxチュートリアル • https://oracle-japan.github.io/ocitutorials/cloud-native/microtx-for-beginners/ • https://github.com/oracle-japan/microtx-handson 参考資料