クラウド上で の リアルタイム...

38
Windows Azure ハハハハハハハハハハハ ハハハハ ハハハハハ ハハ ハハハハ ハハハハハハハ ハハハハハハ ハハハハ ハハハハハハハハハハハハハハハ ・・ ハハ 1

description

クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎. アジェンダ. Windows Azure 概要 SignalR ハンズオン ラボについて 情報リソース. Windows Azure 概要. Windows Azure 概要. Windows Azure のサービス群. クラウド サービス (Cloud Services). 仮想マシン (Virtual Machines). Web サイト (Web Sites). SQL データベース (SQL Database). ストレージ (Storage). - PowerPoint PPT Presentation

Transcript of クラウド上で の リアルタイム...

Page 1: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

Windows Azure ハンズオントレーニング

1

セミナー&ハンズオン ラボ シリーズ

クラウド上でのリアルタイム・非同期・双方向通信

アプリケーション開発基礎

Page 2: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

2

アジェンダ

❖Windows Azure 概要

❖SignalR

❖ハンズオン ラボについて

❖情報リソース

Page 3: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

3

Windows Azure 概要

Page 4: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

5

Windows Azure 概要Windows Azure のデータセンター

データセンターCDN

Page 6: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

6

Windows Azure 概要コンピューティングの 3 つの選択肢

オンプレミス

仮想化

OS

ハードウェア

ネットワーク

データ

アプリケーション

ファイアウォール

Web サイト

アプリケーション

データ

クラウド サービス

アプリケーション

ファイアウォール

データ

仮想ネットワーク

仮想マシン

仮想ネットワーク

データ

アプリケーション

ファイアウォール

OS

Page 7: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

7

SignalR

Page 8: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖リアルタイムかつ双方向の通信を簡単に実現❖考え方はリモートプロシージャコール❖サーバからクライアントへのプッシュが可能

❖NuGet ( パッケージマネージャ ) を通じて提供

SignalR とは?

Page 9: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖サーバからのプッシュを利用する❖ステータスの変化を即座に通知

(Ex. Windows Azure 管理ポータル , Facebook)

❖リアルタイム、双方向通信を利用する❖メッセージの送受信 (Ex. チャット、サービス内

API)

SignalR を利用するシナリオ

Page 10: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

10

SignalRSignalR のアーキテクチャ

SignalR サーバクライアント

サーバへのリクエスト

( メソッド呼び出し )

サーバのレスポンス( ブロードキャスト )

Page 11: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖Hub の実装例

サーバサイドの実装

[HubName("chat")]public class ChatHub : Hub{ public void SendMessage(string text) { Clients.ReceiveMessage(text); }}

クライアントに公開する名前

クライアントから呼び出し可能なメソッド

Page 13: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖Hub クラスに実装されているプロパティ❖Context

❖現在のリクエスト情報を保持❖Groups

❖グループを管理するクラス❖Clients

❖SignalR で管理している全てのクライアントを表す❖Caller

❖リクエストを行ったクライアントを表す

サーバから利用できる情報

Page 14: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖SignalR がクライアントを管理❖クライアントごとに一意なコネクション ID を発行

サーバ - クライアント間接続の仕組み

ネゴシエーション

コネクション ID 発行

ConnectionId =CAB9F88C-0372-

4237-A150-1A870583BCDA

Page 15: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖サーバに用意されたメソッドを呼び出す❖クライアントは戻り値を取ることが出来る

クライアントからサーバ

public void SendMessage(string text){}

chat.invoke("SendMessage", text);

サーバのメソッド呼び出し

クライアントとサーバのメソッド名が対応している

Page 16: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖クライアントに登録されたメソッドを呼び出す❖サーバは戻り値を取ることが出来ない

サーバからクライアント

Clients.ReceiveMessage(text);chat.on("ReceiveMessage", function(text) {});

クライアントとサーバのメソッド名が対応している

クライアントのメソッド呼び出し

Page 17: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖クライアントをグループ化して管理

接続のグルーピング

グループ A グループ B

グループごとの操作が可能

Page 18: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖グループへのメソッド呼び出し

グループへのメソッド呼び出し

[HubName("chat")]public class ChatHub : Hub{ public void SendMessage(string groupName, string text) { Clients[groupName].ReceiveMessage(text); }}

グループに対してメソッド呼び出し

Page 20: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖各種クライアントライブラリを提供❖JavaScript (SignalR と同時にインストール )❖.NET Framework 4.5 / Windows Store アプリ❖Silverlight 4 / 5

❖SignalR と同様に NuGet を通じて提供

クライアントサイドの実装

Page 21: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖複数のトランスポート(接続)をサポート❖WebSocket (IIS 8 と .NET 4.5 の組み合わせ )❖Server-Sent Events (SSE)❖Infinity Frame❖Long-polling

SignalR で使われている技術

トランスポート

WebSocket, SSE, Frame, Long-polling

Page 25: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖自動的にトランスポートを切り替える❖WebSocket :

❖Server-Sent Events :

❖Infinity Frame :

❖Long-polling : 古いブラウザ

トランスポートとブラウザの関係

>>

>

Page 26: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖永続的なコネクションをインスタンス毎に作成❖単純に数を増やすだけでは対応できない

スケールアウトの問題点

インスタンス 0 インスタンス 1

Page 27: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖インスタンス間で接続を共有する必要がある❖メッセージングを利用する

スケールアウト

インスタンス 0 インスタンス 1

接続情報の共有

Page 28: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖Pub/Sub 型のメッセージングを利用❖Windows Azure サービスバス❖Redis (Windows Azure Virtual Machine)

❖プラグインとして NuGet 経由で提供❖SignalR.WindowsAzureServiceBus❖SignalR.Redis

メッセージングを使ってスケールアウト

Page 29: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

29

SignalR

❖Windows Azure サービスバス❖メッセージの流れ

Pub/Sub 型のメッセージング

パブリッシャー( インスタンス 0)

トピック1

トピック2

トピック3

サブスクライバー

( インスタンス 1)

サブスクライバー

( インスタンス 2)

Page 30: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR実際のスケールアウト例

Windows Azure サービスバス Redis

インスタンス 0 インスタンス 1

接続情報の共有

Page 31: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

❖メッセージ数課金❖\0.88/10000

メッセージ

❖スケールアウト❖トピック数を増やす

❖時間課金❖S インスタンス

\7.00/h

❖スケールアウト❖サーバを増やす

SignalRWindows Azure と Redis の比較

非常に容易 Redis 自体の知識が要求される

Page 32: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

SignalR

❖SignalR を利用するメリット❖シンプルなクライアント・サーバ API❖非同期・マルチスレッドで動作❖最新・最適な通信方式を自動選択❖スケールアウトが非常に容易❖クライアント・グループ管理が用意済み

まとめ

32

開発者は機能の実装に集中できる

Page 33: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

33

ハンズオン ラボについて

Page 34: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

34

ハンズオン ラボの演習内容

❖演習 1 :簡単な SignalR アプリケーションの開発❖Windows Azure Web Sites へのデプロイまで

❖演習2:チャットアプリケーションの開発❖より実践的なアプリケーションの開発

❖演習3:(おまけ) Windows Azure へ配置し、 スケールアウトを行う❖複数インスタンス上での動作を確認

Page 35: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

35

情報リソース

Page 36: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

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: クラウド上で の リアルタイム ・非同期・双方向通信アプリケーション開発基礎

© 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.