クラウド・アプリケーション・モデリングへのアプローチ

21
クラウド アプリケーション モデリング へのアプローチ 浅海智晴 Lab 2010512

Upload: tomoharu-asami

Post on 31-May-2015

1.268 views

Category:

Documents


2 download

DESCRIPTION

2010-05-14Hadoop座談会

TRANSCRIPT

Page 1: クラウド・アプリケーション・モデリングへのアプローチ

クラウド アプリケーション モデリング へのアプローチ 浅海智晴

匠Lab

2010年5月12日

Page 2: クラウド・アプリケーション・モデリングへのアプローチ

文脈

Page 3: クラウド・アプリケーション・モデリングへのアプローチ

活動の概要

Page 4: クラウド・アプリケーション・モデリングへのアプローチ

活動対象の技術

Page 5: クラウド・アプリケーション・モデリングへのアプローチ

SIMPLEMODELING

Page 6: クラウド・アプリケーション・モデリングへのアプローチ

SimpleModelingの本

Page 7: クラウド・アプリケーション・モデリングへのアプローチ

モデルの軸

Page 8: クラウド・アプリケーション・モデリングへのアプローチ

ミッシングリンク

Page 9: クラウド・アプリケーション・モデリングへのアプローチ

メッセージフロー図

Page 10: クラウド・アプリケーション・モデリングへのアプローチ

メッセージフローの理由

Page 11: クラウド・アプリケーション・モデリングへのアプローチ

SIMPLEMODELER

Page 12: クラウド・アプリケーション・モデリングへのアプローチ

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 13: クラウド・アプリケーション・モデリングへのアプローチ

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 14: クラウド・アプリケーション・モデリングへのアプローチ

クラス図

Page 15: クラウド・アプリケーション・モデリングへのアプローチ

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 16: クラウド・アプリケーション・モデリングへのアプローチ

ステートマシーン図と状態遷移表

Page 17: クラウド・アプリケーション・モデリングへのアプローチ

関連

<<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 18: クラウド・アプリケーション・モデリングへのアプローチ

G3フレームワーク

Page 19: クラウド・アプリケーション・モデリングへのアプローチ

g3 DSL例(1)

class Join extends G3Application {

agent('compute) {

case x: Int => x + 100

}

start(List(1, 2, 3, 4, 5)) split() publish("compute") join() aggregate()

}

Enterprise Integration Patterns Splitter/Aggregator

Page 20: クラウド・アプリケーション・モデリングへのアプローチ

g3 DSL 例(2)

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

}

}

RESTサービス AtomFeed

Page 21: クラウド・アプリケーション・モデリングへのアプローチ

論点

• メタモデルの対応点

• 静的構造モデル

• BASE対応

• DSLによる特性の定義とDSLコンパイラで対応できないか?

• 振舞いモデル

• 故障、遅延、規模をどう扱うか

• メッセージフローモデルで対応できないか?

• DSL

• 有効性、使いどころ

• プログラミング・モデル

• 故障、遅延、規模を扱うためのプログラミング・モデル、フレームワークはどのようなものか