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


2009年10月8日
浅海智晴
edge2.cc/JJUG/匠Lab
edge2.cc
 Edge to Cloud Computing
 http://www.edge2.cc
 モデル駆動開発×クラウドコンピューティングの実
 証プロジェクト
 アプリケーション開発者の立場から、クラウド・アプ
 リケーション...
関連雑誌記事
『Cloud Modeling:クラウド時代のモデリング技
術』
 UNIXマガジン 2009年春号
『マルチパラダイム言語Scala』
 ITアーキテクト誌 Vol.24 (7月25日発売)
『クラウド時代のWebアプリ開発作法...
目次

クラウド・アプリケーション
SimpleModelerとDSL駆動開発
edge2.cc
目次

クラウド・アプリケーション
SimpleModelerとDSL駆動開発
edge2.cc
クラウド・アプリケーション

 Webアプリケーション
  Web UIからWeb GUIへ
  クライアント/サーバ時代のGUIをWebで実現
  HTML5
 スケーラビリティ
  非同期処理、並行処理、分散処理
  ACIDからBASEへ...
クラウド・アプリケーションの三つの技術

UI
  Web UIからWeb GUIへ
データベース
  KVS over RDBMS
並列分散処理
  メッセージング指向
Google App Engine
 Googleが提供するクラウド・プラットフォーム
   Python版:2008年4月リリース
   Java版:2009年4月リリース
 Googleの分散基盤であるBigTable,
 MapReduc...
Google App Engine Java
 最新バージョン1.2.5
 基本的にはServletコンテナ
 使用できるAPIが限られているので、フレームワークなどは
 完全には動作しない。
 RDBMSはサポートしておらず、JDBC/SQL...
Google App Engine Java 1.2.5
主な機能
 API
   Servlet
   DataStore
   Memcache
   URL Fetch
   Mail
   XMPP
   Images
   Googl...
GWT (Google Web Toolkit)

 Javaで記述したGUIコードをJavaScriptに
 コンパイル
 Web GUIを実現
 クライアントとサーバ間の通信は専用RPC
 JavaのスキルでWeb UIを構築
   Ecl...
UI:Web UIからWeb GUIへ
 HTML5(+Open Web Platform)によって、Web
 ブラウザ上で通常の(クライアント・サーバ時代
 の)GUIの構築が可能になる。
  Web GUI
 Web UIからWeb GUI...
UI:Google App Engine Java
 クライアント側の技術には非依存
   HTML4でもFlashでもHTML5でも大丈夫
 リフレクションやスレッドなどの機能を利用した既存
 のフレームワークが使えない可能性が高い
   サ...
データベース:KVS over RDBMS
 KVS(Key/Value Store)
   クラウドで用いられる大規模分散データストア
   Key/Value型
 KVSの用途
   スケーラビリティの必要な大容量データ
   超安価なデー...
データベース:Google App Engine Java

 Google App EngineではKVSのみをサポート
 (DataStore)
   RDBMS/SQLは使用する事ができない
   良い事:コストが超安価
   悪い事:R...
並列分散処理:メッセージング指向
非同期、並列、分散を処理するために、メッセージ
ング機能を活用。
MOM(Message Oriented Middleware)
 Peer-to-Peer, Publisher/Subscribe
 Jav...
並列分散処理:Google App Engine Java

 MOMはGoogle App Engineではまだ用意されていない
 スレッドをGoogle App Engineで使用することはできない
 MapReduce機能はアプリケーショ...
クラウド・アプリケーションのアーキテク
             チャ
                                                 サーバ側では、 GUIが使用する
                    ...
クラウド・アプリケーションのアーキテク
                    チャ例
                                     マスターデータなど更新頻度が低いデータは
                    ...
クラウド・アプリケーションへの移行パス
             第一段階      第二段階               第三段階
              導入        過渡期               本格適用



     ...
目次

クラウド・アプリケーション
SimpleModelerとDSL駆動開発
edge2.cc
DSL駆動開発&コンポーネント
      分析           設計         実装



             DSL           自動生成      コンポーネント

      OO分析

            ...
PIM/PSM/実装

                           CIM : Computer Independent Model
                  DSL      PIM : Platform Independ...
フレームワーク vs 自動生成

                      アプリケーション

  アプリケーション                                      DSL


                   ...
SimpleModelingの本
SimpleModeler

 http://code.google.com/p/simplemo
 deler/
 SimpleModeling用モデル・コンパイラ
 テキストDSL
   Scala DSL
   Scala DSL&mav...
SimpleModelerの動作
                                                                                   Web仕様書


             ...
SimpleModeler
CSVで記述できること
yorozu.csv

#actor,base,parts,attrs,powers,states,roles
顧客,,,住所
個人顧客,顧客,,,性別(男性;女性)
法人顧客,顧客
従業員,...
SimpleModeler
マインドマップ(XMind)
SimpleModeler
Scala DSL
package com.yorozu                                case class DVI製品Id extends
                     ...
SimpleModeler
Web仕様書
SimpleModeler
クラス図
SimpleModeler
Scala DSL→ステートマシーン図
package com.yorozu
                                                  case class DMS入荷待 e...
SimpleModeler
ステートマシーン図と状態遷移表
SimpleModeler
Google App Engine/Java
Servlet/JSP/Dojo Toolkit
SimpleModeler
Google App Engine/Java
Google Web Toolkit
Google App Engine/Java
   アプリケーション構成
Web Controller/
Action/Template                      HTML Form
                      ...
SimpleModelerによるDSL駆動開発

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

クラウド・アプリケーション
SimpleModelerとDSL駆動開発
edge2.cc
edge2.cc
 Edge to Cloud Computing
 http://www.edge2.cc
 モデル駆動開発×クラウドコンピューティングの実
 証プロジェクト
 アプリケーション開発者の立場から、クラウド・アプ
 リケーション...
TwitterRecommender
 Twitterを使用した集合知アプリケーション
   Twitterから収集したフレンド、フォロワーのリンクから
   ソーシャルグラフを生成して、フォロワーの推奨を行う
   収集した情報をPC, iP...
TwitterRecommender
TwitterRecommender
                                                                                                       ...
TwitterRecomenderで分かったこと

 HTML + REST + JSONが便利。
 iPhone&AndroidはHTML5と
 HTML4+Gearsでかなりのことができる。
 用途に応じてAtomPub, JSON, XM...
edge2.ccのアプローチ
 UI: HTML5 (+ Open Web Platform &
 jQuery)
   Webブラウザ側にUI処理を集約
   サーバとの通信はREST(JSON)
 データベース: KVS
   DataSt...
SimpleModelerのアプローチ
 UI: HTML5 (+ Open Web Platform &
 jQuery)
   REST Servletの自動生成
 データベース: KVS
   DataStore CRUD処理の自動生成
...
edgeSNS
 簡易版SNS
  SNS日記機能の実現
  クラウド・アプリケーションの構築技術を追求するのを目
  的に、アプリケーションは平凡なものを選択
 目的
  メッセージングの活用
  非同期入出力の活用
  メッセージング、非同...
考え方

 スケーラビリティを高く
 応答時間は短く
 スループットは高く
 ログは十分な情報量をたくさん取る
 でも、計算時間とデータ量は気にしない
⇒できるだけ非同期処理化する
edgeSNS
                                      クライアントとサーバ間の通信にはREST
                                      を用いる。

Web UIはHTM...
同期write +
非同期ログwrite + 管理情報cache
                   /customer/c11/update-async?name=ABC_Taro


                           ...
非同期write
                   /customer/c11/update-async?name=ABC_Taro


                                              アプリケー...
powertype/区分コード
                             <<actor>>              <<powertype>>
                             DEA顧客      ...
モデルとレコード
                                                                           1..*
                       <<actor>> ...
レコードの拡張プロパティ
ドメイン・モデルの情報に加えて、KVSで管理する
上で必要なプロパティを追加
タイムスタンプ(version)
非正規化データ
AtomPubに必要な情報
 feed用の情報
    updated, titleなど
...
テーブル管理情報
テーブル単位で保持しておく必要がある情報があ
る。
 テーブル全体の更新時間(AtomPubで配信)
 レコード数、最大値、最小値
 アプリケーションが必要とするデータ
テーブルに対応する管理データを用意する必要が
ある。
S...
履歴管理
更新履歴の保存
   有無
   更新履歴の内容
      更新日時・更新者
      レコード内容
   更新履歴の管理方法
      同一レコード内で更新履歴を保持
      レコードは追加のみとして最新レコードをフラグで...
話題
非正規化
事前集計
  count, max, min
  アプリケーションが必要とするデータ
スキーマ・エボリューション
AtomPubとの親和性
エラーへの対応
  リトライ必須、エラーログ
排他制御
  memcache count...
まとめ
edge2.ccではクラウド・アプリケーションの開発を
通して、アプリケーション開発技術の実証研究を
行っている。
クラウド・アプリケーションではアプリケーション開発
技術が刷新される
 UI
      Web UIからWeb GUI...
Upcoming SlideShare
Loading in...5
×

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

10,623
-1

Published on

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

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
10,623
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
77
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

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

  1. 1. クラウド・アプリケーションの作り方 edge2.ccの挑戦 2009年10月8日 浅海智晴 edge2.cc/JJUG/匠Lab
  2. 2. edge2.cc Edge to Cloud Computing http://www.edge2.cc モデル駆動開発×クラウドコンピューティングの実 証プロジェクト アプリケーション開発者の立場から、クラウド・アプ リケーションの開発技法を確立する 要素技術、アーキテクチャ、モデリング、モデル駆動開発 モデル駆動開発の技術として SimpleModeling&SimpleModelerを採用 ターゲットプラットフォームはGoogle App Engine Java
  3. 3. 関連雑誌記事 『Cloud Modeling:クラウド時代のモデリング技 術』 UNIXマガジン 2009年春号 『マルチパラダイム言語Scala』 ITアーキテクト誌 Vol.24 (7月25日発売) 『クラウド時代のWebアプリ開発作法』 ITアーキテクト誌 Vol.25 (9月25日発売) 『実証研究プロジェクト「edge2.cc」の挑戦 : アプ リ開発者の目線で探るクラウドの可能性と実装手 段』 DBマガジン誌 11月号(9月25日発売)
  4. 4. 目次 クラウド・アプリケーション SimpleModelerとDSL駆動開発 edge2.cc
  5. 5. 目次 クラウド・アプリケーション SimpleModelerとDSL駆動開発 edge2.cc
  6. 6. クラウド・アプリケーション Webアプリケーション Web UIからWeb GUIへ クライアント/サーバ時代のGUIをWebで実現 HTML5 スケーラビリティ 非同期処理、並行処理、分散処理 ACIDからBASEへ Key/Valueストレージ 分散アプリケーション 故障と遅延への対応 逐次処理から並行処理へ
  7. 7. クラウド・アプリケーションの三つの技術 UI Web UIからWeb GUIへ データベース KVS over RDBMS 並列分散処理 メッセージング指向
  8. 8. Google App Engine Googleが提供するクラウド・プラットフォーム Python版:2008年4月リリース Java版:2009年4月リリース Googleの分散基盤であるBigTable, MapReduceなどをバックグランドにしている本格 的なクラウド・プラットフォーム PythonやJava向けに仮想的なAPIを提供 BigTableやMapReduceを直接利用できるわけではな い
  9. 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をサポート
  10. 10. Google App Engine Java 1.2.5 主な機能 API Servlet DataStore Memcache URL Fetch Mail XMPP Images Google Accounts Task Queue (Experimental) 開発環境 SDK Eclipse Plugin ツール Google Web Tookit(Eclipse Pluginに同梱)
  11. 11. GWT (Google Web Toolkit) Javaで記述したGUIコードをJavaScriptに コンパイル Web GUIを実現 クライアントとサーバ間の通信は専用RPC JavaのスキルでWeb UIを構築 Eclipse Plugin上のJavaでデバッグもできる クロスブラウザにも対応
  12. 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ア プリケーション向け)
  13. 13. UI:Google App Engine Java クライアント側の技術には非依存 HTML4でもFlashでもHTML5でも大丈夫 リフレクションやスレッドなどの機能を利用した既存 のフレームワークが使えない可能性が高い サーバ側の開発手法は変わるかも HTML5&REST Web GUI向けのWebサーバとしての機能を実現する必 要があるので、結局の所、サーバー側がの開発手法は 変わることになる GWTも有力な選択肢
  14. 14. データベース:KVS over RDBMS KVS(Key/Value Store) クラウドで用いられる大規模分散データストア Key/Value型 KVSの用途 スケーラビリティの必要な大容量データ 超安価なデータストア KVSはRDBMSの以下の機能を持っていない。 トランザクション処理 SQLのJOIN、集計機能など ER図でのモデリングが(そのままでは)利用できない KVSとRDBMSの使い分けが重要なポイント できるだけKVSを使いたい KVS:超安価、スケーラビリティ
  15. 15. データベース:Google App Engine Java Google App EngineではKVSのみをサポート (DataStore) RDBMS/SQLは使用する事ができない 良い事:コストが超安価 悪い事:RDBMS/SQLが持つ強力なトランザクション機 能や検索・集計処理を利用することができない RDBMS/SQL指向のアプリケーション開発手法を 用いることができないので、アプリケーション開発手 法の根本的な見直しが必要
  16. 16. 並列分散処理:メッセージング指向 非同期、並列、分散を処理するために、メッセージ ング機能を活用。 MOM(Message Oriented Middleware) Peer-to-Peer, Publisher/Subscribe Javaの場合はJMS(Java Messaging Service) 並列分散処理フレームワーク MapReduce/Hadoop メッセージング機能の上に統合されるのでは? メッセージングを行うための統合フレームワーク メッセージングの次の段階 Apache Camelなど
  17. 17. 並列分散処理:Google App Engine Java MOMはGoogle App Engineではまだ用意されていない スレッドをGoogle App Engineで使用することはできない MapReduce機能はアプリケーション向けには提供されてい ない 並列分散処理を記述するためのプリミティブ機能 Cron TaskQueue (試験的な提供) 現時点ではTaskQueue機能を用いてアプリケーションで実 装する必要がある。
  18. 18. クラウド・アプリケーションのアーキテク チャ サーバ側では、 GUIが使用する サービスを提供する。 クライアントはWebブラウザ上で 動作するHTML5で本格的なGUI プレゼンテーション層 を構築する。 クラウド・アプリケーション クライアント側 サーバ側 アプリケーションの論理的な構成は 従来のものと変わらない プレゼンテーション層 HTML5 サービス ビジネス層 ドメイン層 プレゼンテーション層はWeb指 統合層 アクセス方式1: RDBMS 向のMVC2ではなく、 クライアント ACID特性を要求されるデータはRDBMSに アクセス方式4: 手続き呼出し /サーバ時代のGUIに回帰する。 格納する。 性能特性、 障害特性がローカル の手続き呼び出しよりも脆弱 。 アクセス方式5: メッセージング 統合層 分散環境での連携に適応する特性をもつ。 RDBMS メッセージ・キュー アクセス方式2: KVS KVS 一般のデータはKVSに格納するのが望ましい 。 サービス REST サービス アクセス方式3:REST Webページを手繰って情報を取得する サービス
  19. 19. クラウド・アプリケーションのアーキテク チャ例 マスターデータなど更新頻度が低いデータは KVSで配布して直接参照する 。 結果を直接知りたい場合には 、 手続き呼 KVS び出しで同期型の連携を行う。 この形式の連携を行うとスケーラビリティが 低くなる。 プレゼンテーションの段階でできることをや っておくと 、 スケールアウトの効果によって クラウド・アプリケーション スケーラビリティが高まる 。 外部サービスからRESTを用いて情報を取 得するのが典型的な利用方法 。 サービス利用の主力はメッセージである 。 プレゼンテーション サービス サービス この形式の連携を行うとスケールアウトに よってスケーラビリティを確保できる。 サービス バックエンドのサービス群もメッセージによ メッセージ・キュー REST って連携 。 サービス メッセージ・キュー 同期通信 サービス メッセージ送信 メッセージ配信 KVS RDBMS データベースをアクセスするスコープは サービスに閉じておくのがよい 。 KVSとRDBMSを適材適所で使い分ける 。 可能であればKVSを使うのが望ましい 。
  20. 20. クラウド・アプリケーションへの移行パス 第一段階 第二段階 第三段階 導入 過渡期 本格適用 HTML5 HTM L5 HTML5 UI RDBMS KVS KVS KVS RDBMS RDBMS データベース 負荷分散 負荷分散 負荷分散 (非 同 期 ) 非同期 スケーラビリティ 分散処理 イベ ン ト駆 動 サービス利用 REST REST REST A to m P u b A to m P u b メッセ ー ジング メッセ ー ジン グ イ ン テ グ レ ー シ ョン ・ フレームワーク フレームワーク
  21. 21. 目次 クラウド・アプリケーション SimpleModelerとDSL駆動開発 edge2.cc
  22. 22. DSL駆動開発&コンポーネント 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
  23. 23. PIM/PSM/実装 CIM : Computer Independent Model DSL PIM : Platform Independent Model CIM PIM PSM : Platform Specific Model DSL: Domain Specific Language DSL PSM 非機能要求 実装 プラットフォーム (Java、 XML、 …)
  24. 24. フレームワーク vs 自動生成 アプリケーション アプリケーション DSL アプリケーション 自動生成 定義ファイル 定義ファイル フレームワーク フレームワーク Google App Engine Google App Engine フレームワーク 自動生成 アプローチ アプローチ
  25. 25. SimpleModelingの本
  26. 26. SimpleModeler http://code.google.com/p/simplemo deler/ SimpleModeling用モデル・コンパイラ テキストDSL Scala DSL Scala DSL&mavenによるモデル・リポジトリ Web仕様書、Java、Grails、Google App Engine Python/Javaを生成
  27. 27. SimpleModelerの動作 Web仕様書 project クラス図 html ステート CSV import マシーン図 java SimpleModelリポジトリ (Maven project) Javaプログラム convert grails Scala DSL Grailsプログラム import gae Mindmap (Xmind) Google App Engine/Python プログラム gaej verify testset import Google App Engine/Java gaeo プログラム Excel 検証結果 テストセット Google App Engine Oil プログラム 企画中
  28. 28. SimpleModeler CSVで記述できること yorozu.csv #actor,base,parts,attrs,powers,states,roles 顧客,,,住所 個人顧客,顧客,,,性別(男性;女性) 法人顧客,顧客 従業員,,,,,,店員 #role 店員 #resource 商品,,製品+,,,商品状態(入荷待;在庫中;配送中;販売完) 製品 #event 顧客取引,,顧客;店員 顧客購入,顧客取引,商品+
  29. 29. SimpleModeler マインドマップ(XMind)
  30. 30. SimpleModeler Scala DSL package com.yorozu case class DVI製品Id extends DomainValueId { term = "製品Id" import org.simplemodeling.dsl._ caption = "製品Id" import org.simplemodeling.dsl.datatype._ brief = <t></t> import org.simplemodeling.dsl.domain._ description = <text></text> import org.simplemodeling.dsl.domain.values._ attribute("value", XString) case class DER製品 extends DomainResource { } term = "製品" caption = "製品" case class DVN製品Name extends brief = <t></t> DomainValueName { description = <text></text> term = "製品Name" caption = "製品Name" id("製品Id", DVI製品Id()) brief = <t></t> attribute("製品Name", DVN製品Name()) description = <text></text> } attribute("value", XString) }
  31. 31. SimpleModeler Web仕様書
  32. 32. SimpleModeler クラス図
  33. 33. SimpleModeler Scala DSL→ステートマシーン図 package com.yorozu case class DMS入荷待 extends DomainState { import org.simplemodeling.dsl._ term = "入荷待" import org.simplemodeling.dsl.datatype._ caption = "入荷待" import org.simplemodeling.dsl.domain._ brief = <t></t> import org.simplemodeling.dsl.domain.values._ description = <text></text> case class DER商品 extends DomainResource { transition(DEE商品入荷(), DMS在庫中()) term = "商品" } caption = "商品" brief = <t></t> case class DMS在庫中 extends DomainState { description = <text></text> term = "在庫中" caption = "在庫中" id("商品Id", DVI商品Id()) brief = <t></t> attribute("商品Name", DVN商品Name()) description = <text></text> association("製品", DER製品(), OneMore) statemachine(DM商品状態()) transition(DEE顧客購入(), DMS配送中()) } transition(DEE顧客購入(), DMS販売完()) } ・・・中略・・・ case class DM商品状態 extends DomainStateMachine { case class DMS配送中 extends DomainState { term = "商品状態" term = "配送中" caption = "商品状態" caption = "配送中" brief = <t></t> brief = <t></t> description = <text></text> description = <text></text> state(DMS入荷待()) transition(DEE商品配送(), DMS販売完()) state(DMS在庫中()) } state(DMS配送中()) state(DMS販売完()) case class DMS販売完 extends DomainState { } term = "販売完" caption = "販売完" brief = <t></t> description = <text></text> }
  34. 34. SimpleModeler ステートマシーン図と状態遷移表
  35. 35. SimpleModeler Google App Engine/Java Servlet/JSP/Dojo Toolkit
  36. 36. SimpleModeler Google App Engine/Java Google Web Toolkit
  37. 37. Google App Engine/Java アプリケーション構成 Web Controller/ Action/Template HTML Form JSP index.jsp EntityRepositoryService Servlet Dojoウィジェット index.jsp index.jsp DEACustomerController index.jsp <<document>> DDCustomer GwtCustomer DSYorozuEntity GWT RepositoryService GWT-RPC JDO index.html Servlet <<entity>> GwtYorozuEntity DEACustomer GWTCustomer RepositoryServiceImpl Editor JDO Atom AtomPub AtomPub Servlet AtomYorozuDomain Atomクライアント RepositoryServiceServlet DataStore HTML Form REST JSON Servlet Webブラウザ RESTYorozuDomain (JavaScript) RepositoryServiceServlet
  38. 38. SimpleModelerによるDSL駆動開発 ドメイン・モデル(概念モデル、論理モデル)からクラ ウド向けの物理モデルの自動生成 クラウド・アプリケーション開発で難易度が高く、煩雑なプ ログラムを自動生成 ユースケース・モデル ドメイン・モデルの正当性を検証 サービス・モデルを抽出 サービス・モデル RESTやAtomPubなどのサービスのAPIとエントリポイン トを自動生成 edgeSNSの開発を通じて実用化していく
  39. 39. 目次 クラウド・アプリケーション SimpleModelerとDSL駆動開発 edge2.cc
  40. 40. edge2.cc Edge to Cloud Computing http://www.edge2.cc モデル駆動開発×クラウドコンピューティングの実 証プロジェクト アプリケーション開発者の立場から、クラウド・アプ リケーションの開発技法を確立する 要素技術、アーキテクチャ、モデリング、モデル駆動開発 モデル駆動開発の技術として SimpleModeling&SimpleModelerを採用 ターゲットプラットフォームはGoogle App Engine Java
  41. 41. TwitterRecommender Twitterを使用した集合知アプリケーション Twitterから収集したフレンド、フォロワーのリンクから ソーシャルグラフを生成して、フォロワーの推奨を行う 収集した情報をPC, iPhone, Androidで表示 目的 Google App Engine/Python, Javaの味見 集合知アプリケーションの味見 SimpleModelerの活用(DSL駆動開発) モバイル技術 Google Developer Day Japan 2009の Sandboxに出展
  42. 42. TwitterRecommender
  43. 43. TwitterRecommender iPhone iTwitter Recommender XML Sync+ Offline Google App Engine Java Twitter XML iPhone Google App Engine Python Safari TwitterRecommender HTML5 HTML5 Engine AtomPubサービス Tiwtter Recommender Offline JSON on SmertWeb Android SmertWeb Framework 自動生成 Chrome データストア Gears on Gears アクセス処理 HTML4 Offline SimpleModeler JDO PC (JavaSE) TwitterRecommender Servlet AtomPub Twitter Popper モデル データストア PC HTML4 Webブラウザ
  44. 44. TwitterRecomenderで分かったこと HTML + REST + JSONが便利。 iPhone&AndroidはHTML5と HTML4+Gearsでかなりのことができる。 用途に応じてAtomPub, JSON, XML用の 配信サーブレットが自動生成されるのは便 利(今回は使用しなかったがCSVの配信機 能もある)
  45. 45. edge2.ccのアプローチ UI: HTML5 (+ Open Web Platform & jQuery) Webブラウザ側にUI処理を集約 サーバとの通信はREST(JSON) データベース: KVS DataStore CRUD処理の自動生成 分散処理:メッセージング Google App Engine JavaではMOMは未サポート Cron/TaskQueueを利用した非同期処理の自動生成
  46. 46. SimpleModelerのアプローチ UI: HTML5 (+ Open Web Platform & jQuery) REST Servletの自動生成 データベース: KVS DataStore CRUD処理の自動生成 分散処理:メッセージング Google App Engine JavaではMOMは未サポート Cron/TaskQueueを利用した非同期処理の自動生成
  47. 47. edgeSNS 簡易版SNS SNS日記機能の実現 クラウド・アプリケーションの構築技術を追求するのを目 的に、アプリケーションは平凡なものを選択 目的 メッセージングの活用 非同期入出力の活用 メッセージング、非同期入出力の実現に対する SimpleModelerの活用 メッセージングを基盤にしたコンポーネント・ベース開発
  48. 48. 考え方 スケーラビリティを高く 応答時間は短く スループットは高く ログは十分な情報量をたくさん取る でも、計算時間とデータ量は気にしない ⇒できるだけ非同期処理化する
  49. 49. edgeSNS クライアントとサーバ間の通信にはREST を用いる。 Web UIはHTML5を用いて、クライアント・ サーバ型のGUIとして構築する。 I/Oエラーなどのエラー発生時はエラーの Bad Message 発生したメッセージをメッセージ・キュー 「Bad Message」に送信する。 Web UI REST 日記の書き込み (HTML5) 日記の書き込み KVS 日記形式の正規化 Twitterメッセージの 日記形式 Twitter REST 取り込み Publish/Subscribe Twitter形式 Peer-to-Peer フレンド日記一覧の更新 KVS Blog形式 Blog REST Blogの取り込み SNS日記形式 通知メールの送信 メール SNS REST SNS日記の取り込み Context Based Routerの手法で、 メッセ ージ形式ごとにデータ変換を行う。 個々のメッセージ変換機はコンポーネン トなので、容易に機能追加が可能。 コンポーネントを追加することで、 機 能拡張を容易に行うことができる 外部データの取り込みもコンポーネント 化されて、容易に機能拡張が可能。
  50. 50. 同期write + 非同期ログwrite + 管理情報cache /customer/c11/update-async?name=ABC_Taro アプリケーション ② Web ① Customer (Servlet) ブラウザ ⑤ ④ ③ TaskQueue ⑥ /_system/event/log アプリケーション 処理結果 (Servlet) ログ ⑦ memcache ⑨ /_system/flush ⑩ アプリケーション Customer Cron ⑧ (Servlet) 管理情報
  51. 51. 非同期write /customer/c11/update-async?name=ABC_Taro アプリケーション Web ① (Servlet) ブラウザ ③ ② TaskQueue ④ ⑤ Customer /customer/c11/update?name=ABC_Taro アプリケーション (Servlet) ⑦ 処理結果 ⑥ ログ memcache ⑨ /_system/flush ⑩ アプリケーション Customer Cron ⑧ (Servlet) 管理情報
  52. 52. powertype/区分コード <<actor>> <<powertype>> DEA顧客 DP料金区分 無料 エントリ プロフェッショナル DD顧客 DEA顧客 DP料金区分 ID 12345 ID 12345 ID 料金区分名 updated 名前 山田太郎 名前 山田太郎 1 無料 2008-10-10 料金区分 3 料金区分 3 2 エントリ 2008-10-10 料金区分 料金区分 プロ プロ 3 プロフェッショナル 2009-05-05 _料金区分名 _料金区分名 料金区分 2009-03-03 _updated
  53. 53. モデルとレコード 1..* <<actor>> <<event>> <<part>> <<resource>> DEA注文 DEE注文 DEP注文詳細 DER商品 DEA顧客 DEE注文 DER商品 ID 12345 ID 1234567 ID 商品_名前 価格 updated 名前 山田太郎 発効日 山田太郎 135 みかん 100 2009-05-05 updated 2009-03-03 顧客 23456 246 りんご 80 2009-05-05 顧客_名前 山田太郎 369 ぶどう 120 2009-05-05 DEP注文詳細 ID 商品 商品_名前 価格 個数 1 135 みかん 100 5 注文詳細 2 246 りんご 80 3 3 369 ぶどう 120 8 updated 2009-09-09
  54. 54. レコードの拡張プロパティ ドメイン・モデルの情報に加えて、KVSで管理する 上で必要なプロパティを追加 タイムスタンプ(version) 非正規化データ AtomPubに必要な情報 feed用の情報 updated, titleなど entry用の情報 published, updated, title, summaryなど SimpleModelerで自動生成(予定含む) MDEntityInfo
  55. 55. テーブル管理情報 テーブル単位で保持しておく必要がある情報があ る。 テーブル全体の更新時間(AtomPubで配信) レコード数、最大値、最小値 アプリケーションが必要とするデータ テーブルに対応する管理データを用意する必要が ある。 SimpleModelerで自動生成(予定含む) memcacheをフロント、DataStoreバックエンド、キャッ シュはread/writeロックを用いてスケーラビリティを確保 (多分) MEEntityModelInfo
  56. 56. 履歴管理 更新履歴の保存 有無 更新履歴の内容 更新日時・更新者 レコード内容 更新履歴の管理方法 同一レコード内で更新履歴を保持 レコードは追加のみとして最新レコードをフラグで有効にする(一つ前のレコードの有効フラグをfalseに する) 更新履歴テーブルを別に用意 参照履歴の保存 有無 参照履歴の内容 参照日時・参照者 レコード内容 参照履歴の管理方法 同一レコード内で参照履歴を保持 参照履歴テーブルを別に用意 SimpleModelerで対応予定
  57. 57. 話題 非正規化 事前集計 count, max, min アプリケーションが必要とするデータ スキーマ・エボリューション AtomPubとの親和性 エラーへの対応 リトライ必須、エラーログ 排他制御 memcache counterを使った read lock/write lock EntityとDocumentの役割分担
  58. 58. まとめ edge2.ccではクラウド・アプリケーションの開発を 通して、アプリケーション開発技術の実証研究を 行っている。 クラウド・アプリケーションではアプリケーション開発 技術が刷新される UI Web UIからWeb GUIへ データベース KVS over RDBMS 並列分散処理 メッセージング指向 DSL駆動開発の可能性を追求。
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×