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

58
クラウド・アプリケーションの作り方 edge2.ccの挑戦 2009108浅海智晴 edge2.cc/JJUG/Lab

Upload: tomoharu-asami

Post on 24-May-2015

10.280 views

Category:

Technology


1 download

DESCRIPTION

JJUG CCC 2009 Falledge2.ccの活動で得られたもの。

TRANSCRIPT

Page 1: クラウド・アプリケーションの作り方

クラウド・アプリケーションの作り方edge2.ccの挑戦

2009年10月8日

浅海智晴

edge2.cc/JJUG/匠Lab

Page 2: クラウド・アプリケーションの作り方

edge2.cc

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

アプリケーション開発者の立場から、クラウド・アプリケーションの開発技法を確立する

要素技術、アーキテクチャ、モデリング、モデル駆動開発

モデル駆動開発の技術としてSimpleModeling&SimpleModelerを採用

ターゲットプラットフォームはGoogle App Engine Java

Page 3: クラウド・アプリケーションの作り方

関連雑誌記事

『Cloud Modeling:クラウド時代のモデリング技術』

UNIXマガジン 2009年春号

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

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

『実証研究プロジェクト「edge2.cc」の挑戦 : アプリ開発者の目線で探るクラウドの可能性と実装手段』

DBマガジン誌 11月号(9月25日発売)

Page 4: クラウド・アプリケーションの作り方

目次

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

SimpleModelerとDSL駆動開発

edge2.cc

Page 5: クラウド・アプリケーションの作り方

目次

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

SimpleModelerとDSL駆動開発

edge2.cc

Page 6: クラウド・アプリケーションの作り方

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

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

HTML5

スケーラビリティ非同期処理、並行処理、分散処理

ACIDからBASEへ

Key/Valueストレージ

分散アプリケーション故障と遅延への対応

逐次処理から並行処理へ

Page 7: クラウド・アプリケーションの作り方

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

UIWeb UIからWeb GUIへ

データベースKVS over RDBMS

並列分散処理

メッセージング指向

Page 8: クラウド・アプリケーションの作り方

Google App Engine

Googleが提供するクラウド・プラットフォームPython版:2008年4月リリース

Java版:2009年4月リリース

Googleの分散基盤であるBigTable, MapReduceなどをバックグランドにしている本格的なクラウド・プラットフォーム

PythonやJava向けに仮想的なAPIを提供BigTableやMapReduceを直接利用できるわけではない

Page 9: クラウド・アプリケーションの作り方

Google App Engine Java

最新バージョン1.2.5基本的にはServletコンテナ使用できるAPIが限られているので、フレームワークなどは完全には動作しない。RDBMSはサポートしておらず、JDBC/SQLは使用できない。DataStoreというKVS(Key/Value Storage)のみをサポートしている。

JDO/JPA/専用APIのいずれかを使用してアクセス

非同期処理の実現は手段が限られるスレッドは使用できないMOM(Message Oriented Middleware)は未サポートCronによる定期的な実行1.2.5からexperimentalとしてTaskQueueをサポート

Page 10: クラウド・アプリケーションの作り方

Google App Engine Java 1.2.5主な機能

APIServletDataStoreMemcacheURL FetchMailXMPPImagesGoogle AccountsTask Queue (Experimental)

開発環境SDKEclipse Plugin

ツールGoogle Web Tookit(Eclipse Pluginに同梱)

Page 11: クラウド・アプリケーションの作り方

GWT (Google Web Toolkit)

Javaで記述したGUIコードをJavaScriptにコンパイル

Web GUIを実現

クライアントとサーバ間の通信は専用RPCJavaのスキルでWeb UIを構築

Eclipse Plugin上のJavaでデバッグもできる

クロスブラウザにも対応

Page 12: クラウド・アプリケーションの作り方

UI:Web UIからWeb GUIへ

HTML5(+Open Web Platform)によって、Webブラウザ上で通常の(クライアント・サーバ時代の)GUIの構築が可能になる。

Web GUI

Web UIからWeb GUIへController/Action/TemplateによってHTMLをサーバ側で生成するアーキテクチャ→REST(HTTP+JSON/XML)で必要な情報のみをサーバから取得

MVC2(Webアプリケーション向け)から、MVCへ(GUIアプリケーション向け)

Page 13: クラウド・アプリケーションの作り方

UI:Google App Engine Java

クライアント側の技術には非依存HTML4でもFlashでもHTML5でも大丈夫

リフレクションやスレッドなどの機能を利用した既存のフレームワークが使えない可能性が高い

サーバ側の開発手法は変わるかも

HTML5&RESTWeb GUI向けのWebサーバとしての機能を実現する必要があるので、結局の所、サーバー側がの開発手法は変わることになる

GWTも有力な選択肢

Page 14: クラウド・アプリケーションの作り方

データベース:KVS over RDBMS

KVS(Key/Value Store)クラウドで用いられる大規模分散データストアKey/Value型

KVSの用途スケーラビリティの必要な大容量データ超安価なデータストア

KVSはRDBMSの以下の機能を持っていない。トランザクション処理SQLのJOIN、集計機能などER図でのモデリングが(そのままでは)利用できない

KVSとRDBMSの使い分けが重要なポイントできるだけKVSを使いたい

KVS:超安価、スケーラビリティ

Page 15: クラウド・アプリケーションの作り方

データベース:Google App Engine Java

Google App EngineではKVSのみをサポート(DataStore)

RDBMS/SQLは使用する事ができない

良い事:コストが超安価

悪い事:RDBMS/SQLが持つ強力なトランザクション機能や検索・集計処理を利用することができない

RDBMS/SQL指向のアプリケーション開発手法を用いることができないので、アプリケーション開発手法の根本的な見直しが必要

Page 16: クラウド・アプリケーションの作り方

並列分散処理:メッセージング指向

非同期、並列、分散を処理するために、メッセージング機能を活用。MOM(Message Oriented Middleware)

Peer-to-Peer, Publisher/SubscribeJavaの場合はJMS(Java Messaging Service)

並列分散処理フレームワークMapReduce/Hadoopメッセージング機能の上に統合されるのでは?

メッセージングを行うための統合フレームワークメッセージングの次の段階Apache Camelなど

Page 17: クラウド・アプリケーションの作り方

並列分散処理:Google App Engine Java

MOMはGoogle App Engineではまだ用意されていない

スレッドをGoogle App Engineで使用することはできない

MapReduce機能はアプリケーション向けには提供されていない

並列分散処理を記述するためのプリミティブ機能CronTaskQueue (試験的な提供)

現時点ではTaskQueue機能を用いてアプリケーションで実装する必要がある。

Page 18: クラウド・アプリケーションの作り方

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

プレゼンテーション層

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

統合層

サービス

サービス

KVS

RDBMS

メッセージ・キュー

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

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

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

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

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

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

。格納する

サービス

ドメイン層

ビジネス層

プレゼンテーション層

REST

統合層

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

クライアント側

HTML5

サービス

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

。を構築する

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

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

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

Page 19: クラウド・アプリケーションの作り方

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

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

サービス

メッセージ・キュー

サービス

メッセージ・キュー

プレゼンテーション

サービス

サービス

REST

サービス

KVS

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

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

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

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

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

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

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

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

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

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

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

メッセージ送信

同期通信

メッセージ配信

RDBMS

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

Page 20: クラウド・アプリケーションの作り方

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

第 一 段 階導 入

第 二 段 階過 渡 期

第 三 段 階本 格 適 用

H T M L5

R D B M SK V S

負 荷 分 散

H T M L5

K V SR D B M S

H T M L5

K V SR D B M S

負 荷 分 散非 同 期

分 散 処 理イ ベ ン ト 駆 動

負 荷 分 散(非 同 期 )

R ESTA tom P ub

メ ッ セ ー ジ ン グ

U I

デ ー タ ベ ー ス

ス ケ ー ラ ビ リ テ ィ

フ レ ー ム ワ ー ク

サ ー ビ ス 利 用 R ESTA tom P ub

メ ッ セ ー ジ ン グ

R EST

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

Page 21: クラウド・アプリケーションの作り方

目次

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

SimpleModelerとDSL駆動開発

edge2.cc

Page 22: クラウド・アプリケーションの作り方

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

OO分析

DSL

DSL

OO設計 OO実装

DSL

OO設計 OO実装

コンポーネント

コンポーネント

コンポーネント

コンポーネント

コンポーネント

自動生成

自動生成

自動生成

OO分析

分析 設計 実装

Page 23: クラウド・アプリケーションの作り方

PIM/PSM/実装

実装、 、(Java XML …)

PSM

PIM

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

CIM

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

DSL

DSL

Page 24: クラウド・アプリケーションの作り方

フレームワーク vs 自動生成

Google App Engine

フレームワーク

定義ファイル

アプリケーション

Google App Engine

フレームワーク

定義ファイル

アプリケーション

アプリケーション

フレームワークアプローチ

自動生成アプローチ

DSL

自動生成

Page 25: クラウド・アプリケーションの作り方

SimpleModelingの本

Page 26: クラウド・アプリケーションの作り方

SimpleModeler

http://code.google.com/p/simplemodeler/SimpleModeling用モデル・コンパイラ

テキストDSLScala DSLScala DSL&mavenによるモデル・リポジトリ

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

Page 27: クラウド・アプリケーションの作り方

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 28: クラウド・アプリケーションの作り方

SimpleModelerCSVで記述できること

yorozu.csv

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

Page 29: クラウド・アプリケーションの作り方

SimpleModelerマインドマップ(XMind)

Page 30: クラウド・アプリケーションの作り方

SimpleModelerScala DSLpackage 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 31: クラウド・アプリケーションの作り方

SimpleModelerWeb仕様書

Page 32: クラウド・アプリケーションの作り方

SimpleModelerクラス図

Page 33: クラウド・アプリケーションの作り方

SimpleModelerScala 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 34: クラウド・アプリケーションの作り方

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

Page 35: クラウド・アプリケーションの作り方

SimpleModelerGoogle App Engine/Java Servlet/JSP/Dojo Toolkit

Page 36: クラウド・アプリケーションの作り方

SimpleModelerGoogle App Engine/JavaGoogle Web Toolkit

Page 37: クラウド・アプリケーションの作り方

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

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 38: クラウド・アプリケーションの作り方

SimpleModelerによるDSL駆動開発

ドメイン・モデル(概念モデル、論理モデル)からクラウド向けの物理モデルの自動生成

クラウド・アプリケーション開発で難易度が高く、煩雑なプログラムを自動生成

ユースケース・モデルドメイン・モデルの正当性を検証

サービス・モデルを抽出

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

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

Page 39: クラウド・アプリケーションの作り方

目次

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

SimpleModelerとDSL駆動開発

edge2.cc

Page 40: クラウド・アプリケーションの作り方

edge2.cc

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

アプリケーション開発者の立場から、クラウド・アプリケーションの開発技法を確立する

要素技術、アーキテクチャ、モデリング、モデル駆動開発

モデル駆動開発の技術としてSimpleModeling&SimpleModelerを採用

ターゲットプラットフォームはGoogle App Engine Java

Page 41: クラウド・アプリケーションの作り方

TwitterRecommender

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

収集した情報をPC, iPhone, Androidで表示

目的Google App Engine/Python, Javaの味見

集合知アプリケーションの味見

SimpleModelerの活用(DSL駆動開発)モバイル技術

Google Developer Day Japan 2009のSandboxに出展

Page 42: クラウド・アプリケーションの作り方

TwitterRecommender

Page 43: クラウド・アプリケーションの作り方

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 44: クラウド・アプリケーションの作り方

TwitterRecomenderで分かったこと

HTML + REST + JSONが便利。

iPhone&AndroidはHTML5とHTML4+Gearsでかなりのことができる。

用途に応じてAtomPub, JSON, XML用の配信サーブレットが自動生成されるのは便利(今回は使用しなかったがCSVの配信機能もある)

Page 45: クラウド・アプリケーションの作り方

edge2.ccのアプローチ

UI: HTML5 (+ Open Web Platform & jQuery)

Webブラウザ側にUI処理を集約

サーバとの通信はREST(JSON)

データベース: KVSDataStore CRUD処理の自動生成

分散処理:メッセージングGoogle App Engine JavaではMOMは未サポート

Cron/TaskQueueを利用した非同期処理の自動生成

Page 46: クラウド・アプリケーションの作り方

SimpleModelerのアプローチ

UI: HTML5 (+ Open Web Platform & jQuery)

REST Servletの自動生成

データベース: KVSDataStore CRUD処理の自動生成

分散処理:メッセージングGoogle App Engine JavaではMOMは未サポート

Cron/TaskQueueを利用した非同期処理の自動生成

Page 47: クラウド・アプリケーションの作り方

edgeSNS

簡易版SNSSNS日記機能の実現

クラウド・アプリケーションの構築技術を追求するのを目的に、アプリケーションは平凡なものを選択

目的メッセージングの活用

非同期入出力の活用

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

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

Page 48: クラウド・アプリケーションの作り方

考え方

スケーラビリティを高く

応答時間は短く

スループットは高く

ログは十分な情報量をたくさん取る

でも、計算時間とデータ量は気にしない

⇒できるだけ非同期処理化する

Page 49: クラウド・アプリケーションの作り方

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 50: クラウド・アプリケーションの作り方

同期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 51: クラウド・アプリケーションの作り方

非同期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 52: クラウド・アプリケーションの作り方

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 53: クラウド・アプリケーションの作り方

モデルとレコード

山田太郎

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 54: クラウド・アプリケーションの作り方

レコードの拡張プロパティ

ドメイン・モデルの情報に加えて、KVSで管理する上で必要なプロパティを追加タイムスタンプ(version)非正規化データAtomPubに必要な情報

feed用の情報updated, titleなど

entry用の情報published, updated, title, summaryなど

SimpleModelerで自動生成(予定含む)MDEntityInfo

Page 55: クラウド・アプリケーションの作り方

テーブル管理情報

テーブル単位で保持しておく必要がある情報がある。

テーブル全体の更新時間(AtomPubで配信)レコード数、最大値、最小値アプリケーションが必要とするデータ

テーブルに対応する管理データを用意する必要がある。SimpleModelerで自動生成(予定含む)

memcacheをフロント、DataStoreバックエンド、キャッシュはread/writeロックを用いてスケーラビリティを確保(多分)MEEntityModelInfo

Page 56: クラウド・アプリケーションの作り方

履歴管理

更新履歴の保存有無更新履歴の内容

更新日時・更新者レコード内容

更新履歴の管理方法同一レコード内で更新履歴を保持レコードは追加のみとして最新レコードをフラグで有効にする(一つ前のレコードの有効フラグをfalseにする)更新履歴テーブルを別に用意

参照履歴の保存有無参照履歴の内容

参照日時・参照者レコード内容

参照履歴の管理方法同一レコード内で参照履歴を保持参照履歴テーブルを別に用意

SimpleModelerで対応予定

Page 57: クラウド・アプリケーションの作り方

話題

非正規化

事前集計count, max, minアプリケーションが必要とするデータ

スキーマ・エボリューション

AtomPubとの親和性

エラーへの対応リトライ必須、エラーログ

排他制御memcache counterを使ったread lock/write lock

EntityとDocumentの役割分担

Page 58: クラウド・アプリケーションの作り方

まとめ

edge2.ccではクラウド・アプリケーションの開発を通して、アプリケーション開発技術の実証研究を行っている。クラウド・アプリケーションではアプリケーション開発技術が刷新される

UIWeb UIからWeb GUIへ

データベースKVS over RDBMS

並列分散処理メッセージング指向

DSL駆動開発の可能性を追求。