signalr tune-up

Post on 24-May-2015

2.363 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

2014/03/01 Room metro #23 資料

TRANSCRIPT

Room metro #23

SignalR Tune-up- 効率的な通知を目指して -

Name

鈴木孝明

Twitter Account

@xin9le

Award

Microsoft MVP for Visual C#

Blog

http://xin9le.net

About Me

Recent interests

SignalRReactiveExtensions Asterisk 統計/解析

CTI (電話応対システム)某東証一部上場企業のコールセンターを支えるシステム担当最先端の.NET技術を利用してほぼ一人で実装

主にモニタリングに利用オペレーターの状態 / 回線の状態 / IVR (音声自動応答) の進捗応対本数 / 回線の応答率 / タスク管理 (etc...)

業務でSignalR使ってます

CTIシステム概略

ユーザー

Webアプリ(外注)

Web API

SignalR

DB

IVR

オペレーター

モニター

今日必要な部分を簡単に

Basis of SignalR

接続管理

接続ごとにGUIDの自動割り当て(ConnectionId)

メソッド呼び出し

メッセージ配信のコスト

=10000messages/s

Client数:100

通信頻度:1回/s

通知先:全Client

Client数2 ×通信頻度 = 配信メッセージ数

通信回数可能な限り減らし、CPU負荷を軽減

データ転送量データ量を減らし、回線圧迫の低減と直列化コストの削減

気を付けるべきポイント

メッセージ配信の最適化

Optimization

配信先を絞る

グループ単位で送信

特定のクライアントに送信

固有情報とIdの紐付け

適切な送信先の選択

Clients.All 接続済み全クライアント

Clients.Caller 呼び出し元のみ

Clients.Others 呼び出し元以外

Clients.Client(id) 指定IDのクライアントのみ

Clients.AllExcept(id1, ...) 指定IDのクライアント以外

Clients.Group(name) 指定のグループのみ

Clients.Group(name, id1, ...)指定IDのクライアントを除いたグループ全員

Clients.OthersInGroup(name)呼び出し元を除いたグループ全員

適切な送信先の選択 (SignalR 2.0 -)

Clients.Clients(ids) 指定IDのクライアント

Clients.Groups(names, id1, ...)指定IDのクライアントを除いたグループ全員

Clients.OthersInGroups(names)呼び出し元を除いた指定のグループ全員

Clients.User(userId) 指定のユーザー名

Clients.Users(userIds) 指定のユーザー名

間引く

導入の効果

サーバー / クライアント両方に効果あり

通信量削減

CPU負荷軽減

SignalR ♡ Rx

ThrottleBuffer Distinct Sample

http://msdn.microsoft.com/en-us/library/system.reactive.linq.observable_methods.aspxhttp://okazuki.hatenablog.com/entry/20120305/1329923070

クライアント側の対策

律儀に全部送信しない

サーバー側の対策

検討/考慮すべきこと

間引きの性質とシステム要件の調整

(意図的な)

遅延が発生

(総量は減るが)

一度に送る通信量UP

まだやれること、あるよね

Other Approaches

パイプライン化

通常の配信

UserStatus

Tweet

パイプライン化

そう、Rxならね

速く多く捌く

非同期処理

応答性UP

サーバー側の修正のみ

Micro-ORMの利用

最大50倍

高速化 (当社比)

高速なDBアクセス

Dapperオススメ

LINQ to SQLから乗り換え(弊社事例)

http://www.slideshare.net/kiyokura/adonetormmicro-orm-dapper-dot-net/

メッセージ/メモリの圧縮

これだけは覚えて帰りましょう!

Conclusion

今日のまとめ

リクエストを高速処理

配信先を適切に

可能な限り間引く

まとめて配信する

SignalR ♡ Rx

ReactiveSignalRSignalRの少し面倒な記述をRxを使って楽に

https://github.com/xin9le/ReactiveSignalR

Enjoy SignalR!!

Thank you

Interactive communication to you.

SignalR

top related