dsl駆動によるクラウド・アプリケーション開発

80
DSL駆動によるクラウド・アプリケーション開発 SimpleModeling / SimpleModelerによるアプローチ 浅海智晴 Lab/edge2.cc/Javaユーザグループ 2009918

Upload: tomoharu-asami

Post on 31-May-2015

1.302 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: DSL駆動によるクラウド・アプリケーション開発

DSL駆動によるクラウド・アプリケーション開発 SimpleModeling / SimpleModelerによるアプローチ

浅海智晴 匠Lab/edge2.cc/Javaユーザグループ 2009年9月18日

Page 2: DSL駆動によるクラウド・アプリケーション開発

浅海のプロフィール

¡  1985年-2001年:富士通 l  UNIX OSをビジネス向けに改造する仕事

¡  ファイル管理、分散ファイルシステム、Webサーバなど ¡  信頼性、運用管理、COBOL向けの改造

l  1993年頃からオブジェクト・モデリングの調査を始める l  1995年からJavaの利用を始める l  1998年からJava&XMLのフリーソフトを開発・公開(個人活動)

¡  SmartDoc(XML文書処理系)、Relaxer(プログラム自動生成)

¡  2001年-現在:浅海智晴事務所代表 l  モデリング、XML、Javaのコンサルティング、教育活動

¡  2002、2003年度:IPA未踏に採用 l  Relaxer (DSLによるプログラムの自動生成)

¡  2005年度-2007年度:稚内北星学園大学東京サテライト校教授 ¡  2007年度-現在:日本Javaユーザグループ副会長 ¡  2009年2月-現在:edge2.cc主宰 ¡  2009年5月-現在:匠Labフェロー

Page 3: DSL駆動によるクラウド・アプリケーション開発

開発プログラム

¡  SmartDoc (1998年)[Java] l  XML文書処理系 l  専用XML文書からHTML、LaTeX、プレインテキストを生成

¡  Relaxer (2000年)[Java] l  XMLスキーマ言語RELAXをDSLとして用いたスキーマ・コンパイラ l  RELAXからJavaプログラム、W3C XML Schemaなどを生成

¡  SmartCase (2004年、試作)[Java] l  専用XML文書でユースケース・モデルを記述 l  仕様書を生成

¡  JavaDSL (2007年、試作)[Java] l  JavaをDSLのメタ言語としてオブジェクト・モデルを記述 l  Javaプログラムと仕様書を生成

¡  SimpleModler (2008年~)[Scala] l  ScalaをDSLのメタ言語としてオブジェクト・モデルを記述 l  Javaプログラムと仕様書を生成

Page 4: DSL駆動によるクラウド・アプリケーション開発

匠グループ全体コンセプト

http://www.takumi-method.biz/

Page 5: DSL駆動によるクラウド・アプリケーション開発

戦略には価値がなく、戦略と実現の融合に価値が生まれる

オペレーション

ビジネス戦略

ビジネス オペレーション

戦略

吪吏吤吐

表(価値)  裏(実現)

システム要求

后吐吝吷

表(価値) 

裏(実現)

システム設計

表(価値) 裏(実現)

What How

What

How

What How

第7回 http://itpro.nikkeibp.co.jp/article/COLUMN/20090619/332251/ 第8回 http://itpro.nikkeibp.co.jp/article/COLUMN/20090717/334022/ 第9回 http://itpro.nikkeibp.co.jp/article/COLUMN/20090825/335978/

参考: 日経 Itpro 萩本・匠style研究所 「論理的美の虚像」

Page 6: DSL駆動によるクラウド・アプリケーション開発

システム開発技術のスマイルカーブ

要求開発

業務改革業務創造 先端技術

製造

クラウド・コンピューティング

モデル駆動開発

Page 7: DSL駆動によるクラウド・アプリケーション開発

本セッションの目的

¡  DSL駆動開発によるクラウド・アプリケーション開発を概観する l  クラウド・アプリケーション l  モデリング l  DSLコンパイラ

¡  edge2.ccの取り組みを紹介

Page 8: DSL駆動によるクラウド・アプリケーション開発

関連雑誌記事

¡  『Cloud Modeling:クラウド時代のモデリング技術』 l  UNIXマガジン 2009年春号

¡  『マルチパラダイム言語Scala』 l  ITアーキテクト誌 Vol.24 (7月25日発売)

¡  『クラウド時代のWebアプリ開発作法』 l  ITアーキテクト誌 Vol.25 (9月25日発売)

¡  『実証研究プロジェクト「edge2.cc」の挑戦 : アプリ開発者の目線で探るクラウドの可能性と実装手段』 l  DBマガジン誌 11月号(9月25日発売)

Page 9: DSL駆動によるクラウド・アプリケーション開発

目次

¡ クラウド時代を確認 ¡  SimpleModeling ¡  SimpleModeler ¡  edge2.cc ¡ クラウド時代のモデリング

Page 10: DSL駆動によるクラウド・アプリケーション開発

目次

¡ クラウド時代を確認 ¡  SimpleModeling ¡  SimpleModeler ¡  edge2.cc ¡ クラウド時代のモデリング

Page 11: DSL駆動によるクラウド・アプリケーション開発

クラウドとは

クラウド

システム・プラットフォームとしてのクラウド

ソフトウェア・プラットフォームとしてのクラウド

統合プラットフォームとしてのクラウド

ホスティング

Amazon EC2

仮想化

Web

SaaS

Amazon A2S

PaaS

GooglleApp Engine

SaaS: Software as a Service PaaS: Platform as a Service

Page 12: DSL駆動によるクラウド・アプリケーション開発

Webがプラットフォームになる

OS

Java Java

Webアプリケーション

アプリケーション

アプリケーション

OS OS

Page 13: DSL駆動によるクラウド・アプリケーション開発

マーケットの変化

Web

勘定系システム

基幹系システム

情報系システム

情報系システム

勘定系システム

基幹系システム

集合知

クラウド

モバイル・デバイス

Page 14: DSL駆動によるクラウド・アプリケーション開発

クラウド・コンピューティングの意義

¡  「チープ革命」(Web 2.0)の実現 l  ソフトウェア開発・運用のコスト構造が激変

¡  クラウド時代にはさらに… l  DSL駆動開発

¡ プログラムの自動生成 l  オフショア開発

¡ 単純開発は国内に残らない l  CBD (Component-Based Development)

¡  Webプラットフォーム上でのサービス・コンポーネントの再利用

¡ マッシュアップ

Page 15: DSL駆動によるクラウド・アプリケーション開発

クラウド時代のソフトウェア開発

システム保守・運用ハードウェア保守・運用

製造

方式

業務

システム保守・運用ハードウェア保守・運用

コンポーネント開発

アーキテクチャ開発

業務

クラウドに飲み込まれてしまう!

プラットフォームの共用コンポーネント・サービスの再利用

オフショア開発プログラム自動生成

Page 16: DSL駆動によるクラウド・アプリケーション開発

DSL駆動開発&コンポーネント

OO分析

DSL

DSL

OO設計 OO実装

DSL

OO設計 OO実装

コンポーネント

コンポーネント

コンポーネント

コンポーネント

コンポーネント

自動生成

自動生成

自動生成

OO分析

分析 設計 実装

Page 17: DSL駆動によるクラウド・アプリケーション開発

目次

¡ クラウド時代を確認 ¡  SimpleModeling ¡  SimpleModeler ¡  edge2.cc ¡ クラウド時代のモデリング

Page 18: DSL駆動によるクラウド・アプリケーション開発

SimpleModelingの方針

¡  教育向け、小規模開発向けのモデリング手法 l  できるだけ小さく vs. 簡略化しすぎない l  具体的なプロファイル

¡  教科書『上流工程UMLモデリング』 ¡  モデグラミング

l  モデル駆動開発が可能なモデル体系 l  テキストDSLで表現可能なモデル体系

¡  アジャイル開発 l  モデグラミングによってモデリングをアジャイル開発に注入

¡  クラウド向けにチューニング l  問題空間重視

¡  What > How l  コラボレーション重視

¡  分散環境、ユースケース技術、状態機械 l  CBD (Component-Based Development) l  WOA (Web-Oriented Architecture) l  クラウド・データベースとRDBMS

Page 19: DSL駆動によるクラウド・アプリケーション開発

SimpleModeling技術

¡  SimpleModeling l 企業アプリケーション向けモデリング手法 l 業務モデリング、ドメイン・モデリング、要求モデリング、システム・モデリング

¡  MindmapModeling l  SimpleModelingのモデル抽出手法 l  ドメイン・モデリング(+業務モデリング)

¡  SimpleModeler l  SimpleModeling用モデル・コンパイラ

Page 20: DSL駆動によるクラウド・アプリケーション開発

SimpleModelingの本

Page 21: DSL駆動によるクラウド・アプリケーション開発

オブジェクト・モデルの構成 状態機械モデル

静的構造モデル協調モデル

ユースケース(利用事例)

ユースケース図 コミュニケーション図

シーケンス図

ステートマシーン図

クラス図をインスタンス化(実体化)したものがオブジェクト図

ユースケースを現実化したものがコミュニケーショ、ン図/シーケンス図 コミュニケーション図/シーケン

ス図を利用者の視点によるシステムの利用事例として抽象化したものがユースケース

コミュニケーション図を時間軸の側面から記述したもの

がシーケンス図オブジェクト図上でコラボレーション(メッセージの送受信の集まり)を記述したものがコミュニケーション図

オブジェクト図/クラス、図 コミュニケーション図/シーケンス図に登場するオブジェクトの状態遷移を記述

オブジェクト図

クラス図

Page 22: DSL駆動によるクラウド・アプリケーション開発

モデリング技術の本格適用

静的構造モデル

状態機械モデル

協調モデル

静的構造モデル

状態機械モデル

協調モデル

、汎用機 C/S時代 クラウド時代

Page 23: DSL駆動によるクラウド・アプリケーション開発

ドメイン・モデルをハブとした連携

ドメイン・モデル

問題空間

解決空間プラットフォーム独立

解決空間プラットフォーム固有

業務モデル

要求モデル

システム・モデル

設計モデル

抽出

拡張

追加

追加

Page 24: DSL駆動によるクラウド・アプリケーション開発

モデル変換の流れ

アプリケーション・モデル

ドメイン・モデル

問題空間解決空間

プラットフォーム非依存

解決空間プラットフォーム

固有実装

業務モデル 要求モデルシステムモデル

設計モデル 実装

業務モデリング 要求モデリング システム・モデリング 設計 実装

吠吸叻呉

吹吞呁呉吇

抽出 変換 具体化

抽出

拡張

調整

調整

実現

実現

参照

Page 25: DSL駆動によるクラウド・アプリケーション開発

モデル変換/アーキテクチャの側面から

ユースケース

具体化

具体化

詳細化

静的構造 エンティティ ドメイン層

データベース

格納

やりたいこと

ドメイン・モデル 要求モデル システム・モデル 設計モデル 実装

ドメイン層

アプリケーション層

プレゼンテーション層

実現

操作

エンド・ユーザ

具体化

コントロール

バウンダリ

ボキャブラリ

文脈

プレゼンテーション層

アプリケーション層

現実世界

動的モデル

業務モデル

抽出

抽出

利用事例

ドメイン・モデル

アプリケーション・モデル

Page 26: DSL駆動によるクラウド・アプリケーション開発

UMLの長所と短所

¡  長所 l  唯一の標準オブジェクト・モデル記法である。 l  メタ・モデルが厳密に定義されている。 l  グラフィカル言語であり、概要情報の伝達にすぐれている。

¡  短所 l  オブジェクト・モデル以外の記述には必ずしも適していない。

l  オブジェクト・モデルも完全に記述できるわけではない。 l  作成効率が必ずしも高くない。 l  モデル・リポジトリの操作性がよくない。 l  大規模開発に必ずしも適していない。 l  自然言語情報の取り扱いが不十分。

Page 27: DSL駆動によるクラウド・アプリケーション開発

Modegramming (モデグラミング)

¡  Modeling + Programming l  モデリングとプログラミングの融合

¡  テキストDSL+モデルコンパイラによるモデル駆動開発 l  DSL (Domain Specific Language)

¡  Scala DSL ¡  Mindmap DSL (MindmapModeling) ¡  Excel DSL, XML DSL, JRuby DSLなど必要に応じて

l  メタ・モデル(モデル体系) ¡  SimpleModeling

l  モデルコンパイラ ¡  SimpleModeler

Page 28: DSL駆動によるクラウド・アプリケーション開発

目次

¡ クラウド時代を確認 ¡  SimpleModeling ¡  SimpleModeler ¡  edge2.cc ¡ クラウド時代のモデリング

Page 29: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler

¡  SimpleModel用モデル・コンパイラ ¡ テキストDSL

l  Scala DSL l  Scala DSL&mavenによるモデル・リポジトリ

¡  Web仕様書、Java、Grails、Google App Engine Python/Javaを生成

Page 30: DSL駆動によるクラウド・アプリケーション開発

Scalaについて

¡  純粋オブジェクト指向言語+本格関数型言語 l  関数型言語とクラウドは相性がよいはず

¡  静的型付 ¡  Java VM上で動作 ¡  言語仕様が複雑

l  その代わり浅海の体感ではJavaの3倍ぐらいの生産性がある

¡  DSLのホスト言語として充実した機能を持っている ¡  モデル・コンパイラの実装言語として充実した機能を持っている

Page 31: DSL駆動によるクラウド・アプリケーション開発

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 32: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler CSVで記述できること yorozu.csv #actor,base,parts,attrs,powers,states,roles 顧客,,,住所 個人顧客,顧客,,,性別(男性;女性) 法人顧客,顧客 従業員,,,,,,店員 #role 店員 #resource 商品,,製品+,,,商品状態(入荷待;在庫中;配送中;販売完) 製品 #event 顧客取引,,顧客;店員 顧客購入,顧客取引,商品+

Page 33: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler マインドマップ(XMind)

Page 34: DSL駆動によるクラウド・アプリケーション開発

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 35: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler Web仕様書

Page 36: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler クラス図

Page 37: DSL駆動によるクラウド・アプリケーション開発

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 38: DSL駆動によるクラウド・アプリケーション開発

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

Page 39: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler Google App Engine/Java Servlet/JSP/Dojo Toolkit

Page 40: DSL駆動によるクラウド・アプリケーション開発

SimpleModeler Google App Engine/Java Google Web Toolkit

Page 41: DSL駆動によるクラウド・アプリケーション開発

Google App Engine/Java アプリケーション構成

index.jsp DEACustomerController DSYorozuDomainService

GwtYorozuDomainService

index.jspindex.jsp

index.jsp

index.html

GWTCustomerEditor

Dojoウィジェット

JDO

DataStore

GwtCustomer

DDCustomer

DEACustomer

HTML Form

GWT-RPC

Servlet

JSP

document

entity

Page 42: DSL駆動によるクラウド・アプリケーション開発

目次

¡ クラウド時代を確認 ¡  SimpleModeling ¡  SimpleModeler ¡  edge2.cc ¡ クラウド時代のモデリング

Page 43: DSL駆動によるクラウド・アプリケーション開発

edge2.cc

¡  Edge to Cloud Computing ¡  http://www.edge2.cc ¡  モデル駆動開発×クラウドコンピューティングの実証プロジェクト

¡  アプリケーション開発者の立場から、クラウド・アプリケーションの開発技法を確立する l  要素技術、アーキテクチャ、モデリング、モデル駆動開発 l  モデル駆動開発の技術として

SimpleModeling&SimpleModelerを採用

Page 44: DSL駆動によるクラウド・アプリケーション開発

TwitterRecommender

¡  Twitterを使用した集合知アプリケーション l  Twitterから収集したフレンド、フォロワーのリンクからソーシャルグラフを生成して、フォロワーの推奨を行う

l  収集した情報をPC, iPhone, Androidで表示 ¡  目的

l  Google App Engine/Python, Javaの味見 l  集合知アプリケーションの味見 l  SimpleModelerの活用(DSL駆動開発) l  モバイル技術

¡  Google Developer Day Japan 2009のSandboxに出展

Page 45: DSL駆動によるクラウド・アプリケーション開発

TwitterRecommender

Android

iPhone

PC (JavaSE)

iPhone

Google App Engine Python

Google App Engine Java

TwitterRecommenderEngine

iTwitterRecommender

AtomPubサービス

データストアアクセス処理

データストア

Tiwtter Recommenderon SmertWeb

SimpleModeler

モデル

Safari

Chrome

HTML5

Gears onHTML4

Twitter Popper

XML

JSON

AtomPub

JDO

自動生成

Twitter XML

SmertWeb Framework

Sync+Offline

HTML5Offline

GearsOffline

TwitterRecommenderServlet

PC

WebブラウザHTML4

Page 46: DSL駆動によるクラウド・アプリケーション開発

edgeSNS

¡  簡易版SNS l  SNS日記機能の実現 l  クラウド・アプリケーションの構築技術を追求するのを目的に、アプリケーションは平凡なものを選択

¡  目的 l  メッセージングの活用 l  非同期入出力の活用 l  メッセージング、非同期入出力の実現に対する

SimpleModelerの活用 l  メッセージングを基盤にしたコンポーネント・ベース開発

Page 47: DSL駆動によるクラウド・アプリケーション開発

edgeSNS

Publish/Subscribe

日記の書き込み KVS

日記の書き込み

KVS

Web UI(HTML5)

Peer-to-Peer

日記形式の正規化

フレンド日記一覧の更新

Twitterメッセージの取り込み

Twitter

Blog

SNS

Blogの取り込み

SNS日記の取り込み

REST

REST

REST

REST

Bad Message

通知メールの送信メール

、コンポーネントを追加することで 機能拡張を容易に行うことができる

I/Oエラーなどのエラー発生時はエラーの発生したメッセージをメッセージ・キュー

「 」 。 Bad Message に送信する

日記形式

Twitter形式

Blog形式

SNS日記形式

、Context Based Routerの手法で メッセ。ージ形式ごとにデータ変換を行う

々個 のメッセージ変換機はコンポーネン、 。トなので 容易に機能追加が可能

、Web UIはHTML5を用いて クライアント・。サーバ型のGUIとして構築する

クライアントとサーバ間の通信にはREST。を用いる

外部データの取り込みもコンポーネント、 。化されて 容易に機能拡張が可能

Page 48: DSL駆動によるクラウド・アプリケーション開発

目次

¡ クラウド時代を確認 ¡  SimpleModeling ¡  SimpleModeler ¡  edge2.cc ¡ クラウド時代のモデリング

Page 49: DSL駆動によるクラウド・アプリケーション開発

クラウド時代のモデリング

¡  CIM (Computer Independent Model) l 概念モデル l 変化なし

¡  PIM (Platform Independent Model) l 論理モデル l 少し変化:非同期、並列、分散への対応

¡  PSM (Platform Specific Model) l 物理モデル l 大きく変化:クラウド・プラットフォーム

Page 50: DSL駆動によるクラウド・アプリケーション開発

アプリケーション統合の障壁

¡  Networks are unreliable. ¡  Networks are slow. ¡  Any two applications are different. ¡  Change is inevitable.

『Enterprise Integration Patterns』より

Page 51: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーションの作法

¡ エラーの発生を前提とする。 l  Networks is are unreliable.

¡ 入出力は非同期処理を前提とする。 l  Networks are slow.

¡  Webプラットフォームを前提とする。 l  Any two applications are different.

¡ アジャイル開発を前提とする。 l  Chenge is inevitable.

Page 52: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーション

¡  Webアプリケーション l  MVC2からMVCへ l  クライアント/サーバ時代のGUIをWebで実現 l  HTML5

¡  スケーラビリティ l  非同期処理、並行処理、分散処理 l  ACIDからBASEへ

¡  Key/Valueストレージ ¡  分散アプリケーション

l  故障と遅延への対応 l  逐次処理から並行処理へ

Page 53: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーションの三つの技術

¡  UI l  Web GUI l  クライアント/サーバ時代のGUIをWebで l  HTML5

¡ データベース l  KVS (Key/Valueストレージ)

¡ 通信方式 l  メッセージング l  メッセージ・キューを用いた非同期通信

Page 54: DSL駆動によるクラウド・アプリケーション開発

スケールアップとスケールアウト

プレゼンテーション アプリケーション データベース

汎用機(1段モデル)

クライアント・サーバー(2段モデル)

Web(3段モデル)

クラウド(分散モデル?)

スケールアップ

スケールアウト スケールアップ

スケールアウトスケールアップ

スケールアウト スケールアップ

スケールアップスケールアウト

サーバー

サーバークライアント

クライアント サーバー

サーバークライアント

クライアント サーバー

Page 55: DSL駆動によるクラウド・アプリケーション開発

負荷分散

Webサーバ

アプリケーションサーバ

データベースサーバ

アプリケーションサーバ

アプリケーションサーバ

Webサーバ

Webサーバ

Webサーバ

Webサーバ

クライアント

クライアント

クライアント

クライアント

クライアント

クライアント

クライアント

クライアント

Page 56: DSL駆動によるクラウド・アプリケーション開発

非同期処理

基本処理1

基本処理2 非同期処理A

基本処理3

非同期処理B基本処理4

基本処理5

Page 57: DSL駆動によるクラウド・アプリケーション開発

分散処理

問題

部分問題A

部分問題B

部分問題C

部分問題D

部分問題E

Page 58: DSL駆動によるクラウド・アプリケーション開発

イベント駆動処理

リソース 常駐処理

イベント処理A

イベント処理B

イベント処理C

外部事象A

外部事象B

外部事象C

Page 59: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーションのアーキテクチャ

プレゼンテーション層

サーバ側クラウド・アプリケーション

統合層

サービス

サービス

KVS

RDBMS

メッセージ・キュー

:アクセス方式4 手続き呼出し、性能特性 障害特性がローカル

。の手続き呼び出しよりも脆弱

:アクセス方式5 メッセージング。分散環境での連携に適応する特性をもつ

:アクセス方式2 KVS。一般のデータはKVSに格納するのが望ましい

アクセス方式3:RESTWebページを手繰って情報を取得する

アクセス方式1: RDBMSACID特性を要求されるデータはRDBMSに

。格納する

サービス

ドメイン層

ビジネス層

プレゼンテーション層

REST

統合層

アプリケーションの論理的な構成は従来のものと変わらない

クライアント側

HTML5

サービス

クライアントはWebブラウザ上で動作するHTML5で本格的なGUI

。を構築する

プレゼンテーション層はWeb指、向のMVC2ではなく クライアント

。/サーバ時代のGUIに回帰する

、サーバ側では GUIが使用する。サービスを提供する

Page 60: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーションのアーキテクチャ例

クラウド・アプリケーション

サービス

メッセージ・キュー

サービス

メッセージ・キュー

プレゼンテーション

サービス

サービス

REST

サービス

KVS

マスターデータなど更新頻度が低いデータは。KVSで配布して直接参照する

バックエンドのサービス群もメッセージによ。って連携

、結果を直接知りたい場合には 手続き呼。び出しで同期型の連携を行う

この形式の連携を行うとスケーラビリティが。低くなる

プレゼンテーションの段階でできることをや、っておくと スケールアウトの効果によって

。スケーラビリティが高まる 外部サービスからRESTを用いて情報を取

。得するのが典型的な利用方法

KVSデータベースをアクセスするスコープは

。サービスに閉じておくのがよい

。サービス利用の主力はメッセージである この形式の連携を行うとスケールアウトに

。よってスケーラビリティを確保できる

メッセージ送信

同期通信

メッセージ配信

RDBMS

。KVSとRDBMSを適材適所で使い分ける 。可能であればKVSを使うのが望ましい

Page 61: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーションへの移行パス

第一段階導入

第二段階過渡期

第三段階本格適用

HTML5

RDBMSKVS

負荷分散

HTML5

KVSRDBMS

HTML5

KVSRDBMS

負荷分散非同期分散処理イベント駆動

負荷分散(非同期)

RESTAtomPub

メッセージング

UI

データベース

スケーラビリティ

フレームワーク

サービス利用 RESTAtomPub

メッセージング

REST

インテグレーション・フレームワーク

Page 62: DSL駆動によるクラウド・アプリケーション開発

クラウド・アプリケーションの設計技法

¡  概念モデル(要求モデル)は今までどおり l  ドメイン・モデル l  ユースケース・モデル

¡  論理モデル(PIM, Platform Independent Model) l  非同期、並列、分散を本格的に取り込む l  メッセージングによる分散コンポーネントの非同期通信

¡  物理モデル(PSM, Platform Specific Model) l  データ・モデルのKVS化

¡  非正規化(データ集約)、データ分割 l  Web技術に対応

¡  HTML5, AtomPub l  分散技術に対応

¡  メッセージング l  メッセージングを軸とした統合フレームワークの導入

Page 63: DSL駆動によるクラウド・アプリケーション開発

PIM/PSM/実装

実装、 、(Java XML …)

PSM

PIM

非機能要求 プラットフォーム

CIM

CIM : Computer Independent ModelPIM : Platform Independent ModelPSM : Platform Specific ModelDSL: Domain Specific Language

DSL

DSL

Page 64: DSL駆動によるクラウド・アプリケーション開発

SimpleModelerによるDSL駆動アプローチ

¡  ドメイン・モデル(概念モデル、論理モデル)からクラウド向けの物理モデルの自動生成 l  クラウド・アプリケーション開発で難易度が高く、煩雑なプログラムを自動生成

¡  ユースケース・モデル l  ドメイン・モデルの正当性を検証 l  サービス・モデルを抽出

¡  サービス・モデル l  RESTやAtomPubなどのサービスのAPIとエントリポイントを自動生成

¡  edgeSNSの開発を通じて実用化していく

Page 65: DSL駆動によるクラウド・アプリケーション開発

まとめ

¡ クラウド時代にはアプリケーション開発のアプローチが大きく変わる l  スケーラビリティ、遅延、故障

¡  DSL駆動開発によるクラウド・アプリケーション開発の有効性は?

¡  edge2.ccでSimpleModelerを使用したクラウド・アプリケーションのDSL駆動開発を実証実験中

Page 66: DSL駆動によるクラウド・アプリケーション開発

付録

¡  Google App Engine JavaのDataStoreのモデリングに関するメモ(SDK 1.2.4レベル)

Page 67: DSL駆動によるクラウド・アプリケーション開発

データストアの考慮点(1) ¡  JOINが使えない ¡  集約関数が使えない

l  SUM, AVR, MAX, MIN, COUNT ¡  クラス名に日本語が使えないみたい。 ¡  更新処理が遅い ¡  利用できるデータ型に制約がある。

l  java.lang.String l  com.google.appengine.api.datastore.ShortBlob l  boolean, java.lang.Boolean l  short, java.lang.Short, int, java.lang.Integer, long, java.lang.Long l  float, java.lang.Float, double, java.lang.Double l  java.util.Date l  com.google.appengine.api.users.User l  com.google.appengine.api.datastore.Text l  com.google.appengine.api.datastore.Blob l  com.google.appengine.api.datastore.Key l  com.google.appengine.api.datastore.Link

Page 68: DSL駆動によるクラウド・アプリケーション開発

データストアの考慮点(2) ¡  アプリケーション・データ以外のデータの格納

l  メタデータの格納 l  作成日付、更新日付 l  検索用の計算済みデータ

¡  メタ・エンティティ l  シーケンス番号の採番 l  総件数、最大値、最小値

¡  日付のロケール l  UTC(GMT)にすると日本時間とずれる

¡  Serializableオブジェクトの格納 l  Pythonなどとの相互運用は? l  バージョン間の相互運用は? l  回避する場合には、アプリケーションでMarshallingしなければならない

¡  Listプロパティ l  Serializeして格納? l  Pythonなどとの相互運用は? l  バージョン間の相互運用は多分大丈夫

¡  基本データ型をそのまま使うと、カラムがnullの場合NullPointerExceptionになる ¡  List型のカラムにデータがない場合には、要素数0のListではなく、nullが格納される。

Page 69: DSL駆動によるクラウド・アプリケーション開発

データ型

¡  論理モデルのデータ型 l  SimpleModelではXMLデータ型を使用

¡  アプリケーションのデータ型 l  アプリケーションが使用するデータ型

¡  JDOのデータ型 l  JDOが格納できるデータ型

¡  アプリケーションが使用するデータ型とJDOが格納できるデータ型は異なる

¡  マッピングと変換処理が必要 l  論理モデル→アプリケーション⇔JDO

Page 70: DSL駆動によるクラウド・アプリケーション開発

インデックス

¡ インデックスがない項目は検索対象にならない

¡ インデックスはカラムごとではなく、問合わせパターンごとに必要

¡ 問合わせのパターンによってはインデックスのデータ量が爆発する

¡ インデックスの項目が増えると更新処理に時間がかかる

Page 71: DSL駆動によるクラウド・アプリケーション開発

1エンティティの操作

¡  1エンティティのcreate, update, deleteはアトミックに行われる。ただし… l  1エンティティに対する多数の競合がある場合はエラー l  クオータ制限を超えている場合はエラー l  データベースの内部エラー

¡  「1エンティティに対する多数の競合がある場合はエラー」は今までのデータベースよりも簡単に発生すると思われる l  リトライ処理が重要

Page 72: DSL駆動によるクラウド・アプリケーション開発

エンティティ・グループ

¡  指定方法 l  Key作成時に明示 l  owned property

¡  トランザクション使用時に複数エンティティのアトミック処理を保障

¡  楽観ロック l  競合時には簡単にエラーとなる

¡  トランザクション使用時場合は、データストア操作はエンティティ・グループの範囲で行う必要がある l  複数のrootエンティティ(つまりエンティティ・グループを指定しないエンティティ)の更新もダメ

Page 73: DSL駆動によるクラウド・アプリケーション開発

トランザクション

¡ 同一エンティティ・グループに所属する複数のオブジェクトの同時操作に対して有効 l 複数のエンティティ・グループに対する操作はできない

¡ 楽観的ロックなのでエラーになる可能性がある l  リトライが必要 l  リトライでも救えない場合の対処も必要

Page 74: DSL駆動によるクラウド・アプリケーション開発

問合わせ1000件問題

¡  クエリが扱える物理件数は1000件まで l  検索結果が1000件以上になっても最初の1000件しか扱えない

l  当然全件検索も同様 ¡  検索結果を1000件以下に絞り込む必要がある

l  エンティティ・グループの利用 l  全件検索が必要な場合にはシーケンシャル番号の採番などの対策が必要

l  ユースケースで不用意な全件検索がないか確認

Page 75: DSL駆動によるクラウド・アプリケーション開発

非正規化

¡  実装方法 l  リスト l  embedded entity l  serializable object l  アプリケーションでXMLなどにシリアライズ

¡  RDBMSの都合でエンティティ分割を行っていた場合 l  多重度2以上のデータ型、Wholeエンティティに従属するPartエンティティ

¡  論理的に複数のエンティティで構成されている場合でも、動作性能、トランザクションに対する最適化のための非正規化が有効 l  検索対象でないエンティティは問題なく非正規化できる l  検索対象の場合も、検索用のカラムを用意して非正規化するという選択もある

Page 76: DSL駆動によるクラウド・アプリケーション開発

モデリング

¡  DataStoreの細かな機能を直接操作するのは難易度が高く、しかも煩雑 l  エンティティ・グループ l  インデックス l  非正規化 l  継承のマッピング l  トランザクション l  検索用メタ・エンティティ、プロパティの定義と操作

¡  用途ごとに使い方のパターンがあるはず l  モデリングが有効に使えるのではないか

¡  SimpleModelerのScala DSLでPIM(Platform Independent Model)を定義すると、モデルの意味・意図から自動的にGAE/Jに適した実装が生成されるのが目標

Page 77: DSL駆動によるクラウド・アプリケーション開発

ユースケース・モデル

¡  問合わせパターンを明確にする l  エンティティ設計 l  インデックス設計 l  エンティティ・グループ設計 l  埋め込みエンティティ設計

¡  責務の抽出 l  コンポーネントの抽出につなげる

¡  外部イベント、非同期、並行、分散の抽出 l  メッセージングを用いたアーキテクチャの抽出につなげる

Page 78: DSL駆動によるクラウド・アプリケーション開発

ドメイン・モデル

¡ 関連/集約/合成、Aggregateパターン ¡ エンティティ構造が内包する特性を活用

l  エンティティ ¡ owned entity ¡ embedded entity ¡ serializable object ¡ アプリケーションでシリアライズ

l  インデックス l  エンティティ・グループ

Page 79: DSL駆動によるクラウド・アプリケーション開発

関連/集約/合成

¡  関連(association)、集約(aggregation)、合成(composition)の違いを、実装に活かす。

¡  対象項目 l  エンティティ・グループ

¡ owned entity l  エンティティの埋め込み

¡ embedded entity ¡ serializable object ¡ アプリケーションでシリアライズ(XMLなど)

¡  案 l  集約はエンティティ・グループ、合成はエンティティの埋め込み

Page 80: DSL駆動によるクラウド・アプリケーション開発

Aggregateパターン

¡ 関連/集約/合成に加えて、Aggregateパターンをオブジェクトのクラスタを特定する目的で使用する

¡ 対象項目 l  エンティティ・グループ l  エンティティの埋め込み

¡ 案 l  Aggregateパターンはエンティティ・グループ l  Aggregateパターンはエンティティの埋め込み