【17-c-2】 クラウド上でのエンタープライズアプリケーション開発

Post on 12-Jun-2015

7.218 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

Developers Summit 2011での発表資料小野和俊 氏 / 松本幹 氏 / 中村研二 氏 / 宮崎貴司 氏 / 渡辺俊史 氏 / 内藤浩史 氏MIJS製品技術強化委員会では2010年度の活動として、エンタープライズアプリケーションをクラウド上で動作させるための各種調査や実証実験を行っています。このセッションでは、ロック、トランザクション、読み取り一貫性など、エンタープライズシステムに求められる各種要件を含む「英会話教師予約システム」をWindows Azure、Google App Engine、Force.com、AWSそれぞれを用いて構築した実証実験に関する報告を行います。

TRANSCRIPT

Developers Summit 2011

小野 和俊小野 和俊MIJS MIJS 製品技術強化委員会製品技術強化委員会

17-C-2

クラウド上でのクラウド上でのエンタープライズアプリケーションエンタープライズアプリケーション

開発開発

Developers Summit 2011

Developers Summit 2011

CAPCAP 定理と定理と NoSQLNoSQL

Developers Summit 2011

エンタープライズシステムとエンタープライズシステムとクラウドクラウド

即時一貫性がない 即時一貫性がない = = 使えない?使えない? RDBMSRDBMS を選べば「これまで通りに」シを選べば「これまで通りに」シ

ステムを構築することができるステムを構築することができる しかし、しかし、 NoSQLNoSQL を活用してこそクラウを活用してこそクラウ

ドの恩恵を最大限に受けることができるドの恩恵を最大限に受けることができる

・ NoSQL 縛りでエンタープライズアプリ開発・同一アプリを複数プラットフォームで

・ NoSQL 縛りでエンタープライズアプリ開発・同一アプリを複数プラットフォームで

Developers Summit 2011

課題の要件課題の要件 特定の要件を決めた英会話の講師予約シ特定の要件を決めた英会話の講師予約シ

ステムを作成して、以下項目を検証するステムを作成して、以下項目を検証することこと ロック制御ロック制御 トランザクショントランザクション 読み取り一貫性読み取り一貫性

極力極力 RDBMSRDBMS を使わず、を使わず、 NoSQLNoSQL を使用を使用するする

Developers Summit 2011

検証プラットフォーム検証プラットフォーム

Windows AzureWindows Azure Google App EngineGoogle App Engine Force.comForce.com Amazon Web ServicesAmazon Web Services

Developers Summit 2011

デモ

Developers Summit 2011

宮崎 貴司宮崎 貴司MIJS MIJS 製品技術強化委員会製品技術強化委員会

17-C-2

クラウド上でのクラウド上でのエンタープライズアプリケーションエンタープライズアプリケーション

開発開発

Windows AzureWindows Azure 編 編 

Developers Summit 2011

環境環境

WebRole

WorkerRole

BLOB QUEUETABLE DRIVE

ServiceBus

AccessControl

SQL AZURE

VMRole

今回検証に利用した今回検証に利用した WindowsWindows AzureAzure のサービスのサービスは以下の赤枠の範囲であるは以下の赤枠の範囲である

Data Sync

Developers Summit 2011

Azure StorageAzure Storage のおさらいのおさらい Azure StorageAzure Storage のテーブルは以下が必須項目ですのテーブルは以下が必須項目です

PartitionKey PartitionKey :ノードを指定:ノードを指定 RowKeyRowKey :テーブルの:テーブルの RowIDRowID TimestampTimestamp ::読み取り専用読み取り専用

PartionKeyPartionKey が同じ場合には同じノードに格納されるが同じ場合には同じノードに格納されるPartionKey RowKey 項目 1 … 項目 N Timestamp

ノード 1 125634327 2000 … 雑誌 2010/10/5

ノード 1 1472899292 5000 … 参考書 2010/10/22

ノード 2 123456789 1000 … 本 2010/10/10

ノード 3 7732830930 3000 漫画 2010/10/26

ノード1 ノード 2 ノード 3

Developers Summit 2011

検証の課題検証の課題 Windows AzureWindows Azure プラットフォーム上において、プラットフォーム上において、

特定の要件を決めた英会話の講師予約システム特定の要件を決めた英会話の講師予約システムを作成して、以下項目を検証することを作成して、以下項目を検証すること ロック制御ロック制御 トランザクショントランザクション 読み取り一貫性読み取り一貫性

No 検証項目 要件

1 ロック制御 同じ日に二人の生徒が講師を予約できない

2 トランザクション

講師は指名を受けると報酬として手当てがもらえる

3 読み取り一貫性

指名ランク付け作業完了までは新ランキングが見えない

Developers Summit 2011

データモデルデータモデル

予約日 講師所属 - 登録日 予約日 予約講師名 予約生徒者 手当

20101010

大手町店 -20101010101011678 2010/10/10 10:10:11

山田太郎 斉藤次郎 1000

所属 講師登録日 講師名 誕生日 ランク イメージ URL サムネイルURL

大手町店 20101010101011678

山田太郎 2010/10/13 1 http://xxxxx http://xxxxx

予約・手当テーブル

予約日 :PatitionKey

講師所属 - 講師登録日 :RowKey

講師予約日

予約講師名

予約生徒者

手当て

講師テーブル

所属 :PartionKey

講師登録日 :RowKey

講師名

誕生日

ランク

写真 URL

写真サムネイル URL

予約・手当データ例

講師データ例

主要なデータモデルは以下のとおりです

Developers Summit 2011

楽観的ロックを実現するためには、エンティティのバージョンを確認する必要がある

検証結果<ロック制御>検証結果<ロック制御>

同じ日に二人の生徒が講師を予約できない

要件要件

Azure Storage ロック制御

悲観的ロックを実現するためには、 Azure Storage で制御することはできないため、アプリケーションで制御する必要がある

今回の対応予約テーブルのキーを講師予約日と予約講師のキー情報で一意キーとしているため、楽観的ロックをバージョン確認を行わずに要件を実現した

Developers Summit 2011

検証結果<トランザクション>検証結果<トランザクション> 要件

講師は指名を受けると報酬として手当てがもらえるデータモデル例では、予約情報と手当情報は分けて設計されていた

予約情報 手当情報 Azure Storage トランザクション制御

同じ PartionKey 内かつ 1 クエリ内のみサポートされ、異なるPartionKey や複数テーブル間でのトランザクションはサポートされない

今回の対応予約情報と手当情報を一つのテーブルにし、1クエリで予約&手当情報を取得、登録、更新、削除できるようにし、データの整合性が崩れないようにした

予約+手当情報

Developers Summit 2011

検証結果<読み取り一貫性>検証結果<読み取り一貫性> 要件

指名ランク付け作業完了までは新ランキングが見えない

Azure Storage 読み取り一貫性制御Azure Storage はダーティーリードは行われない

トランザクションは、同時に実行される他のトランザクションからのコミットされていない変更を認識せずに、クエリの実行が開始される前にコミットされた変更のみを認識する

今回の対応指名ランク付けを行うデータを同じテーブル、同じ PartitionKey のレコードで保持し、トランザクションを確保できるようにし、指名ランク付け更新が完了するまで、新しい指名ランクを参照できないようにした。

Developers Summit 2011

内藤 浩史内藤 浩史MIJS MIJS 製品技術強化委員会製品技術強化委員会

17-C-2

クラウド上でのクラウド上でのエンタープライズアプリケーションエンタープライズアプリケーション

開発開発

Google App EngineGoogle App Engine 編 編 

Developers Summit 2011

Google App Engine

環境環境

1/7

データストアデータストアアプリケーション

実行環境

(python / java)

アプリケーション実行環境

(python / java)

slim3slim3

Developers Summit 2011

検証課題検証課題

2/7

Developers Summit 2011

①ロック制御ができていること

検証課題検証課題

②トランザクションを考慮した 作りになっていること

③読取一貫性に応じた 作りになっていること

3/7

Developers Summit 2011

ロック制御ロック制御

4/7

同一日付に講師が予約されない為には・・・同一日付に講師が予約されない為には・・・

予約 ID(キー)を日付+講師 ID で生成。            +登録されたデータに付与される「 version 」で楽観的排他を実現。( slim3 で付与・チェックが可能)

予約 ID(キー)を日付+講師 ID で生成。            +登録されたデータに付与される「 version 」で楽観的排他を実現。( slim3 で付与・チェックが可能)

Developers Summit 2011

トランザクショントランザクション

5/7

予約と手当の2つのテーブルにまとめて書き込みたい・・・予約と手当の2つのテーブルにまとめて書き込みたい・・・

グローバルトランザクションを利用してまとめて put する。

( slim3 でトランザクションを管理)

グローバルトランザクションを利用してまとめて put する。

( slim3 でトランザクションを管理)

Developers Summit 2011

読み取り一貫性読み取り一貫性

6/7

バッチ実行中に集計中ランキングが表示されないようにしたい・・・バッチ実行中に集計中ランキングが表示されないようにしたい・・・

集計トランザクションテーブルに集計ランキング結果を。集計ステータステーブルに集計ステータスを。

集計トランザクションテーブルに集計ランキング結果を。集計ステータステーブルに集計ステータスを。

Developers Summit 2011

結論結論

7/7

フレームワークを使おう。頭を柔らかくしよう。

フレームワークを使おう。頭を柔らかくしよう。

Developers Summit 2011

松本 幹松本 幹MIJS MIJS 製品技術強化委員会製品技術強化委員会

17-C-2

クラウド上でのクラウド上でのエンタープライズアプリケーションエンタープライズアプリケーション

開発開発

Force.comForce.com 編 編 

Developers Summit 2011

環境環境

CR

M

SaaS

今回検証に利用した今回検証に利用した SalesForce.comSalesForce.com ののサービスは、サービスは、 force.comforce.com

Force.com

Heroku

VMforce

Developers Summit 2011

①ロック制御ができること

予約システム作成により以下を検証予約システム作成により以下を検証

②トランザクションを考慮した 作りになること

③読取一貫性に応じた  作りになること

Developers Summit 2011

Force.comForce.com の特徴の特徴

ステップ1MVC モデルを基本とし、全ての UI/ データ操作のユーティリティが存在する

ステップ2上級者向けに細かくロジックの修正や追加・削除が可能

ロック制御もトランザクション制御も、読取一貫性もすべてフレームワークが面倒みてくれる

簡単にアプリを作成できる仕掛けが満載

Developers Summit 2011

処理の中核を担う「 Model 」、表示・出力を司る「 View 」、入力を受け取ってその内容に応じて View と Model を制御する「 Controller 」の 3 要素の組み合わせでシステムを実装する方式。

MVCMVC フレームワークとは?フレームワークとは?

ControllerView と Model を制御

View結果画面を表示

Modelビジネスロジックを構築 DB

利用者

Developers Summit 2011

ControllerView と Model を制御

View結果画面を表示

Modelビジネスロジックを構築 DB

利用者

ステップ1:ノンプログラミングで開発ステップ1:ノンプログラミングで開発

GUI からテーブル

を作成可能

入力パターンチェックなら Excel と同じ感覚

で簡単に作成可能

最小セットは、最初から作成済

テーブルを作成すると、自動で作成

される

Developers Summit 2011

ControllerView と Model を制御

View結果画面を表示

Modelビジネスロジックを構築 DB

利用者

ステップ2:上級者向けカスタマイズステップ2:上級者向けカスタマイズ

独自ロジックを Java ライクな言語で追加可能

Apex コード

Apex コード

Developers Summit 2011

例:例: ApexApex コードコード 独自クエリ言語である SOQL をダイレクトに操作可能

作成したロジックを、指定したタイミング( CRUD操作の前後)で実施可能public class YoyakuUtil{    

    public static void isDuplicated(Yoyaku__c[] yList){        YoyakuLockManager__c[] l = [SELECT Lock__c                       FROM  YoyakuLockManager__c FOR UPDATE ];        Yoyaku__c target = yList[0];        for(Yoyaku__c y:[SELECT TeacherID__c,YoyakuDate__c FROM Yoyaku__c                          WHERE YoyakuDate__c = :target.YoyakuDate__c                            AND GirlID__c = :target.GirlID__c  AND ID <> :target.ID ]              ) {            target.addError(‘重複してます’ );            break; }                target.UserID__c = UserInfo.getUserId();        } }

Apex コードでレコードへの登録重複チェックの例

SOQL をダイレクトに使

Developers Summit 2011

まとめまとめ

MVC フレームワークを装備し、かつカスタマイズ性も高く、生産性が高いことを実感

ロック制御・トランザクション制御・読取一貫性については、何の心配もない

Developers Summit 2011

CAPCAP 定理上の位置づけ定理上の位置づけ

一貫性( C)

一貫性( C)

可用性( A)可用性( A)

通信断耐性( P)

通信断耐性( P)

RDBMSAzure TableAWS RDS

BigTableBerkeleyDBMongoDB

AWS SimpleDBAzure Storage

Developers Summit 2011

Amazon SimpleDBAmazon SimpleDB の概要の概要

AWSAWS クラウド上で稼働するクラウド上で稼働する NoSQL NoSQL DB(DB( ドキュメント指向ドキュメント指向 ))

ErlangErlang で実装された分散型で実装された分散型 DBDB RESTREST によるアクセスが基本。によるアクセスが基本。 Java, Java,

PHP, C#, VB.Net APIPHP, C#, VB.Net API もも AWSAWS により提により提供されている供されている

Developers Summit 2011

Amazon SimpleDBAmazon SimpleDB

SDBSDB のデータ構造のデータ構造

ドメインドメイン

itemID itemType instrcutorName

customerName

reserveDate

i3-2010-08-31-08

I3 Cindy 高木浩二 2010-08-31

I3-2010-08-31-09

I3 Jacob 安藤裕子 2010-08-31アイ

テム

アトリビュート

バリューバリュー

Developers Summit 2011

Amazon SimpleDBAmazon SimpleDB

SimpleDBSimpleDB の制限の制限

ドメイン … 最大 100GBドメイン … 最大 100GB

itemID itemType instrcutorName

customerName

reserveDate

i3-2010-08-31-08

I3 Cindy 高木浩二 2010-08-31

I3-2010-08-31-09

I3 Jacob 安藤裕子 2010-08-31アイ

テム

最大256アトリビュート

最大 1024byte ( テキスト型のみ )最大 1024byte ( テキスト型のみ )

最大 100 ドメイン

アイテム x アトリビュート < 10億件

Developers Summit 2011

SimpleDBSimpleDB のクエリのクエリ SQLSQLライクだが、下記の構文のみサポートライクだが、下記の構文のみサポート

クエリ結果はクエリ結果は25002500件以下、または1件以下、または1MBMB以内以内 クエリは5秒以内クエリは5秒以内 述部述部 (Predicate)(Predicate) は20個以内は20個以内 1述部に1述部に2020比較まで比較まで 1述部には11述部には1attributeattribute のみのみ

select output_list from domain_name [where expression] [sort_instructions] [limit limit]

Developers Summit 2011

排他制御排他制御

String itemId = "i3-" + date;UpdateCondition condition = new UpdateCondition();condition.setExists(false);condition.setName("itemId");sdb.putAttributes(new PutAttributesRequest()     .withDomainName(DOMAIN_NAME)     .withItemName(itemId)     .withExpected(condition)     .withAttributes(         createRepAttribute("itemType", "i3"),

….

putAttribute に条件をつけて、ユニーク制約を実現楽観的排他制御も実装可能

Developers Summit 2011

トランザクション概要トランザクション概要

トランザクション分離は提供されておらトランザクション分離は提供されておらず、ず、 READ_UNCOMMITTEDREAD_UNCOMMITTED相当相当

コミット、ロールバックの概念はないコミット、ロールバックの概念はない デフォルトの読み取り操作は、直近に書かれたデフォルトの読み取り操作は、直近に書かれた

データを読み取る保証はない。データを読み取る保証はない。 ただし、ただし、 20102010年年 22 月より、月より、 Consistent ReadConsistent Readオプションを提供し、読み取り時に指定するこオプションを提供し、読み取り時に指定することで読み取り操作以前に書き込まれたデータのとで読み取り操作以前に書き込まれたデータの取得を保証することができるようになった。取得を保証することができるようになった。

Developers Summit 2011

Consistent Read:Consistent Read: 同時読み同時読み書き書き デフォルト:読み取りデフォルト:読み取り 11 はは 10,20,NULL10,20,NULL のいずれのいずれ

か!か! Consistent Read=trueConsistent Read=true :読み取り:読み取り 11 はは 1010 かか

20→Tx20→Tx 分離なし!分離なし!

出所: Amazon Web Service

タイムライン

クライアント1

クライアント2

書き込み1

属性値 = 10属性値 = 10

書き込み2

属性値 = 20属性値 = 20

読み取り1

読み取り2

通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  20通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  20

通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  10 or 20通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  10 or 20

Developers Summit 2011

Consistent Read:Consistent Read: 同時書込同時書込みみ 読み取り読み取り 1, 21, 2 ともにともに CR=trueCR=true でも値はでも値は 1010 またはまたは

2020!! クライアントからは書き込みクライアントからは書き込み 22 が後に見えても、サーバ側のが後に見えても、サーバ側の処理順は異なるかもしれず、結果として、書き込み処理順は異なるかもしれず、結果として、書き込み 11 とと 22 ののどちらが後かは呼出し側からはわからないどちらが後かは呼出し側からはわからない

出所: Amazon Web Service

タイムライン

クライアント1

クライアント2

書き込み1

属性値 = 10属性値 = 10

書き込み2

属性値 = 20属性値 = 20

読み取り1

読み取り2

通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  10 or 20通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  10 or 20

通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  10 or 20通常(Eventual)Read →  10 or 20 or 値なしConsistent Read →  10 or 20

Developers Summit 2011

講師予約システム設計ポイント講師予約システム設計ポイント

ドメイン間のドメイン間の join Queryjoin Query はできないはできない →→非正規化し、関連する項目はなるべく1ドメイ非正規化し、関連する項目はなるべく1ドメイ

ンに統合するンに統合する ドメイン間のトランザクションなしドメイン間のトランザクションなし

→→一貫性を求められるデータは1ドメインに統合一貫性を求められるデータは1ドメインに統合するする

楽観的排他制御ができるのは楽観的排他制御ができるのは 1PutAttribute1PutAttributeだけ!だけ! →→例えば予約と手当は1アイテムに統合すべき例えば予約と手当は1アイテムに統合すべき

Developers Summit 2011

講師予約システム実装方針講師予約システム実装方針

ロック制御ロック制御 予約時にアイテム予約時にアイテム IDID でで Conditional UpdateConditional Update(既に存在(既に存在

すれば失敗)を行い楽観的排他制御を行うすれば失敗)を行い楽観的排他制御を行う

トランザクショントランザクション 全てのデータを1ドメインに格納全てのデータを1ドメインに格納 予約と手当は1アイテムとして登録予約と手当は1アイテムとして登録

読み取り一貫性読み取り一貫性 トランザクション分離がないため、バッチ処理中に書きトランザクション分離がないため、バッチ処理中に書き込まれたデータは除外する必要がある。過去時間でフィ込まれたデータは除外する必要がある。過去時間でフィルタリングし、実績を集計することにして対応ルタリングし、実績を集計することにして対応

Developers Summit 2011

実装中にわかったこと実装中にわかったこと Item#getAttributes()Item#getAttributes() が返すが返す AttributeAttribute の順序は定義の順序は定義順とは無関係順とは無関係

既存のアイテムに既存のアイテムに putput するとバリューは上書きではなするとバリューは上書きではなく追記く追記

クエリ中に存在しないクエリ中に存在しない AttributeAttribute 名を指定してもエラー名を指定してもエラーにならないにならない

定型的なスキーマを必要としない柔軟性の裏返し定型的なスキーマを必要としない柔軟性の裏返し

AttributeAttribute のの ValueValue がが NullNullだと、クエリに指定してあだと、クエリに指定してあってもっても SelectResultSelectResult にに AttributeAttribute が設定されてこないが設定されてこない

ValueValue はテキスト型のみで、集計関数がないはテキスト型のみで、集計関数がない ソートはサポートされているが、ソートはサポートされているが、 UTF-8UTF-8 の辞書順のみで、データの辞書順のみで、データ型を考慮したソートはアプリ側に委ねている型を考慮したソートはアプリ側に委ねている

Developers Summit 2011

まとめまとめ

NoSQLNoSQL にはには RDBMSRDBMS とは異なる「オプとは異なる「オプション」が用意されているション」が用意されている

NoSQLNoSQLベースでも工夫次第でエンターベースでも工夫次第でエンタープライズアプリケーションは構築可能プライズアプリケーションは構築可能

top related