Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

SignalR Tune-up

3,477 views

Published on

2014/03/01
Room metro #23 資料

Published in: Technology
  • Be the first to comment

SignalR Tune-up

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

×