signalr tune-up
DESCRIPTION
2014/03/01 Room metro #23 資料TRANSCRIPT
![Page 1: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/1.jpg)
Room metro #23
SignalR Tune-up- 効率的な通知を目指して -
![Page 2: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/2.jpg)
Name
鈴木孝明
Twitter Account
@xin9le
Award
Microsoft MVP for Visual C#
Blog
http://xin9le.net
About Me
![Page 3: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/3.jpg)
![Page 4: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/4.jpg)
![Page 5: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/5.jpg)
Recent interests
SignalRReactiveExtensions Asterisk 統計/解析
![Page 6: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/6.jpg)
CTI (電話応対システム)某東証一部上場企業のコールセンターを支えるシステム担当最先端の.NET技術を利用してほぼ一人で実装
主にモニタリングに利用オペレーターの状態 / 回線の状態 / IVR (音声自動応答) の進捗応対本数 / 回線の応答率 / タスク管理 (etc...)
業務でSignalR使ってます
![Page 7: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/7.jpg)
CTIシステム概略
ユーザー
Webアプリ(外注)
Web API
SignalR
DB
IVR
オペレーター
モニター
![Page 8: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/8.jpg)
今日必要な部分を簡単に
Basis of SignalR
![Page 9: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/9.jpg)
接続管理
接続ごとにGUIDの自動割り当て(ConnectionId)
![Page 10: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/10.jpg)
メソッド呼び出し
![Page 11: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/11.jpg)
メッセージ配信のコスト
=10000messages/s
Client数:100
通信頻度:1回/s
通知先:全Client
Client数2 ×通信頻度 = 配信メッセージ数
![Page 12: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/12.jpg)
通信回数可能な限り減らし、CPU負荷を軽減
データ転送量データ量を減らし、回線圧迫の低減と直列化コストの削減
気を付けるべきポイント
![Page 13: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/13.jpg)
メッセージ配信の最適化
Optimization
![Page 14: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/14.jpg)
配信先を絞る
![Page 15: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/15.jpg)
グループ単位で送信
![Page 16: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/16.jpg)
特定のクライアントに送信
![Page 17: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/17.jpg)
固有情報とIdの紐付け
![Page 18: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/18.jpg)
適切な送信先の選択
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)呼び出し元を除いたグループ全員
![Page 19: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/19.jpg)
適切な送信先の選択 (SignalR 2.0 -)
Clients.Clients(ids) 指定IDのクライアント
Clients.Groups(names, id1, ...)指定IDのクライアントを除いたグループ全員
Clients.OthersInGroups(names)呼び出し元を除いた指定のグループ全員
Clients.User(userId) 指定のユーザー名
Clients.Users(userIds) 指定のユーザー名
![Page 20: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/20.jpg)
間引く
![Page 21: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/21.jpg)
導入の効果
サーバー / クライアント両方に効果あり
通信量削減
CPU負荷軽減
![Page 22: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/22.jpg)
SignalR ♡ Rx
ThrottleBuffer Distinct Sample
http://msdn.microsoft.com/en-us/library/system.reactive.linq.observable_methods.aspxhttp://okazuki.hatenablog.com/entry/20120305/1329923070
![Page 23: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/23.jpg)
クライアント側の対策
律儀に全部送信しない
![Page 24: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/24.jpg)
サーバー側の対策
![Page 25: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/25.jpg)
検討/考慮すべきこと
間引きの性質とシステム要件の調整
(意図的な)
遅延が発生
(総量は減るが)
一度に送る通信量UP
![Page 26: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/26.jpg)
まだやれること、あるよね
Other Approaches
![Page 27: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/27.jpg)
パイプライン化
![Page 28: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/28.jpg)
通常の配信
UserStatus
Tweet
![Page 29: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/29.jpg)
パイプライン化
![Page 30: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/30.jpg)
そう、Rxならね
![Page 31: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/31.jpg)
速く多く捌く
![Page 32: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/32.jpg)
非同期処理
応答性UP
サーバー側の修正のみ
![Page 33: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/33.jpg)
Micro-ORMの利用
最大50倍
高速化 (当社比)
高速なDBアクセス
Dapperオススメ
LINQ to SQLから乗り換え(弊社事例)
http://www.slideshare.net/kiyokura/adonetormmicro-orm-dapper-dot-net/
![Page 34: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/34.jpg)
メッセージ/メモリの圧縮
![Page 35: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/35.jpg)
これだけは覚えて帰りましょう!
Conclusion
![Page 36: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/36.jpg)
今日のまとめ
リクエストを高速処理
配信先を適切に
可能な限り間引く
まとめて配信する
![Page 37: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/37.jpg)
Tutorial: High-Frequency Realtime with SignalR 2.0
SignalR Performance
公式サイトも参考に
![Page 38: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/38.jpg)
SignalR ♡ Rx
![Page 39: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/39.jpg)
ReactiveSignalRSignalRの少し面倒な記述をRxを使って楽に
https://github.com/xin9le/ReactiveSignalR
![Page 40: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/40.jpg)
Enjoy SignalR!!
Thank you
![Page 41: SignalR Tune-up](https://reader035.vdocuments.net/reader035/viewer/2022081721/5560b837d8b42aef3b8b4b31/html5/thumbnails/41.jpg)
Interactive communication to you.
SignalR