SlideShare ist ein Scribd-Unternehmen logo
1 von 58
Downloaden Sie, um offline zu lesen
クラウド・アプリケーションの作り方
edge2.ccの挑戦


2009年10月8日
浅海智晴
edge2.cc/JJUG/匠Lab
edge2.cc
 Edge to Cloud Computing
 http://www.edge2.cc
 モデル駆動開発×クラウドコンピューティングの実
 証プロジェクト
 アプリケーション開発者の立場から、クラウド・アプ
 リケーションの開発技法を確立する
   要素技術、アーキテクチャ、モデリング、モデル駆動開発
   モデル駆動開発の技術として
   SimpleModeling&SimpleModelerを採用
   ターゲットプラットフォームはGoogle App Engine Java
関連雑誌記事
『Cloud Modeling:クラウド時代のモデリング技
術』
 UNIXマガジン 2009年春号
『マルチパラダイム言語Scala』
 ITアーキテクト誌 Vol.24 (7月25日発売)
『クラウド時代のWebアプリ開発作法』
 ITアーキテクト誌 Vol.25 (9月25日発売)
『実証研究プロジェクト「edge2.cc」の挑戦 : アプ
リ開発者の目線で探るクラウドの可能性と実装手
段』
 DBマガジン誌 11月号(9月25日発売)
目次

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

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

 Webアプリケーション
  Web UIからWeb GUIへ
  クライアント/サーバ時代のGUIをWebで実現
  HTML5
 スケーラビリティ
  非同期処理、並行処理、分散処理
  ACIDからBASEへ
    Key/Valueストレージ
 分散アプリケーション
  故障と遅延への対応
  逐次処理から並行処理へ
クラウド・アプリケーションの三つの技術

UI
  Web UIからWeb GUIへ
データベース
  KVS over RDBMS
並列分散処理
  メッセージング指向
Google App Engine
 Googleが提供するクラウド・プラットフォーム
   Python版:2008年4月リリース
   Java版:2009年4月リリース
 Googleの分散基盤であるBigTable,
 MapReduceなどをバックグランドにしている本格
 的なクラウド・プラットフォーム
 PythonやJava向けに仮想的なAPIを提供
   BigTableやMapReduceを直接利用できるわけではな
   い
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をサポート
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に同梱)
GWT (Google Web Toolkit)

 Javaで記述したGUIコードをJavaScriptに
 コンパイル
 Web GUIを実現
 クライアントとサーバ間の通信は専用RPC
 JavaのスキルでWeb UIを構築
   Eclipse Plugin上のJavaでデバッグもできる
 クロスブラウザにも対応
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ア
  プリケーション向け)
UI:Google App Engine Java
 クライアント側の技術には非依存
   HTML4でもFlashでもHTML5でも大丈夫
 リフレクションやスレッドなどの機能を利用した既存
 のフレームワークが使えない可能性が高い
   サーバ側の開発手法は変わるかも
 HTML5&REST
   Web GUI向けのWebサーバとしての機能を実現する必
   要があるので、結局の所、サーバー側がの開発手法は
   変わることになる
 GWTも有力な選択肢
データベース:KVS over RDBMS
 KVS(Key/Value Store)
   クラウドで用いられる大規模分散データストア
   Key/Value型
 KVSの用途
   スケーラビリティの必要な大容量データ
   超安価なデータストア
 KVSはRDBMSの以下の機能を持っていない。
   トランザクション処理
   SQLのJOIN、集計機能など
   ER図でのモデリングが(そのままでは)利用できない
 KVSとRDBMSの使い分けが重要なポイント
   できるだけKVSを使いたい
      KVS:超安価、スケーラビリティ
データベース:Google App Engine Java

 Google App EngineではKVSのみをサポート
 (DataStore)
   RDBMS/SQLは使用する事ができない
   良い事:コストが超安価
   悪い事:RDBMS/SQLが持つ強力なトランザクション機
   能や検索・集計処理を利用することができない
 RDBMS/SQL指向のアプリケーション開発手法を
 用いることができないので、アプリケーション開発手
 法の根本的な見直しが必要
並列分散処理:メッセージング指向
非同期、並列、分散を処理するために、メッセージ
ング機能を活用。
MOM(Message Oriented Middleware)
 Peer-to-Peer, Publisher/Subscribe
 Javaの場合はJMS(Java Messaging Service)
並列分散処理フレームワーク
 MapReduce/Hadoop
 メッセージング機能の上に統合されるのでは?
メッセージングを行うための統合フレームワーク
 メッセージングの次の段階
 Apache Camelなど
並列分散処理:Google App Engine Java

 MOMはGoogle App Engineではまだ用意されていない
 スレッドをGoogle App Engineで使用することはできない
 MapReduce機能はアプリケーション向けには提供されてい
 ない
 並列分散処理を記述するためのプリミティブ機能
   Cron
   TaskQueue (試験的な提供)
 現時点ではTaskQueue機能を用いてアプリケーションで実
 装する必要がある。
クラウド・アプリケーションのアーキテク
             チャ
                                                 サーバ側では、 GUIが使用する
                                                 サービスを提供する。


   クライアントはWebブラウザ上で
   動作するHTML5で本格的なGUI
                                   プレゼンテーション層
             を構築する。
                                                                    クラウド・アプリケーション
                              クライアント側           サーバ側                                      アプリケーションの論理的な構成は
                                                                                          従来のものと変わらない
                                                                     プレゼンテーション層
                               HTML5            サービス

                                                                       ビジネス層


                                                                       ドメイン層


   プレゼンテーション層はWeb指                                                      統合層           アクセス方式1: RDBMS
  向のMVC2ではなく、 クライアント                                                                  ACID特性を要求されるデータはRDBMSに
                                 アクセス方式4: 手続き呼出し
  /サーバ時代のGUIに回帰する。                                                                    格納する。
                               性能特性、 障害特性がローカル
                                の手続き呼び出しよりも脆弱 。


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




                                メッセージ・キュー



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

                       サービス




                                                アクセス方式3:REST
                                       Webページを手繰って情報を取得する               サービス
クラウド・アプリケーションのアーキテク
                    チャ例
                                     マスターデータなど更新頻度が低いデータは
                                           KVSで配布して直接参照する 。
                                                                                   結果を直接知りたい場合には 、 手続き呼
                                                                         KVS       び出しで同期型の連携を行う。
                                                                                   この形式の連携を行うとスケーラビリティが
                                                                                   低くなる。



プレゼンテーションの段階でできることをや
っておくと 、 スケールアウトの効果によって                    クラウド・アプリケーション
          スケーラビリティが高まる 。
外部サービスからRESTを用いて情報を取
      得するのが典型的な利用方法 。                                                                                       サービス利用の主力はメッセージである 。
                           プレゼンテーション                      サービス                             サービス
                                                                                                            この形式の連携を行うとスケールアウトに
                                                                                                            よってスケーラビリティを確保できる。




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




                                                               サービス                       メッセージ・キュー

                                                                                                                      同期通信
                             サービス

                                                                                                                    メッセージ送信


                                                                                                                    メッセージ配信


                                                                 KVS              RDBMS
                           データベースをアクセスするスコープは
                              サービスに閉じておくのがよい 。




                                                                       KVSとRDBMSを適材適所で使い分ける 。
                                                                       可能であればKVSを使うのが望ましい 。
クラウド・アプリケーションへの移行パス
             第一段階      第二段階               第三段階
              導入        過渡期               本格適用



             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
                     メッセ ー ジング          メッセ ー ジン グ




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

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



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

      OO分析

                   OO設計       OO実装   コンポーネント




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




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

      OO分析

                   OO設計       OO実装   コンポーネント
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、 …)
フレームワーク vs 自動生成

                      アプリケーション

  アプリケーション                                      DSL


                      アプリケーション
                                         自動生成
   定義ファイル              定義ファイル


                      フレームワーク
  フレームワーク



 Google App Engine   Google App Engine


   フレームワーク              自動生成
    アプローチ               アプローチ
SimpleModelingの本
SimpleModeler

 http://code.google.com/p/simplemo
 deler/
 SimpleModeling用モデル・コンパイラ
 テキストDSL
   Scala DSL
   Scala DSL&mavenによるモデル・リポジトリ
 Web仕様書、Java、Grails、Google App
 Engine Python/Javaを生成
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
                                                                                   プログラム
                   企画中
SimpleModeler
CSVで記述できること
yorozu.csv

#actor,base,parts,attrs,powers,states,roles
顧客,,,住所
個人顧客,顧客,,,性別(男性;女性)
法人顧客,顧客
従業員,,,,,,店員
#role
店員
#resource
商品,,製品+,,,商品状態(入荷待;在庫中;配送中;販売完)
製品
#event
顧客取引,,顧客;店員
顧客購入,顧客取引,商品+
SimpleModeler
マインドマップ(XMind)
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)
                                                  }
SimpleModeler
Web仕様書
SimpleModeler
クラス図
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>

                                                  }
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
                              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
SimpleModelerによるDSL駆動開発

 ドメイン・モデル(概念モデル、論理モデル)からクラ
 ウド向けの物理モデルの自動生成
   クラウド・アプリケーション開発で難易度が高く、煩雑なプ
   ログラムを自動生成
 ユースケース・モデル
   ドメイン・モデルの正当性を検証
   サービス・モデルを抽出
 サービス・モデル
   RESTやAtomPubなどのサービスのAPIとエントリポイン
   トを自動生成
 edgeSNSの開発を通じて実用化していく
目次

クラウド・アプリケーション
SimpleModelerとDSL駆動開発
edge2.cc
edge2.cc
 Edge to Cloud Computing
 http://www.edge2.cc
 モデル駆動開発×クラウドコンピューティングの実
 証プロジェクト
 アプリケーション開発者の立場から、クラウド・アプ
 リケーションの開発技法を確立する
   要素技術、アーキテクチャ、モデリング、モデル駆動開発
   モデル駆動開発の技術として
   SimpleModeling&SimpleModelerを採用
   ターゲットプラットフォームはGoogle App Engine Java
TwitterRecommender
 Twitterを使用した集合知アプリケーション
   Twitterから収集したフレンド、フォロワーのリンクから
   ソーシャルグラフを生成して、フォロワーの推奨を行う
   収集した情報をPC, iPhone, Androidで表示
 目的
   Google App Engine/Python, Javaの味見
   集合知アプリケーションの味見
   SimpleModelerの活用(DSL駆動開発)
   モバイル技術
 Google Developer Day Japan 2009の
 Sandboxに出展
TwitterRecommender
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ブラウザ
TwitterRecomenderで分かったこと

 HTML + REST + JSONが便利。
 iPhone&AndroidはHTML5と
 HTML4+Gearsでかなりのことができる。
 用途に応じてAtomPub, JSON, XML用の
 配信サーブレットが自動生成されるのは便
 利(今回は使用しなかったがCSVの配信機
 能もある)
edge2.ccのアプローチ
 UI: HTML5 (+ Open Web Platform &
 jQuery)
   Webブラウザ側にUI処理を集約
   サーバとの通信はREST(JSON)
 データベース: KVS
   DataStore CRUD処理の自動生成
 分散処理:メッセージング
   Google App Engine JavaではMOMは未サポート
   Cron/TaskQueueを利用した非同期処理の自動生成
SimpleModelerのアプローチ
 UI: HTML5 (+ Open Web Platform &
 jQuery)
   REST Servletの自動生成
 データベース: KVS
   DataStore CRUD処理の自動生成
 分散処理:メッセージング
   Google App Engine JavaではMOMは未サポート
   Cron/TaskQueueを利用した非同期処理の自動生成
edgeSNS
 簡易版SNS
  SNS日記機能の実現
  クラウド・アプリケーションの構築技術を追求するのを目
  的に、アプリケーションは平凡なものを選択
 目的
  メッセージングの活用
  非同期入出力の活用
  メッセージング、非同期入出力の実現に対する
  SimpleModelerの活用
  メッセージングを基盤にしたコンポーネント・ベース開発
考え方

 スケーラビリティを高く
 応答時間は短く
 スループットは高く
 ログは十分な情報量をたくさん取る
 でも、計算時間とデータ量は気にしない
⇒できるだけ非同期処理化する
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の手法で、 メッセ
                                                ージ形式ごとにデータ変換を行う。
                                            個々のメッセージ変換機はコンポーネン
                                               トなので、容易に機能追加が可能。
                                                                                                 コンポーネントを追加することで、 機
                                                                                                  能拡張を容易に行うことができる
          外部データの取り込みもコンポーネント
           化されて、容易に機能拡張が可能。
同期write +
非同期ログwrite + 管理情報cache
                   /customer/c11/update-async?name=ABC_Taro


                                              アプリケーション            ②
  Web    ①                                                            Customer
                                                (Servlet)
 ブラウザ
               ⑤

                                                        ④
                         ③



                                                  TaskQueue



                                                        ⑥
                         /_system/event/log
                                              アプリケーション                処理結果
                                                (Servlet)              ログ
                                                                  ⑦




                                                  memcache


                                                        ⑨
                                 /_system/flush
                                                              ⑩
                                              アプリケーション                Customer
        Cron
                     ⑧                          (Servlet)             管理情報
非同期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)             管理情報
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
モデルとレコード
                                                                           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
レコードの拡張プロパティ
ドメイン・モデルの情報に加えて、KVSで管理する
上で必要なプロパティを追加
タイムスタンプ(version)
非正規化データ
AtomPubに必要な情報
 feed用の情報
    updated, titleなど
 entry用の情報
    published, updated, title, summaryなど
SimpleModelerで自動生成(予定含む)
 MDEntityInfo
テーブル管理情報
テーブル単位で保持しておく必要がある情報があ
る。
 テーブル全体の更新時間(AtomPubで配信)
 レコード数、最大値、最小値
 アプリケーションが必要とするデータ
テーブルに対応する管理データを用意する必要が
ある。
SimpleModelerで自動生成(予定含む)
 memcacheをフロント、DataStoreバックエンド、キャッ
 シュはread/writeロックを用いてスケーラビリティを確保
 (多分)
 MEEntityModelInfo
履歴管理
更新履歴の保存
   有無
   更新履歴の内容
      更新日時・更新者
      レコード内容
   更新履歴の管理方法
      同一レコード内で更新履歴を保持
      レコードは追加のみとして最新レコードをフラグで有効にする(一つ前のレコードの有効フラグをfalseに
      する)
      更新履歴テーブルを別に用意
参照履歴の保存
   有無
   参照履歴の内容
      参照日時・参照者
      レコード内容
   参照履歴の管理方法
      同一レコード内で参照履歴を保持
      参照履歴テーブルを別に用意
SimpleModelerで対応予定
話題
非正規化
事前集計
  count, max, min
  アプリケーションが必要とするデータ
スキーマ・エボリューション
AtomPubとの親和性
エラーへの対応
  リトライ必須、エラーログ
排他制御
  memcache counterを使った
  read lock/write lock
EntityとDocumentの役割分担
まとめ
edge2.ccではクラウド・アプリケーションの開発を
通して、アプリケーション開発技術の実証研究を
行っている。
クラウド・アプリケーションではアプリケーション開発
技術が刷新される
 UI
      Web UIからWeb GUIへ
 データベース
   KVS over RDBMS
 並列分散処理
   メッセージング指向
DSL駆動開発の可能性を追求。

Weitere ähnliche Inhalte

Was ist angesagt?

モバイル開発を支えるAWS Mobile Services
モバイル開発を支えるAWS Mobile Servicesモバイル開発を支えるAWS Mobile Services
モバイル開発を支えるAWS Mobile ServicesKeisuke Nishitani
 
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャAWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャyuki0211s
 
AWS & Google Cloudを使ったシステム開発/技術選定のはなし
AWS & Google Cloudを使ったシステム開発/技術選定のはなしAWS & Google Cloudを使ったシステム開発/技術選定のはなし
AWS & Google Cloudを使ったシステム開発/技術選定のはなし修一 高橋
 
iOSアプリ開発者から見たMobile Hub
iOSアプリ開発者から見たMobile HubiOSアプリ開発者から見たMobile Hub
iOSアプリ開発者から見たMobile HubJun Kato
 
浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターン浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターンAmazon Web Services Japan
 
AWS Black Belt Techシリーズ Amazon Cognito / Amazon Mobile Analytics
AWS Black Belt Techシリーズ  Amazon Cognito / Amazon Mobile AnalyticsAWS Black Belt Techシリーズ  Amazon Cognito / Amazon Mobile Analytics
AWS Black Belt Techシリーズ Amazon Cognito / Amazon Mobile AnalyticsAmazon Web Services Japan
 
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance EnvironmentJAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance EnvironmentJin k
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介Amazon Web Services Japan
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました政雄 金森
 
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!SORACOM, INC
 
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -Amazon Web Services Japan
 
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APIGoogle Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APImaruyama097
 
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)Amazon Web Services Japan
 
IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄Toshiaki Enami
 
【IVS CTO Night & Day】Networking Technology
【IVS CTO Night & Day】Networking Technology【IVS CTO Night & Day】Networking Technology
【IVS CTO Night & Day】Networking TechnologyAmazon Web Services Japan
 
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜Atsushi Fukui
 
[AWS Summit 2012] 基調講演 Day1: Go Global !
[AWS Summit 2012] 基調講演 Day1: Go Global ! [AWS Summit 2012] 基調講演 Day1: Go Global !
[AWS Summit 2012] 基調講演 Day1: Go Global ! Amazon Web Services Japan
 
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用Amazon Web Services Japan
 

Was ist angesagt? (20)

モバイル開発を支えるAWS Mobile Services
モバイル開発を支えるAWS Mobile Servicesモバイル開発を支えるAWS Mobile Services
モバイル開発を支えるAWS Mobile Services
 
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャAWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
AWS Mobile Hub で構築するクラウドネイティブモバイルアーキテクチャ
 
AWS & Google Cloudを使ったシステム開発/技術選定のはなし
AWS & Google Cloudを使ったシステム開発/技術選定のはなしAWS & Google Cloudを使ったシステム開発/技術選定のはなし
AWS & Google Cloudを使ったシステム開発/技術選定のはなし
 
iOSアプリ開発者から見たMobile Hub
iOSアプリ開発者から見たMobile HubiOSアプリ開発者から見たMobile Hub
iOSアプリ開発者から見たMobile Hub
 
浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターン浸透するサーバーレス 実際に見るユースケースと実装パターン
浸透するサーバーレス 実際に見るユースケースと実装パターン
 
Black Belt Online Seminar Amazon Cognito
Black Belt Online Seminar Amazon CognitoBlack Belt Online Seminar Amazon Cognito
Black Belt Online Seminar Amazon Cognito
 
AWS Black Belt Techシリーズ Amazon Cognito / Amazon Mobile Analytics
AWS Black Belt Techシリーズ  Amazon Cognito / Amazon Mobile AnalyticsAWS Black Belt Techシリーズ  Amazon Cognito / Amazon Mobile Analytics
AWS Black Belt Techシリーズ Amazon Cognito / Amazon Mobile Analytics
 
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance EnvironmentJAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
JAWSDAYS2017 新訳 とあるアーキテクトのクラウドデザインパターン目録 AMI Maintenance Environment
 
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
パッケージソフトウェアを簡単にSaaS化!?既存の資産を使ったSaaS化手法のご紹介
 
DevAx::connect はじめました
DevAx::connect はじめましたDevAx::connect はじめました
DevAx::connect はじめました
 
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
AWS meets Android - "AWS SDK for Android"で開発を楽にしよう!
 
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
 
Google Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline APIGoogle Compute EngineとGAE Pipeline API
Google Compute EngineとGAE Pipeline API
 
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
製造装置データ収集の選択肢 (AWS IoT Deep Dive #5)
 
IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄
 
【IVS CTO Night & Day】Networking Technology
【IVS CTO Night & Day】Networking Technology【IVS CTO Night & Day】Networking Technology
【IVS CTO Night & Day】Networking Technology
 
【IVS CTO Night & Day】DevOps on AWS 2017
【IVS CTO Night & Day】DevOps on AWS 2017【IVS CTO Night & Day】DevOps on AWS 2017
【IVS CTO Night & Day】DevOps on AWS 2017
 
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
 
[AWS Summit 2012] 基調講演 Day1: Go Global !
[AWS Summit 2012] 基調講演 Day1: Go Global ! [AWS Summit 2012] 基調講演 Day1: Go Global !
[AWS Summit 2012] 基調講演 Day1: Go Global !
 
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用【IVS CTO Night & Day】AWSにおけるビッグデータ活用
【IVS CTO Night & Day】AWSにおけるビッグデータ活用
 

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

非公式PaaS勉強会~新宿d社会議室
非公式PaaS勉強会~新宿d社会議室非公式PaaS勉強会~新宿d社会議室
非公式PaaS勉強会~新宿d社会議室Daisuke Masubuchi
 
Windows Azure 基盤を支えるテクノロジー
Windows Azure 基盤を支えるテクノロジーWindows Azure 基盤を支えるテクノロジー
Windows Azure 基盤を支えるテクノロジーKazumi Hirose
 
Heroshima "Cloud & Security Day" and Night
Heroshima "Cloud & Security Day" and NightHeroshima "Cloud & Security Day" and Night
Heroshima "Cloud & Security Day" and NightShinichiro Isago
 
JAWS熊本で使用したSWX社内用AWS初心者向け資料
JAWS熊本で使用したSWX社内用AWS初心者向け資料JAWS熊本で使用したSWX社内用AWS初心者向け資料
JAWS熊本で使用したSWX社内用AWS初心者向け資料Aya Komuro
 
JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料
JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料
JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料Serverworks Co.,Ltd.
 
Windows Azure Appfabric as "Middleware as a Services"
Windows Azure Appfabric as "Middleware as a Services"Windows Azure Appfabric as "Middleware as a Services"
Windows Azure Appfabric as "Middleware as a Services"Kazuyuki Nomura
 
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
.NETアプリのクラウド移行~Azure Service Fabricを丁寧にKazuyuki Nomura
 
20180309 azure+container
20180309 azure+container20180309 azure+container
20180309 azure+containerMiho Yamamoto
 
いよいよ SAP Business Suite 正式サポート! SAP on AWS
いよいよ SAP Business Suite 正式サポート!  SAP on AWSいよいよ SAP Business Suite 正式サポート!  SAP on AWS
いよいよ SAP Business Suite 正式サポート! SAP on AWSMasaru Hiroki
 
できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門
できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門
できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門gipwest
 
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介Masayuki Ozawa
 
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集Couchbase Japan KK
 
アマゾンクラウドの真価
アマゾンクラウドの真価アマゾンクラウドの真価
アマゾンクラウドの真価kaminashi
 
エンタープライズにおけるAWS利用事例_2012年11月
エンタープライズにおけるAWS利用事例_2012年11月エンタープライズにおけるAWS利用事例_2012年11月
エンタープライズにおけるAWS利用事例_2012年11月Amazon Web Services Japan
 
これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座Serverworks Co.,Ltd.
 
Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存
Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存
Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存kumo2010
 
日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考える日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考えるNissho-Blocks
 
Cloudian presentation for Cassandra Conference 2012 in Tokyo
Cloudian presentation for Cassandra Conference 2012 in TokyoCloudian presentation for Cassandra Conference 2012 in Tokyo
Cloudian presentation for Cassandra Conference 2012 in TokyoCLOUDIAN KK
 

Ähnlich wie クラウド・アプリケーションの作り方 (20)

非公式PaaS勉強会~新宿d社会議室
非公式PaaS勉強会~新宿d社会議室非公式PaaS勉強会~新宿d社会議室
非公式PaaS勉強会~新宿d社会議室
 
Windows Azure
Windows AzureWindows Azure
Windows Azure
 
Windows Azure 基盤を支えるテクノロジー
Windows Azure 基盤を支えるテクノロジーWindows Azure 基盤を支えるテクノロジー
Windows Azure 基盤を支えるテクノロジー
 
Heroshima "Cloud & Security Day" and Night
Heroshima "Cloud & Security Day" and NightHeroshima "Cloud & Security Day" and Night
Heroshima "Cloud & Security Day" and Night
 
JAWS熊本で使用したSWX社内用AWS初心者向け資料
JAWS熊本で使用したSWX社内用AWS初心者向け資料JAWS熊本で使用したSWX社内用AWS初心者向け資料
JAWS熊本で使用したSWX社内用AWS初心者向け資料
 
JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料
JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料
JAWSUG熊本で開催されたハンズオンにて発表したAWS初心者向け資料
 
Windows Azure Appfabric as "Middleware as a Services"
Windows Azure Appfabric as "Middleware as a Services"Windows Azure Appfabric as "Middleware as a Services"
Windows Azure Appfabric as "Middleware as a Services"
 
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
.NETアプリのクラウド移行~Azure Service Fabricを丁寧に
 
20180309 azure+container
20180309 azure+container20180309 azure+container
20180309 azure+container
 
いよいよ SAP Business Suite 正式サポート! SAP on AWS
いよいよ SAP Business Suite 正式サポート!  SAP on AWSいよいよ SAP Business Suite 正式サポート!  SAP on AWS
いよいよ SAP Business Suite 正式サポート! SAP on AWS
 
できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門
できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門
できる!グローバル×スケーラブル×マルチデバイス対応のソーシャルアプリ開発入門
 
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
Sql server 2012 の新機能を使ってみよう。db 管理者向け機能の紹介
 
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
今日から使えるCouchbaseシステムアーキテクチャデザインパターン集
 
アマゾンクラウドの真価
アマゾンクラウドの真価アマゾンクラウドの真価
アマゾンクラウドの真価
 
エンタープライズにおけるAWS利用事例_2012年11月
エンタープライズにおけるAWS利用事例_2012年11月エンタープライズにおけるAWS利用事例_2012年11月
エンタープライズにおけるAWS利用事例_2012年11月
 
[AWSマイスターシリーズ] Amazon VPC
[AWSマイスターシリーズ] Amazon VPC[AWSマイスターシリーズ] Amazon VPC
[AWSマイスターシリーズ] Amazon VPC
 
これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座これでAWSマスター!? 初心者向けAWS簡単講座
これでAWSマスター!? 初心者向けAWS簡単講座
 
Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存
Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存
Tech Ed 2010 Japan T1-303 Exchange Server 2010 と次世代 Exchange Online の共存
 
日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考える日米クラウド最前線!経営戦略としてのクラウドを考える
日米クラウド最前線!経営戦略としてのクラウドを考える
 
Cloudian presentation for Cassandra Conference 2012 in Tokyo
Cloudian presentation for Cassandra Conference 2012 in TokyoCloudian presentation for Cassandra Conference 2012 in Tokyo
Cloudian presentation for Cassandra Conference 2012 in Tokyo
 

Mehr von Tomoharu ASAMI

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】Tomoharu ASAMI
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】Tomoharu ASAMI
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】Tomoharu ASAMI
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】Tomoharu ASAMI
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】Tomoharu ASAMI
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】Tomoharu ASAMI
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】Tomoharu ASAMI
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】Tomoharu ASAMI
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】Tomoharu ASAMI
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】Tomoharu ASAMI
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】Tomoharu ASAMI
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】Tomoharu ASAMI
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】Tomoharu ASAMI
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】Tomoharu ASAMI
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】Tomoharu ASAMI
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】Tomoharu ASAMI
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】Tomoharu ASAMI
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】Tomoharu ASAMI
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】Tomoharu ASAMI
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】Tomoharu ASAMI
 

Mehr von Tomoharu ASAMI (20)

アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
アプリケーション・アーキテクチャ 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第34回】
 
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
テスト 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第33回】
 
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
実装(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第32回】
 
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
実装(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第31回】
 
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
実装(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第30回】
 
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
設計/UX/UI 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第29回】
 
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
設計/原理 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第28回】
 
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
設計/ドメイン設計(5) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第27回】
 
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
設計/ドメイン設計(4) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第26回】
 
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
設計/ドメイン設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第25回】
 
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
設計/ドメイン設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第24回】
 
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
設計/ドメイン設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第23回】
 
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
設計/コンポーネント設計(3) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第22回】
 
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
設計/コンポーネント設計(2) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第21回】
 
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
設計/コンポーネント設計(1) 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第20回】
 
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
設計/アーキテクチャ設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第19回】
 
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
設計 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第18回】
 
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
分析/イベント駆動 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第17回】
 
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
分析/コンポーネント分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第16回】
 
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
分析 【クラウドアプリケーションのためのオブジェクト指向分析設計講座 第15回】
 

Kürzlich hochgeladen

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdffurutsuka
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 

Kürzlich hochgeladen (7)

スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
UPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdfUPWARD_share_company_information_20240415.pdf
UPWARD_share_company_information_20240415.pdf
 
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 

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

  • 2. edge2.cc Edge to Cloud Computing http://www.edge2.cc モデル駆動開発×クラウドコンピューティングの実 証プロジェクト アプリケーション開発者の立場から、クラウド・アプ リケーションの開発技法を確立する 要素技術、アーキテクチャ、モデリング、モデル駆動開発 モデル駆動開発の技術として SimpleModeling&SimpleModelerを採用 ターゲットプラットフォームはGoogle App Engine Java
  • 3. 関連雑誌記事 『Cloud Modeling:クラウド時代のモデリング技 術』 UNIXマガジン 2009年春号 『マルチパラダイム言語Scala』 ITアーキテクト誌 Vol.24 (7月25日発売) 『クラウド時代のWebアプリ開発作法』 ITアーキテクト誌 Vol.25 (9月25日発売) 『実証研究プロジェクト「edge2.cc」の挑戦 : アプ リ開発者の目線で探るクラウドの可能性と実装手 段』 DBマガジン誌 11月号(9月25日発売)
  • 6. クラウド・アプリケーション Webアプリケーション Web UIからWeb GUIへ クライアント/サーバ時代のGUIをWebで実現 HTML5 スケーラビリティ 非同期処理、並行処理、分散処理 ACIDからBASEへ Key/Valueストレージ 分散アプリケーション 故障と遅延への対応 逐次処理から並行処理へ
  • 7. クラウド・アプリケーションの三つの技術 UI Web UIからWeb GUIへ データベース KVS over RDBMS 並列分散処理 メッセージング指向
  • 8. Google App Engine Googleが提供するクラウド・プラットフォーム Python版:2008年4月リリース Java版:2009年4月リリース Googleの分散基盤であるBigTable, MapReduceなどをバックグランドにしている本格 的なクラウド・プラットフォーム PythonやJava向けに仮想的なAPIを提供 BigTableやMapReduceを直接利用できるわけではな い
  • 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. 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. GWT (Google Web Toolkit) Javaで記述したGUIコードをJavaScriptに コンパイル Web GUIを実現 クライアントとサーバ間の通信は専用RPC JavaのスキルでWeb UIを構築 Eclipse Plugin上のJavaでデバッグもできる クロスブラウザにも対応
  • 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. UI:Google App Engine Java クライアント側の技術には非依存 HTML4でもFlashでもHTML5でも大丈夫 リフレクションやスレッドなどの機能を利用した既存 のフレームワークが使えない可能性が高い サーバ側の開発手法は変わるかも HTML5&REST Web GUI向けのWebサーバとしての機能を実現する必 要があるので、結局の所、サーバー側がの開発手法は 変わることになる GWTも有力な選択肢
  • 14. データベース:KVS over RDBMS KVS(Key/Value Store) クラウドで用いられる大規模分散データストア Key/Value型 KVSの用途 スケーラビリティの必要な大容量データ 超安価なデータストア KVSはRDBMSの以下の機能を持っていない。 トランザクション処理 SQLのJOIN、集計機能など ER図でのモデリングが(そのままでは)利用できない KVSとRDBMSの使い分けが重要なポイント できるだけKVSを使いたい KVS:超安価、スケーラビリティ
  • 15. データベース:Google App Engine Java Google App EngineではKVSのみをサポート (DataStore) RDBMS/SQLは使用する事ができない 良い事:コストが超安価 悪い事:RDBMS/SQLが持つ強力なトランザクション機 能や検索・集計処理を利用することができない RDBMS/SQL指向のアプリケーション開発手法を 用いることができないので、アプリケーション開発手 法の根本的な見直しが必要
  • 16. 並列分散処理:メッセージング指向 非同期、並列、分散を処理するために、メッセージ ング機能を活用。 MOM(Message Oriented Middleware) Peer-to-Peer, Publisher/Subscribe Javaの場合はJMS(Java Messaging Service) 並列分散処理フレームワーク MapReduce/Hadoop メッセージング機能の上に統合されるのでは? メッセージングを行うための統合フレームワーク メッセージングの次の段階 Apache Camelなど
  • 17. 並列分散処理:Google App Engine Java MOMはGoogle App Engineではまだ用意されていない スレッドをGoogle App Engineで使用することはできない MapReduce機能はアプリケーション向けには提供されてい ない 並列分散処理を記述するためのプリミティブ機能 Cron TaskQueue (試験的な提供) 現時点ではTaskQueue機能を用いてアプリケーションで実 装する必要がある。
  • 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. クラウド・アプリケーションのアーキテク チャ例 マスターデータなど更新頻度が低いデータは KVSで配布して直接参照する 。 結果を直接知りたい場合には 、 手続き呼 KVS び出しで同期型の連携を行う。 この形式の連携を行うとスケーラビリティが 低くなる。 プレゼンテーションの段階でできることをや っておくと 、 スケールアウトの効果によって クラウド・アプリケーション スケーラビリティが高まる 。 外部サービスからRESTを用いて情報を取 得するのが典型的な利用方法 。 サービス利用の主力はメッセージである 。 プレゼンテーション サービス サービス この形式の連携を行うとスケールアウトに よってスケーラビリティを確保できる。 サービス バックエンドのサービス群もメッセージによ メッセージ・キュー REST って連携 。 サービス メッセージ・キュー 同期通信 サービス メッセージ送信 メッセージ配信 KVS RDBMS データベースをアクセスするスコープは サービスに閉じておくのがよい 。 KVSとRDBMSを適材適所で使い分ける 。 可能であればKVSを使うのが望ましい 。
  • 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 メッセ ー ジング メッセ ー ジン グ イ ン テ グ レ ー シ ョン ・ フレームワーク フレームワーク
  • 22. DSL駆動開発&コンポーネント 分析 設計 実装 DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント DSL 自動生成 コンポーネント DSL 自動生成 コンポーネント OO分析 OO設計 OO実装 コンポーネント
  • 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. フレームワーク vs 自動生成 アプリケーション アプリケーション DSL アプリケーション 自動生成 定義ファイル 定義ファイル フレームワーク フレームワーク Google App Engine Google App Engine フレームワーク 自動生成 アプローチ アプローチ
  • 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. 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 プログラム 企画中
  • 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) }
  • 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> }
  • 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. SimpleModelerによるDSL駆動開発 ドメイン・モデル(概念モデル、論理モデル)からクラ ウド向けの物理モデルの自動生成 クラウド・アプリケーション開発で難易度が高く、煩雑なプ ログラムを自動生成 ユースケース・モデル ドメイン・モデルの正当性を検証 サービス・モデルを抽出 サービス・モデル RESTやAtomPubなどのサービスのAPIとエントリポイン トを自動生成 edgeSNSの開発を通じて実用化していく
  • 40. edge2.cc Edge to Cloud Computing http://www.edge2.cc モデル駆動開発×クラウドコンピューティングの実 証プロジェクト アプリケーション開発者の立場から、クラウド・アプ リケーションの開発技法を確立する 要素技術、アーキテクチャ、モデリング、モデル駆動開発 モデル駆動開発の技術として SimpleModeling&SimpleModelerを採用 ターゲットプラットフォームはGoogle App Engine Java
  • 41. TwitterRecommender Twitterを使用した集合知アプリケーション Twitterから収集したフレンド、フォロワーのリンクから ソーシャルグラフを生成して、フォロワーの推奨を行う 収集した情報をPC, iPhone, Androidで表示 目的 Google App Engine/Python, Javaの味見 集合知アプリケーションの味見 SimpleModelerの活用(DSL駆動開発) モバイル技術 Google Developer Day Japan 2009の Sandboxに出展
  • 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. TwitterRecomenderで分かったこと HTML + REST + JSONが便利。 iPhone&AndroidはHTML5と HTML4+Gearsでかなりのことができる。 用途に応じてAtomPub, JSON, XML用の 配信サーブレットが自動生成されるのは便 利(今回は使用しなかったがCSVの配信機 能もある)
  • 45. edge2.ccのアプローチ UI: HTML5 (+ Open Web Platform & jQuery) Webブラウザ側にUI処理を集約 サーバとの通信はREST(JSON) データベース: KVS DataStore CRUD処理の自動生成 分散処理:メッセージング Google App Engine JavaではMOMは未サポート Cron/TaskQueueを利用した非同期処理の自動生成
  • 46. SimpleModelerのアプローチ UI: HTML5 (+ Open Web Platform & jQuery) REST Servletの自動生成 データベース: KVS DataStore CRUD処理の自動生成 分散処理:メッセージング Google App Engine JavaではMOMは未サポート Cron/TaskQueueを利用した非同期処理の自動生成
  • 47. edgeSNS 簡易版SNS SNS日記機能の実現 クラウド・アプリケーションの構築技術を追求するのを目 的に、アプリケーションは平凡なものを選択 目的 メッセージングの活用 非同期入出力の活用 メッセージング、非同期入出力の実現に対する SimpleModelerの活用 メッセージングを基盤にしたコンポーネント・ベース開発
  • 48. 考え方 スケーラビリティを高く 応答時間は短く スループットは高く ログは十分な情報量をたくさん取る でも、計算時間とデータ量は気にしない ⇒できるだけ非同期処理化する
  • 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. 同期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. 非同期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. 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. モデルとレコード 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
  • 55. テーブル管理情報 テーブル単位で保持しておく必要がある情報があ る。 テーブル全体の更新時間(AtomPubで配信) レコード数、最大値、最小値 アプリケーションが必要とするデータ テーブルに対応する管理データを用意する必要が ある。 SimpleModelerで自動生成(予定含む) memcacheをフロント、DataStoreバックエンド、キャッ シュはread/writeロックを用いてスケーラビリティを確保 (多分) MEEntityModelInfo
  • 56. 履歴管理 更新履歴の保存 有無 更新履歴の内容 更新日時・更新者 レコード内容 更新履歴の管理方法 同一レコード内で更新履歴を保持 レコードは追加のみとして最新レコードをフラグで有効にする(一つ前のレコードの有効フラグをfalseに する) 更新履歴テーブルを別に用意 参照履歴の保存 有無 参照履歴の内容 参照日時・参照者 レコード内容 参照履歴の管理方法 同一レコード内で参照履歴を保持 参照履歴テーブルを別に用意 SimpleModelerで対応予定
  • 57. 話題 非正規化 事前集計 count, max, min アプリケーションが必要とするデータ スキーマ・エボリューション AtomPubとの親和性 エラーへの対応 リトライ必須、エラーログ 排他制御 memcache counterを使った read lock/write lock EntityとDocumentの役割分担