VMware Cloud on AWS で拓かれるクラウドの未来~クラウドに移行 リプレース パッケージアプリの SaaS化 クラウド向けの 開発 新しいクラウド
クラウド上で の リアルタイム...
description
Transcript of クラウド上で の リアルタイム...
![Page 1: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/1.jpg)
Windows Azure ハンズオントレーニング
1
セミナー&ハンズオン ラボ シリーズ
クラウド上でのリアルタイム・非同期・双方向通信
アプリケーション開発基礎
![Page 2: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/2.jpg)
2
アジェンダ
❖Windows Azure 概要
❖SignalR
❖ハンズオン ラボについて
❖情報リソース
![Page 3: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/3.jpg)
3
Windows Azure 概要
![Page 4: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/4.jpg)
4
Windows Azure 概要Windows Azure のサービス群
仮想マシン(Virtual Machines)
クラウド サービス(Cloud Services)
Web サイト(Web Sites)
SQL データベース(SQL Database)
ストレージ(Storage)
トラフィック管理(Traffic Manager)
仮想ネットワーク(Virtual Network)
サービス バス(Service Bus)
メディア配信(Media)
コンテンツ配信(CDN)
キャッシュ(Caching)
アクセス制御& AD(ACS & Active Directory)
![Page 5: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/5.jpg)
5
Windows Azure 概要Windows Azure のデータセンター
データセンターCDN
![Page 6: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/6.jpg)
6
Windows Azure 概要コンピューティングの 3 つの選択肢
オンプレミス
仮想化
OS
ハードウェア
ネットワーク
データ
アプリケーション
ファイアウォール
Web サイト
アプリケーション
データ
クラウド サービス
アプリケーション
ファイアウォール
データ
仮想ネットワーク
仮想マシン
仮想ネットワーク
データ
アプリケーション
ファイアウォール
OS
![Page 7: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/7.jpg)
7
SignalR
![Page 8: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/8.jpg)
SignalR
❖リアルタイムかつ双方向の通信を簡単に実現❖考え方はリモートプロシージャコール❖サーバからクライアントへのプッシュが可能
❖NuGet ( パッケージマネージャ ) を通じて提供
SignalR とは?
![Page 9: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/9.jpg)
SignalR
❖サーバからのプッシュを利用する❖ステータスの変化を即座に通知
(Ex. Windows Azure 管理ポータル , Facebook)
❖リアルタイム、双方向通信を利用する❖メッセージの送受信 (Ex. チャット、サービス内
API)
SignalR を利用するシナリオ
![Page 10: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/10.jpg)
10
SignalRSignalR のアーキテクチャ
SignalR サーバクライアント
サーバへのリクエスト
( メソッド呼び出し )
サーバのレスポンス( ブロードキャスト )
![Page 11: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/11.jpg)
SignalR
❖ASP.NET 上に構築されている❖Web Forms, MVC, Web Pages などと共存可能
❖API エンドポイント “ Hub”❖クライアントから呼び出し可能なメソッドの集合
サーバサイドの仕組み
Hub_1
SomeMethod_1
SomeMethod_2
SomeMethod_1
http://***.cloudapp.net/signalr
Hub_2
![Page 12: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/12.jpg)
SignalR
❖Hub の実装例
サーバサイドの実装
[HubName("chat")]public class ChatHub : Hub{ public void SendMessage(string text) { Clients.ReceiveMessage(text); }}
クライアントに公開する名前
クライアントから呼び出し可能なメソッド
![Page 13: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/13.jpg)
SignalR
❖Hub クラスに実装されているプロパティ❖Context
❖現在のリクエスト情報を保持❖Groups
❖グループを管理するクラス❖Clients
❖SignalR で管理している全てのクライアントを表す❖Caller
❖リクエストを行ったクライアントを表す
サーバから利用できる情報
![Page 14: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/14.jpg)
SignalR
❖SignalR がクライアントを管理❖クライアントごとに一意なコネクション ID を発行
サーバ - クライアント間接続の仕組み
ネゴシエーション
コネクション ID 発行
ConnectionId =CAB9F88C-0372-
4237-A150-1A870583BCDA
![Page 15: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/15.jpg)
SignalR
❖サーバに用意されたメソッドを呼び出す❖クライアントは戻り値を取ることが出来る
クライアントからサーバ
public void SendMessage(string text){}
chat.invoke("SendMessage", text);
サーバのメソッド呼び出し
クライアントとサーバのメソッド名が対応している
![Page 16: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/16.jpg)
SignalR
❖クライアントに登録されたメソッドを呼び出す❖サーバは戻り値を取ることが出来ない
サーバからクライアント
Clients.ReceiveMessage(text);chat.on("ReceiveMessage", function(text) {});
クライアントとサーバのメソッド名が対応している
クライアントのメソッド呼び出し
![Page 17: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/17.jpg)
SignalR
❖クライアントをグループ化して管理
接続のグルーピング
グループ A グループ B
グループごとの操作が可能
![Page 18: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/18.jpg)
SignalR
❖グループに接続を追加する実装
接続のグルーピング
[HubName("chat")]public class ChatHub : Hub{ public void JoinGroup(string groupName) { Groups.Add(Context.ConnectionId, groupName); }
public void LeaveGroup(string groupName) { Groups.Remove(Context.ConnectionId, groupName); }}
グループに追加
グループから削除
![Page 19: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/19.jpg)
SignalR
❖グループへのメソッド呼び出し
グループへのメソッド呼び出し
[HubName("chat")]public class ChatHub : Hub{ public void SendMessage(string groupName, string text) { Clients[groupName].ReceiveMessage(text); }}
グループに対してメソッド呼び出し
![Page 20: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/20.jpg)
SignalR
❖各種クライアントライブラリを提供❖JavaScript (SignalR と同時にインストール )❖.NET Framework 4.5 / Windows Store アプリ❖Silverlight 4 / 5
❖SignalR と同様に NuGet を通じて提供
クライアントサイドの実装
![Page 21: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/21.jpg)
SignalR
❖JavaScript❖コールバック、 jQuery.Deferred を使う
クライアントサイドのライブラリ
var connection = $.hubConnection();var chat = connection.createProxy("chat");
chat.on("ReceiveMessage", function(message) { alert(message);});
connection.start(function() { chat.invoke("SendMessage", "text message");});
![Page 22: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/22.jpg)
SignalR
❖.NET Framework 4.5 / Windows Store アプリ❖async / await 記法を使う
クライアントサイドのライブラリ
var connection = new HubConnection("http://localhost:12345/");var chat = connection.CreateProxy("chat");
chat.On<string>("ReceiveMessage", message => MessageBox.Show(message));
await connection.Start();
chat.Invoke("SendMessage", "text message");
![Page 23: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/23.jpg)
SignalR
❖Silverlight 4 / 5❖Task ベースの API をそのまま使う
クライアントサイドのライブラリ
var connection = new HubConnection("http://localhost:12345/");var chat = connection.CreateProxy("chat");
chat.On<string>("ReceiveMessage", message => MessageBox.Show(message));
connection.Start().ContinueWith(p =>{ chat.Invoke("SendMessage", "text message");});
![Page 24: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/24.jpg)
SignalR
❖複数のトランスポート(接続)をサポート❖WebSocket (IIS 8 と .NET 4.5 の組み合わせ )❖Server-Sent Events (SSE)❖Infinity Frame❖Long-polling
SignalR で使われている技術
トランスポート
WebSocket, SSE, Frame, Long-polling
![Page 25: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/25.jpg)
SignalR
❖自動的にトランスポートを切り替える❖WebSocket :
❖Server-Sent Events :
❖Infinity Frame :
❖Long-polling : 古いブラウザ
トランスポートとブラウザの関係
>>
>
![Page 26: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/26.jpg)
SignalR
❖永続的なコネクションをインスタンス毎に作成❖単純に数を増やすだけでは対応できない
スケールアウトの問題点
インスタンス 0 インスタンス 1
![Page 27: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/27.jpg)
SignalR
❖インスタンス間で接続を共有する必要がある❖メッセージングを利用する
スケールアウト
インスタンス 0 インスタンス 1
接続情報の共有
![Page 28: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/28.jpg)
SignalR
❖Pub/Sub 型のメッセージングを利用❖Windows Azure サービスバス❖Redis (Windows Azure Virtual Machine)
❖プラグインとして NuGet 経由で提供❖SignalR.WindowsAzureServiceBus❖SignalR.Redis
メッセージングを使ってスケールアウト
![Page 29: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/29.jpg)
29
SignalR
❖Windows Azure サービスバス❖メッセージの流れ
Pub/Sub 型のメッセージング
パブリッシャー( インスタンス 0)
トピック1
トピック2
トピック3
サブスクライバー
( インスタンス 1)
サブスクライバー
( インスタンス 2)
![Page 30: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/30.jpg)
SignalR実際のスケールアウト例
Windows Azure サービスバス Redis
インスタンス 0 インスタンス 1
接続情報の共有
![Page 31: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/31.jpg)
❖メッセージ数課金❖\0.88/10000
メッセージ
❖スケールアウト❖トピック数を増やす
❖時間課金❖S インスタンス
\7.00/h
❖スケールアウト❖サーバを増やす
SignalRWindows Azure と Redis の比較
非常に容易 Redis 自体の知識が要求される
![Page 32: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/32.jpg)
SignalR
❖SignalR を利用するメリット❖シンプルなクライアント・サーバ API❖非同期・マルチスレッドで動作❖最新・最適な通信方式を自動選択❖スケールアウトが非常に容易❖クライアント・グループ管理が用意済み
まとめ
32
開発者は機能の実装に集中できる
![Page 33: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/33.jpg)
33
ハンズオン ラボについて
![Page 34: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/34.jpg)
34
ハンズオン ラボの演習内容
❖演習 1 :簡単な SignalR アプリケーションの開発❖Windows Azure Web Sites へのデプロイまで
❖演習2:チャットアプリケーションの開発❖より実践的なアプリケーションの開発
❖演習3:(おまけ) Windows Azure へ配置し、 スケールアウトを行う❖複数インスタンス上での動作を確認
![Page 35: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/35.jpg)
35
情報リソース
![Page 36: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/36.jpg)
36
情報リソース
❖ Windows Azure 管理ポータルサイト❖ http://manage.windowsazure.com/
❖ Windows Azure 情報サイト❖ http://www.windowsazure.com/
❖ Windows Azure SDK ドキュメント❖ http://msdn.microsoft.com/ja-jp/library/dd163896.aspx
❖ Windows Azure Team Blog ( 英語 )❖ http://blogs.msdn.com/b/windowsazure/
❖ Windows Azure 開発ツール ダウンロード❖ http://www.windowsazure.com/ja-jp/develop/downloads/
❖ Windows Azure 管理ツール ダウンロード❖ http://www.windowsazure.com/ja-jp/manage/downloads/
❖ Windows Azure Platform Training Kit ( 英語 )❖ http://
www.microsoft.com/downloads/details.aspx?FamilyID=413E88F8-5966-4A83-B309-53B7B77EDF78
Windows Azure 関連
![Page 37: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/37.jpg)
37
情報リソース
❖SignalR 公式サイト ( 英語 )❖http://signalr.net/
❖SignalR – GitHub プロジェクトサイト ( 英語 )❖http://github.com/SignalR
❖SignalR – Wiki ページ ( 英語 )❖http://github.com/SignalR/SignalR/wiki
❖SignalR – Twitter ( 英語 )❖http://twitter.com/SignalR
❖SignalR – NuGet Gallery❖http://nuget.org/packages/SignalR
SignalR 関連
![Page 38: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎](https://reader033.fdocuments.net/reader033/viewer/2022061516/56815ab8550346895dc87360/html5/thumbnails/38.jpg)
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a
commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.