SignalR Tune-up
Post on 24-May-2015
2363 Views
Preview:
DESCRIPTION
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
今日のまとめ
リクエストを高速処理
配信先を適切に
可能な限り間引く
まとめて配信する
Tutorial: High-Frequency Realtime with SignalR 2.0
SignalR Performance
公式サイトも参考に
SignalR ♡ Rx
ReactiveSignalRSignalRの少し面倒な記述をRxを使って楽に
https://github.com/xin9le/ReactiveSignalR
Enjoy SignalR!!
Thank you
Interactive communication to you.
SignalR
top related