Cloud Native
Component Framework
2024年9月20日
浅海智晴
クラウドアプリケーションのための
オブジェクト指向分析設計講座
第39回
アプリケーション・アーキテクチャ
SimpleModeling2021
• オブジェクト指向分析設計での共通範囲
• UML/UP
• 本講座で使用するUMLプロファイル
• プロファイル:SimpleModeling2021 (SM2021)
• オブジェクト指向分析設計の基本からの拡張部を明確化
• アジャイル開発
• Communication
• Embrace Change
• Travel Light
• Scaling
• Component-Based Development
• クラウド・アプリケーション
• モデル駆動開発
SM2021
Travel Light
Embrace Change
Cloud
Model-Driven
Scaling
CBD
Testability
Serviceability
• 非機能要件
• Testability
• Serviceability
第1部 基本編の構成(1)
• 概論 [第1回]
• 開発プロセス [第2回]
• 基本モデル [第3回]
• 静的モデル(1) [第4回]
• 静的モデル(2) [第5回]
• 動的モデル [第6回]
• 協調モデル [第7回]
• 関数モデル [第8回]
• 物理モデル [第9回]
• 作業分野 [第10回]
• ビジネス・モデリング [第11回]
• 要求 [第12回]
• 要求/ユースケース [第13回]
• 要求/シナリオ [第14回]
• 分析 [第15回]
• 分析/コンポーネント分析 [第16回]
• 分析/イベント駆動 [第17回]
• 作業分野
• 設計 [第18回]
• 設計/アーキテクチャ設計 [第19回]
• 設計/コンポーネント設計(1) [第20回]
• 設計/コンポーネント設計(2) [第21回]
• 設計/コンポーネント設計(3) [第22回]
• 設計/ドメイン設計(1) [第23回]
• 設計/ドメイン設計(2) [第24回]
• 設計/ドメイン設計(3) [第25回]
• 設計/ドメイン設計(4) [第26回]
• 設計/ドメイン設計(5) [第27回]
• 設計/原理 [第28回]
• 設計/ UX/UI設計 [第29回]
• 実装(1) [第30回]
• 実装(2) [第31回]
• 実装(3) [第32回]
• テスト [第33回]
第1部 基本編の構成(2)
• アプリケーション・アーキテクチャ [第34回]
• Cloud Native CBD [第35回]
• ドメイン・サブシステム [第36回]
• アプリケーション・サブシステム [第37回]
• プレゼンテーション・サブシステム [第38回]
• Cloud Native Component Framework [第39回]
• ケーススタディ[第40回]
• 要求モデル [第41回]
• 分析モデル [第42回]
• 設計モデル [第43回]
• 実装 [第44回]
• テスト [第45回]
本講座のアプローチ
• オブジェクト指向分析設計の基本を確認
• UML + UP(Unified Process)
• CBD (Component-Based Development)
• 最新技術でアップデート
• クラウド・コンピューティング
• イベント駆動、分散・並列
• ビッグデータ、AI、IoT
• コンテナ
• 関数型
• OFP(Object-Functional Programming), Reactive Streams
• ルール, AI
• DevOps
• アジャイル開発
• DX (Digital Transformation)
第25回 アプリケーション・アーキテクチャ
第2回 開発プロセス
第9回 物理モデル
第11回 ビジネス・モデリング
第2部 クラウド・アプリケーション編
第21回 設計/ドメイン設計
第20回 設計/コンポーネント設計
第2部 クラウド・アプリケーション編
原理 (Principle)
• Agile Software Development [ASD]
• SRP (The Single Responsibility Principle)
• OCP (The Open-Close Principle)
• LSP (The Liskov Substitution Principle)
• …
• GRASP (General Responsibility Assignment Software Patterns or principles)
• Low Coupling
• High Cohesion
• …
• Writing Effective Use Cases [WEUC]
• Scope
• …
パターン (Pattern)
• Design Patterns [DP]
• Observer, Strategy, …
• Domain Driven Design [DDD]
• Ubiquitous Language, Intention-
Revealing Interfaces, …
• Analysis Patterns [AP]
• Party, Quantity, …
• Pattern-Oriented Software
Architecture [POSA]
• Layers, Pipes and Filters, …
• Patterns of Enterprise
Application Architecture [PEAA]
• Unit of Work, Data Transfer Object,
…
• Enterprise Integration Patterns
[EIP]
• Message Bus, Aggregator, …
• Patterns for Effective Use
Cases [PEUC]
• CompleteSingleGoal,
VerbPhraseName, …
• AntiPatterns [AnP]
• Stovepipe System, Analysis
Paralysis, …
内容
• Component Framework
• Component Frameworkメカニズム
• フレームワーク機能
• Quality Attributes
Component Framework
Component Framework
• Component Framework
• コンポーネントの実装に必要な機能を提供するフレームワーク
• コンポーネントの実現時にコンポーネント・ロジック以外の関心事を
フレームワーク側でサポート
• トランザクション、並行・並列、セキュリティなど
• 第22回 コンポーネント設計(3)
• コンポーネント実現の設計ポイントをプログラミングで具体化
第9回 物理モデル
第16回 分析
第18回 設計
再掲
再掲
再掲
再掲 第20回 コンポーネント設計 (1)
コンポーネント・フレームワーク
(Component Framework)
• コンポーネントの実行基盤
• メカニズム
• DI (Dependency Injection)
• 拡張点
• 変化点
• 実行コンテキスト
• 配備
• ライブラリ管理
• モニタリング
• 機能
• ログ
• セキュリティ
• 認証、認可、監査
• 機能(続き)
• イベント駆動
• イベント
• サービス・バス
• 状態機械
• ジョブ管理
• 非同期実行
• バッチ実行
• 国際化
• RPC
• データストア入出力
• キャッシュ
• 非同期書き込み
• データ整列化
• エラー体系
Cloud
再掲 第5回 静的モデル(2)
本講座用の仮想のコンポーネント・フレー
ムワークを用いる予定
再掲 第20回 コンポーネント設計 (1)
Application FrameworkとComponent Framework 再掲 第37回 アプリケーション・サブシステム
Cloud Nativeの要件
• 要件
• Reactive
• Scalability
• Resiliency
• 制約
• Eventually Consistency
• CQRS
• メカニズム
• Event-Centric
Event-Centric
• Event Driven
• イベント駆動
• Event Centric
• Event Driven+イベントを保存
管理
• Event Sourcing
• Event Centric + イベント列で
状態を表現
• View Modelの導入が必要になる
SM2021
SM2021
Cloud Native CBD
• オブジェクト指向分析・設計をクラウド・アプリケーション開
発に適用するためのアプローチ
• CBD (Component-Based Development)をクラウド・アプリ
ケーション開発用に拡張
• キーワード
• Reactive
• Event-Driven
• Eventually Consistency
• Modular Monolith
• Microservice
CBD
再掲 第35回 Cloud Native CBD
Strong ConsistencyとEventually Consistency
再掲 第35回 Cloud Native CBD
Microservice技術関連図 再掲 第35回 Cloud Native CBD
Component Frameworkメカニズム
Component Frameworkメカニズム
• Component Frameworkの実現例
• メカニズム
• Quality Attributesへの対応
Component Frameworkメカニズム (例)
ドメイン・コンポーネントの構造(例)
再掲 第23回 ドメイン設計 (1)
実行コンテキスト (Execution Context)
• コンポーネントの実行文脈を切り替えるメカニズム
• コンポーネントのユニットテストにも必要
• スコープ
• セッション・コンテキスト
• アプリケーション・コンテキスト
• システム・コンテキスト
• 機能
• 認証済みプリンシパル
• トランザクション
• UnitOfWork
• 時間
• 日時、タイムゾーン
• 国際化
• ロケール、メッセージ、通貨
再掲 第5回 静的モデル(2)
本講座用の仮想のコンポーネント・フレームワー
クが提供する実行コンテキストを用いる予定
Execution Contextの内容
• 認証情報
• Transaction
• Job
• UnitOfWork
• 国際化
• 時間
• 乱数系列
• 数値計算精度
• Observability
OperationRouter
• 外部からのOperation呼び出しを
Operationのロジック(OperationCall)
に受け渡す
• 暗黙パラメタ(e.g. ExecutionContext)を
OperationCallにバインド
• 外部インタフェースの公開
• 通信プロトコル
• メソッド呼び出し
• REST (HTTP)
• RPC (gRPC)
• Observability
• トレース、メトリクス、ログの採取
• Security
• 認証 (Authentication)
• 認可 (Authorization)
• 監査 (Audit)
• Transaction
• トランザクションの開始と終了
• UnitOfWork
• UnitOfWorkの開始と終了
• Job Management
• ジョブの開始
• Functional
• モナド実行
• キャッシュ
• CQRS
• Serverless
第8回 関数モデル
第31回 実装(2)
第27回 設計/ドメイン設計(5)
OperationCall
• Operation呼び出しを実行する抽象オブジェクト
• 暗黙パラメタ(e.g. ExecutionContext)を管理
• 暗黙パラメタを使用したサービスをサブクラスに提供
• TransactionやUnitOfWorkなどの暗黙の処理に関与
• コンポーネント実現のためOperationCallを引き継いだ実装
クラスを作成しコンポーネント・ロジックを記述する
ReceptionRouter
• サービス・バス上の刺激
(stimulus)を対象となるReception
のロジック(ReceptionCall)に受
け渡す
• 暗黙パラメタ(e.g. ExecutionContext)
をReceptionCallにバインド
• Event-Drivenの基盤
• Observability
• トレース、メトリクス、ログの採取
• Security
• 認証 (Authentication)
• 認可 (Authorization)
• 監査 (Audit)
• Transaction
• トランザクションの開始と終了
• UnitOfWork
• UnitOfWorkの開始と終了
• Functional
• モナド実行
• Serverless
第8回 関数モデル
第31回 実装(2)
第27回 設計/ドメイン設計(5)
ReceptionCall
• Reception呼び出しを実行する抽象オブジェクト
• 暗黙パラメタ(e.g. ExecutionContext)を管理
• 暗黙パラメタを使用したサービスをサブクラスに提供
• TransactionやUnitOfWorkなどの暗黙の処理に関与
• コンポーネント実現のためReceptionCallを引き継いだ実装
クラスを作成しコンポーネント・ロジックを記述する
InvocationRouter
• 外部サービスの呼び出し
• Port & Adapter
• Observability
• トレース、メトリクス、ログの採取
SendOffRouter
• メッセージやイベントの送信
• Observability
• トレース、メトリクス、ログの採取
Foundation
• コンポーネント実現に必要な各種機能を提供
• Repository (DDD)
• オブジェクトのコレクションをエミュレートする、ストレージ、検索、
および取得の動作をカプセル化するためのメカニズム
• Aggregate (DDD)
• 一貫性を担保する単位となるオブジェクトのクラスタ
• Job Management
• Event Centricをサポートするジョブ管理機能
• UnitOfWork (PEAA)
• 処理の単位内での一貫性を担保する仕組み
Variation Point
• 変化点
• コンポーネント機能を調整するパラメタ
Extension Point
• 拡張点
• コンポーネントの機能拡張のポイント
• Port & Adapter
• 拡張ポイントに定められた要求インタフェースを実現したAdapterを
設定する
物理モデル
• Subsystem単位でDocker化して配備の単位とする
• System全体はDocker化したSubsystemをKubernetesで運用
• テスト時はテスト対象のサブシステムをMonolith構成でリンク
して直接テスト動作
• アーキテクチャ・スタイル
• Monolith
• Microservice
• Serverless
フレームワーク機能
Event
• Event Centricを実現するためのメカニズム
• ReceptionRouter
• Eventの受信とReceptionCallの起動
• SendOffRouter
• Eventの送信機能
• Event CentricなのでEvent StoreにEventの登録を行う
Security
• OperationRouter
• 認証 (Authentication)
• 認可 (Authorization)
• 監査 (Audit)
• ReceptionRouter
• 認証 (Authentication)
• 認可 (Authorization)
• 監査 (Audit)
• Foundation
Observability
• 定型的な情報はできるだけフレームワークで採取して自動化
• 対象
• トレース
• メトリクス
• 採取場所
• OperationRouter/ReceptionRouter
• InvocationRouter/SendOffRouter
• Observability機能を使いやすく
• OperationCall/ReceptionCall
• Foundation
Functional
• モナドによる関心の分離
• モナド実行
• Reactive Streams
• FreeMonad
• UnitOfWork
• 実現場所
• OperationRouter & OperationCall
• ReceptionRouter & ReceptionCall
第8回 関数モデル
第31回 実装(2)
Model操作
• コンポーネントがアクセスするモデルの操作
• Repository
• オブジェクトのコレクションをエミュレートする、ストレージ、検索、
および取得の動作をカプセル化するためのメカニズム
• CQRS
• Commandによる更新
• Queryによる検索
• Aggregate
• 一貫性を担保する単位となるオブジェクトのクラスタ
Transaction
• OperationやReceptionで行うデータベース・トランザクション
の制御
• 基本的にOperationCall/ReceptionCall側ではデータベース・ト
ランザクションを直接制御しないようにする
• 直接制御したい場合はOperationCall/ReceptionCallの登録時に設定
• 実現場所
• OperationRouter & OperationCall
• ReceptionRouter & ReceptionCall
UnitOfWork
• UnitOfWork (PEAA)
• アプリケーション側でトランザクション的なリソース管理を行
う
• DBトランザクション
• ファイル作成・更新・削除
• イベント送信
• メッセージ送信
• 「状態遷移指示」をUnitOfWorkを用いて行う
再掲 第27回 設計/ドメイン設計(5)
UnitOfWork
• UnitOfWorkの制御をOperationやReceptionで行う
• UnitOfWorkの機能はFoundationで提供
• 基本的にOperationCall/ReceptionCall側ではUnitOfWorkを直
接制御しないようにする
• 直接制御したい場合はOperationCall/ReceptionCallの登録時に設定
• 実現場所
• OperationRouter & OperationCall
• ReceptionRouter & ReceptionCall
• Foundation
Job Management
• Event CentricではEvent発生を起点に連続した処理が非同期実行さ
れるので、処理結果の管理が必要
• Long-Running Process
• 伝統的なジョブ管理のメカニズムを取り入れていく必要がある
• Task : Jobを構成する実行単位
• Job : Taskをまとめた総合的な仕事
• Saga
• 実現場所
• OperationRouter & OperationCall
• ReceptionRouter & ReceptionCall
• Foundation
Quality Attributes
Quality Attributes
Quality Attributes
• Component Frameworkがサポートする品質特性
• Cloud Native CBDによって以下の性質を受け入れた場合
• Eventually Consistency
• CQRS
• 項目
• Security
• Performance
• Scalability
• Resiliency
• Availability
• Operation Cost
Security
• 認証 (Authentication)
• OperationRouter
• ReceptionRouter
• 認可 (Authorization)
• OperationRouter
• ReceptionRouter
• 監査 (Audit)
• OperationRouter
• ReceptionRouter
Performance
• 参照系
• Cacheを活用
• 更新系
• CQRS
• Latency
• Cacheを活用
• CQRS
• Throughput
• Cacheを活用
• CQRS
• Scalabilityのメカニズム
• Cache
• OperationRouter
• Repository
• CQRS
• OperationRouter
Scalability
• Serverlessの活用
• Cacheとの利益相反
• 参照系
• Cacheを活用
• 更新系
• CQRS
• Serverless
• OperationRouter
• ReceptionRouter
• Cache
• OperationRouter
• Repository
• CQRS
• OperationRouter
Resiliency
• Event-Centricを軸に担保
• Serverlessを活用
Availability
• Resiliency & Scalabilityで担保
Operation Cost
• Serverlessを活用
• Cacheを活用
• Event-Centric
• 処理の平準化でピーク時のコストを低減
まとめ
• Cloud Native CBDをサポートするComponent Frameworkの
要件を具体的に検討
• 構造
• OperationRouter/OperationCall
• ReceptionRouter/ReceptionCall
• InvocationRouter/SendOffRouter
• Foundation
• 機能
• Event, Security, Observability, Functional, Model操作, Transaction,
UnitOfWork, Job Management
参考文献
• The Unified Modeling Language Reference
Manual, 2nd (Rumbaugh他, 2004)
• The Unified Modeling Language User Guide,
2nd (Booch他, 2004)
• The Unified Software Development Process
(Jacobson他, 1999)
• The Object Constraint Language, 2nd (Warmer
他, 2003)
• UML 2 and the Unified Process: Practical
Object-Oriented Analysis and Design (Arlow
他, 2005)
• OMG Unified Modeling Language Version 2.5
(OMG, 2015)
• 上流工程UMLモデリング (浅海, 2008)
• Strategic Monoliths and Microservices:
Driving Innovation Using Purposeful
Architecture (Vernon他, 2021)
• Continuous Architecture in Practice: Software
Architecture in the Age of Agility and DevOps
(Erder他, 2021)
• Building Event-Driven Microservices:
Leveraging Organizational Data at Scale
(Bellemare, 2020)
• Design Patterns for Cloud Native
Applications: Patterns in Practice Using APIs,
Data, Events, and Streams (Indrasiri他, 2021)
• Domain-Driven Design: Tracking Complexity
in the Heart of Software (Evans, 2003)

Cloud Native Component Framework 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第39回】