クラウド・モデリング
DESCRIPTION
2010-05-12クラウド研究会TRANSCRIPT
![Page 1: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/1.jpg)
クラウド・モデリング 浅海智晴
匠Lab
2010年5月12日
![Page 2: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/2.jpg)
内容
• クラウド・アプリケーションのモデリング技術について、浅海の取り組みの中で考えたことをお話します。
![Page 3: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/3.jpg)
文脈
![Page 4: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/4.jpg)
オブジェクト・モデリングの確認
![Page 5: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/5.jpg)
SimpleModelingの本
![Page 6: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/6.jpg)
オブジェクト・モデルの構成 状態機械モデル
静的構造モデル協調モデル
ユースケース(利用事例)
ユースケース図 コミュニケーション図
シーケンス図
ステートマシーン図
クラス図をインスタンス化(実体化)したものがオブジェクト図
ユースケースを現実化したものがコミュニケーショ、ン図/シーケンス図 コミュニケーション図/シーケン
ス図を利用者の視点によるシステムの利用事例として抽象化したものがユースケース
コミュニケーション図を時間軸の側面から記述したもの
がシーケンス図オブジェクト図上でコラボレーション(メッセージの送受信の集まり)を記述したものがコミュニケーション図
オブジェクト図/クラス、図 コミュニケーション
図/シーケンス図に登場するオブジェクトの状態遷移を記述
オブジェクト図
クラス図
![Page 7: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/7.jpg)
SimpleModeling全体像
自然言語
オブジェクト・モデル
静的モデル
ドメイン・モデル 要求モデル システム・モデル
動的モデル
動的モデル
静的モデル
同期
変換
変換静的モデル
利用
用語
ユースケース
コラボレーション
クラス図
静的モデル 静的モデル
具体化操
作
操作
動的モデル
静的モデル具体化
クラス図
クラス図 クラス図
クラス図
コラボレーション
設計モデル
事実
アプリケーション・モデル
ドメイン・モデル
契約
動的モデル
宣言モデル
規則
OCL OCL
具体
化
ルール・モデル
契約
同期
変換
拡張
機能モデル 変換
宣言モデル
ビジネス・ルール
拡張
宣言モデル
ビジネス・ルール
サービス契約
データフロー図
OCL
![Page 8: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/8.jpg)
SimpleModelingモデル変換
ユースケース
具体化
具体化
詳細化
静的構造 エンティティ ドメイン層
データベース
格納
やりたいこと
ドメイン・モデル 要求モデル システム・モデル 設計モデル 実装
ドメイン層
アプリケーション層
プレゼンテーション層
実現
操作
エンド・ユーザ
具体化
コントロール
バウンダリ
ボキャブラリ
文脈
プレゼンテーション層
アプリケーション層
現実世界
動的モデル
業務モデル
抽出
抽出
利用事例
ドメイン・モデル
アプリケーション・モデル
![Page 9: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/9.jpg)
SVO
![Page 10: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/10.jpg)
ユースケースとSVO
![Page 11: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/11.jpg)
クラウド・アプリケーションのモデリング
![Page 12: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/12.jpg)
クラウド・アプリケーション・アーキテクチャ 論理層の観点から
プレゼンテーション層
サーバ側クラウド・アプリケーション
統合層
サービス
サービス
KVS
RDBMS
メッセージ・キュー
:アクセス方式4 手続き呼出し、性能特性 障害特性がローカル
。の手続き呼び出しよりも脆弱
:アクセス方式5 メッセージング。分散環境での連携に適応する特性をもつ
:アクセス方式2 KVS。一般のデータはKVSに格納するのが望ましい
アクセス方式3:RESTWebページを手繰って情報を取得する
アクセス方式1: RDBMSACID特性を要求されるデータはRDBMSに
。格納する
サービス
ドメイン層
ビジネス層
プレゼンテーション層
REST
統合層
アプリケーションの論理的な構成は従来のものと変わらない
クライアント側
HTML5
サービス
クライアントはWebブラウザ上で動作するHTML5で本格的なGUI
。を構築する
プレゼンテーション層はWeb指、向のMVC2ではなく クライアント
。/サーバ時代のGUIに回帰する
、サーバ側では GUIが使用する。サービスを提供する
![Page 13: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/13.jpg)
クラウド・アプリケーション・アーキテクチャの例
クラウド・アプリケーション
サービス
メッセージ・キュー
サービス
メッセージ・キュー
プレゼンテーション
サービス
サービス
REST
サービス
KVS
マスターデータなど更新頻度が低いデータは。KVSで配布して直接参照する
バックエンドのサービス群もメッセージによ。って連携
、結果を直接知りたい場合には 手続き呼。び出しで同期型の連携を行う
この形式の連携を行うとスケーラビリティが。低くなる
プレゼンテーションの段階でできることをや、っておくと スケールアウトの効果によって
。スケーラビリティが高まる 外部サービスからRESTを用いて情報を取
。得するのが典型的な利用方法
KVSデータベースをアクセスするスコープは
。サービスに閉じておくのがよい
。サービス利用の主力はメッセージである この形式の連携を行うとスケールアウトに
。よってスケーラビリティを確保できる
メッセージ送信
同期通信
メッセージ配信
RDBMS
。KVSとRDBMSを適材適所で使い分ける 。可能であればKVSを使うのが望ましい
![Page 14: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/14.jpg)
クラウドの要件とモデリング技法
エンティティ・モデル
ユースケース・モデル
データベース選択
データ分割
アクセス法解析
データ種別
責務抽出
サービス分割
非同期処理 コラボレーション
顧客要求
![Page 15: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/15.jpg)
イベントを中心にした連携
![Page 16: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/16.jpg)
ミッシングリンク
![Page 17: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/17.jpg)
メッセージフローの理由
![Page 18: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/18.jpg)
メッセージフロー図
![Page 19: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/19.jpg)
メッセージフロー図文法(α)
![Page 20: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/20.jpg)
SIMPLEMODELER
![Page 21: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/21.jpg)
SimpleModeler
• SimpleModel用モデル・コンパイラ
• テキストDSL
• Scala DSL
• Scala DSL&mavenによるモデル・リポジトリ
• Web仕様書、Java、Grails、Google App Engine Python/Javaを生成
![Page 22: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/22.jpg)
SimpleModelerの動作
企画中
CSV
Mindmap(Xmind)
SimpleModelリポジトリ(Maven project)
Web仕様書
クラス図
Javaプログラム
Grailsプログラム
convert
import
import
html
java
grails
project
Scala DSL
Excel
import
検証結果
verify
ステートマシーン図
Google App Engine/Pythonプログラム
Google App Engine Oilプログラム
gae
gaeo
テストセット
testset
Google App Engine/Javaプログラム
gaej
![Page 23: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/23.jpg)
SimpleModelerが生成するコード
index.jsp DEACustomerController
DSYorozuEntityRepositoryService
GwtYorozuEntityRepositoryServiceImpl
index.jspindex.jsp
index.jsp
index.html
GWTCustomerEditor
Dojoウィジェット
DataStore
GwtCustomer
<<document>>DDCustomer
HTML Form
GWT-RPC
Servlet
JSP
AtomYorozuDomainRepositoryServiceServlet
Atomクライアント
RESTYorozuDomainRepositoryServiceServlet
Webブラウザ(JavaScript)
Servlet
Servlet
Servlet
Atom
AtomPub
HTML FormJSON
JDO
<<entity>>DEACustomer
JDO
REST
AtomPub
GWT
Web Controller/Action/Template
EntityRepositoryService
![Page 24: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/24.jpg)
SimpleModelerでの対応方針 状態機械モデル
静的構造モデル協調モデル
ユースケース(利用事例)
ユースケース図 コミュニケーション図
シーケンス図
ステートマシーン図
クラス図をインスタンス化(実体化)したものがオブジェクト図
ユースケースを現実化したものがコミュニケーショ、ン図/シーケンス図 コミュニケーション図/シーケン
ス図を利用者の視点によるシステムの利用事例として抽象化したものがユースケース
コミュニケーション図を時間軸の側面から記述したもの
がシーケンス図オブジェクト図上でコラボレーション(メッセージの送受信の集まり)を記述したものがコミュニケーション図
オブジェクト図/クラス、図 コミュニケーション
図/シーケンス図に登場するオブジェクトの状態遷移を記述
オブジェクト図
クラス図
DSLで記述。 自動生成。
DSLで記述。 自動生成。
ユースケース、サービスをDSLで記述。 ユースケースからサービスまではモデル検証。 サービス契約からコンポーネントの 骨組みを自動生成。
G3フレームワークとの連携で精度を上げたい
![Page 25: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/25.jpg)
SimpleModelerデモ
Scala DSL package com.yorozu import org.simplemodeling.dsl._ import org.simplemodeling.dsl.datatype._ import org.simplemodeling.dsl.domain._ import org.simplemodeling.dsl.domain.values._ case class DER製品 extends DomainResource { term = "製品" caption = "製品" brief = <t></t> description = <text></text> id("製品Id", DVI製品Id()) attribute("製品Name", DVN製品Name()) } case class DVI製品Id extends DomainValueId { term = "製品Id" caption = "製品Id" brief = <t></t> description = <text></text> attribute("value", XString) } case class DVN製品Name extends DomainValueName { term = "製品Name" caption = "製品Name" brief = <t></t> description = <text></text> attribute("value", XString) }
![Page 26: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/26.jpg)
SimpleModelerデモ
Web仕様書
![Page 27: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/27.jpg)
SimpleModelerデモ
クラス図
![Page 28: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/28.jpg)
SimpleModelerデモ
Scala DSL→ステートマシーン図 package com.yorozu import org.simplemodeling.dsl._ import org.simplemodeling.dsl.datatype._ import org.simplemodeling.dsl.domain._ import org.simplemodeling.dsl.domain.values._ case class DER商品 extends DomainResource { term = "商品" caption = "商品" brief = <t></t> description = <text></text> id("商品Id", DVI商品Id()) attribute("商品Name", DVN商品Name()) association("製品", DER製品(), OneMore) statemachine(DM商品状態()) } ・・・中略・・・ case class DM商品状態 extends DomainStateMachine { term = "商品状態" caption = "商品状態" brief = <t></t> description = <text></text> state(DMS入荷待()) state(DMS在庫中()) state(DMS配送中()) state(DMS販売完()) }
case class DMS入荷待 extends DomainState { term = "入荷待" caption = "入荷待" brief = <t></t> description = <text></text> transition(DEE商品入荷(), DMS在庫中()) } case class DMS在庫中 extends DomainState { term = "在庫中" caption = "在庫中" brief = <t></t> description = <text></text> transition(DEE顧客購入(), DMS配送中()) transition(DEE顧客購入(), DMS販売完()) } case class DMS配送中 extends DomainState { term = "配送中" caption = "配送中" brief = <t></t> description = <text></text> transition(DEE商品配送(), DMS販売完()) } case class DMS販売完 extends DomainState { term = "販売完" caption = "販売完" brief = <t></t> description = <text></text> }
![Page 29: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/29.jpg)
SimpleModelerデモ
ステートマシーン図と状態遷移表
![Page 30: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/30.jpg)
SimpleModeler & AppEngine Java
• Web UI
• サービス
• エンティティ
![Page 31: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/31.jpg)
Web UI
• Web MVC→Web GUI
• HTML5/CSS3
• REST/JSON
• GWT2
• GWT-RPC
• HTML4/jQuery
• REST/JSON
![Page 32: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/32.jpg)
SimpleModeler & AppEngine/Java サービス
![Page 33: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/33.jpg)
サービス/コンポーネントの生成
コンポーネント本体リソースアダプタ
変化責務
コンポーネント本体実装
プロトコルファサード
JSONAtomPub XML WS-* CSV
<<abstract>>
<<abstract>>
<<abstract>><<abstract>>
リソースアダプタ
実装
変化責務実装
変化点
外部リソース
外部リソース
サービス契約
完全自動生成
雛形生成
![Page 34: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/34.jpg)
動的モデルの記述と実装
手続き 関数(宣言)
実装
状態機械
アクション
イベント 状態
ガード
状態機械
アクション
イベント 状態
ガード
状態機械
アクション
イベント 状態
ガード
状態機械モデル
サービスの挙動を 適切なモデルで記述
実行時は 状態機械ベースの リアクティブシステム
変換! 変換は かなり難しい
モデルを作る のが難しい 期待度大
![Page 35: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/35.jpg)
SimpleModeler & AppEngine/Java エンティティ
![Page 36: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/36.jpg)
SimpleModelerが生成するレコード • 共通属性
• 作成日時、更新日時 • 論理更新、楽観ロックなど • AtomPub
• 自己記述的 • スキーマバージョン
• スキーマエボリューション
• スキーマメタデータ • レコードのメタデータをインスタンスごとに持つ
• 更新ログ
• 論理更新、論理削除 • append-only
• AtomPubフィールド対応
![Page 37: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/37.jpg)
メタ・モデル
Event
<<event>>
Actor
<<actor>>
Resource
<<resource>>
Powertype
<<powertype>>
Service
<<service>>
Rule
<<rule>>
UseCase
<<usecase>>
Usage
<<service>>
![Page 38: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/38.jpg)
メタ・モデルのインスタンス
ドメイン
イベント
アクター
リソース
業務ユースケース
システム・ユースケース
状態機械
業務タスク
システム・タスク
業務タスクをアクターとサービス・システムの対話として具体化
業務タスクの実行によってイベントが発生する
サービス・システム外にあるオブジェクト
サービス・システム上で発生するイベント
サービス・システムが管理しているオブジェクト
アクターと業務システムの物語
アクターとサービス・システムの物語
業務ユースケースのフローの中でサービス・システムと対話するステップ
脚本
物語
登場人物
出来事
道具
イベントに参加するアクター
イベントによって更新(+参照)されるリソース
イベントによって状態が遷移する
サービス
![Page 39: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/39.jpg)
関連
<<aggregate>>
<<part>>
関連の種類 関連(association) 集約 (aggregation) 合成 (composition) whole-partの合成
多重度 1, 0..1(?), 1..N(+), 0..N(*)
DataStore Id Key, String, Long
物理ID、論理ID エンティティ参照
物理ID、論理ID
自動採番、手動採番 物理更新、論理更新 物理削除、論理削除 unary、binary リンク参照、Query参照 キャッシュ有無 トランザクション
気にしない、BASE、ACID
![Page 40: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/40.jpg)
EntityとValue Object(document) 間の転記
<<event>>DEE顧客購入
<<actor>>DEA顧客
<<actor>>DER商品
<<item>>DEI顧客購入商品明細
顧客取引番号: DVI顧客取引番号
顧客番号: DVI顧客番号
商品番号: DVI商品番号
商品番号: DVI商品番号
価格: Money
個数: XUnsignedInt
顧客名: PartyName
日時: DateTime
商品名: DVN商品名
顧客番号: DVI顧客番号
明細番号: ItemNo
<<document>>DD顧客購入依頼文書
日時: DateTime
顧客番号: DVI顧客番号
商品番号: DVI商品番号
1...N 価格: Money
個数: XUnsignedInt
在庫数: XUnsignedInt
<<document>>DD顧客購入結果文書 顧客取引番号: DVI顧客取引番号
顧客取引番号: DVI顧客取引番号
日時: DateTime
顧客番号: DVI顧客番号
商品番号: DVI商品番号
1...N価格: Money
個数: XUnsignedInt
顧客名: PartyName
商品名: DVN商品名
![Page 41: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/41.jpg)
同期write + 非同期ログwrite + 管理情報cache
Webブラウザ
アプリケーション(Servlet) Customer
Customer管理情報
TaskQueue
アプリケーション(Servlet)
処理結果ログ
memcache
アプリケーション(Servlet)
/_system/flush
/_system/event/log
/customer/c11/update-async?name=ABC_Taro
①
③
②
④
⑤
⑥
⑦
⑧
⑨
⑩
Cron
![Page 42: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/42.jpg)
非同期write
Webブラウザ
アプリケーション(Servlet)
Customer
Customer管理情報
TaskQueue
アプリケーション(Servlet)
処理結果ログ
memcache
アプリケーション(Servlet)
/_system/flush
/customer/c11/update?name=ABC_Taro
/customer/c11/update-async?name=ABC_Taro
①
③
②
④⑤
⑥
⑦
⑧
⑨
⑩
Cron
![Page 43: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/43.jpg)
powertype/区分コード
山田太郎 1
DP料金区分DEA顧客
無料
2 エントリ
3 プロフェッショナル
名前
12345ID ID 料金区分名
3料金区分
プロ料金区分
_料金区分名
2009-03-03料金区分_updated
updated
2008-10-10
2008-10-10
2009-05-05
<<actor>>DEA顧客
<<powertype>>DP料金区分
無料エントリプロフェッショナル
山田太郎
DD顧客
名前
12345ID
3料金区分
プロ料金区分
_料金区分名
![Page 44: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/44.jpg)
モデルとレコード
山田太郎
DEE注文
発効日
1234567ID
23456顧客
山田太郎顧客_名前
注文詳細
<<event>>DEE注文
<<part>>DEP注文詳細
山田太郎
DEA顧客
名前
12345ID
1..*<<actor>>DEA注文
<<resource>>DER商品
1
DEP注文詳細
135
2 246
3 369
ID 商品 商品_名前 価格
みかん
りんご
ぶどう
100
80
120
個数
5
3
8
135
246
369
ID 商品_名前 価格
みかん
りんご
ぶどう
100
80
120
updated
2009-05-05
2009-05-05
2009-05-05
2009-03-03updated
DER商品
updated 2009-09-09
![Page 45: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/45.jpg)
スキーマ・エボリューション(課題)
スキーマ V3
スキーマ V2
スキーマ V1
スキーマ V2ハンドラ
スキーマ V1ハンドラ
スキーマ V3ハンドラ
スキーマ V3エンティティ
スキーマ V1レコード
スキーマ V2レコード
スキーマ V3レコード
アプリケーション
生成
![Page 46: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/46.jpg)
G3フレームワーク
![Page 47: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/47.jpg)
G3フレームワーク
• メッセージフロー実行系
• Scala DSLで記述したメッセージフローモデルを実行する
• メッセージ、チャネル、エージェント
• 分散サービス向けの糊言語
• 故障、遅延、規模を扱う
• プラットフォーム(構想)
• ローカル環境
• スクリプト言語として
• クラウド環境
• Google App Engine
• Mule ESB/Active MQ/Spring
• Windows Azure/Amazon EC2/VMforce
![Page 48: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/48.jpg)
チャネルの構造
![Page 49: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/49.jpg)
例1
class Split4 extends G3Application {
agent('compute) {
case x: Int => x + 100
} aggregate()
start(List(1, 2, 3, 4, 5)) split() publish("compute")
}
![Page 50: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/50.jpg)
例2
class Join extends G3Application {
agent('compute) {
case x: Int => x + 100
}
start(List(1, 2, 3, 4, 5)) split() publish("compute") join() aggregate()
}
![Page 51: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/51.jpg)
例3
class TwitterScan extends G3Application {
service('demogon, "http://[user]:[password]@twitter.com/statuses/user_timeline/[user].atom")
start invoke("demogon") agent {
case AtomFeed(feed) => feed.toString
case _ => "???"
} agent {
x => println("==> " + x)
x
}
}
![Page 52: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/52.jpg)
まとめ
• 静的モデル
• 基本的なモデリングの枠組みは同じでよさそう
• クラウド(BASEなど)を意識した追加定義で対応
• DSLからの自動生成はかなりできそう
• モデルに記述した各種特性から最適なコードを生成する
• 動的モデル
• 状態遷移モデルはモデル定義可能、自動生成可能
• ただし適用範囲が狭い
• 振舞いモデルに工夫が必要
• 浅海のアプローチはメッセージフローモデルの導入
• メッセージフロー図
• メッセージフローDSL&実行フレームワーク
• SimpleModelerでのDSL定義&自動生成も行いたい
![Page 53: クラウド・モデリング](https://reader030.vdocuments.net/reader030/viewer/2022013118/556a73e2d8b42a7c758b45af/html5/thumbnails/53.jpg)
End