Perl Ocean

1,894 views

Published on

Perl Ocean - XMPP based realtime communication framework suite

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,894
On SlideShare
0
From Embeds
0
Number of Embeds
300
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Perl Ocean

  1. 1. Perl OceanXMPP based realtime communication framework suite 1
  2. 2. 2
  3. 3. •@lapis25•Kansai Perl Mongers•mixi inc.•http://id.mixi.jp/lapis25 3
  4. 4. About Ocean 4
  5. 5. XMPPプロトコルを中⼼心とするリアルタイムコミュニケーション フレームワークスイート 5
  6. 6. Agenda•XMPP?•Perl Ocean 6
  7. 7. XMPP? 7
  8. 8. EXtensible Messaging and Presence Protocol拡張可能なメッセージとプレゼンスのプロトコル 8
  9. 9. 歴史• もともとJabberという名前だった • そのためいまでもJabber/XMPPと呼ばれるこ とがある• XMPPと名前を変え,2004/10にRFCとして公表• 2011/3 にアップデート 9
  10. 10. 特徴• オープン標準• 永続的コネクション• XMLベース• 中央サーバを持たない• 拡張性 10
  11. 11. オープン標準• プロトコルはJabberの頃から公開されていた• 現在はRFCとして公表されている • RFC6120 および  RFC6121• Jabberからだと10年年以上,RFCからでも8年年 11
  12. 12. 永続的コネクション• ログインからログアウトまでの間 ひとつのTCPコネクションを維持• コネクション上で メッセージなどのやりとりを双⽅方向に⾏行行う 12
  13. 13. XMLベース• 単⼀一の⻑⾧長いXMLとして符号化される• XMLがゆえに冗⻑⾧長• バイナリデータを送る場合は Base64エンコードしてから 送る必要があるので⾮非効率率率 13
  14. 14. 中央サーバを持たない• ネットワークの構造は電子メールに似ていて 独自のサーバを立てられる• サーバ間をつなぐ仕様(S2S)が存在する• ローカルのみのネットワークも可能 14
  15. 15. 拡張性• Core以外の機能は,RFCではなく XEP (XMPP Extension Protocol)と呼ばれる• グループチャットやボイス・ビデオチャット などの規格もここに含まれる• http://xmpp.org/xmpp-protocols/xmpp- extensions/ 15
  16. 16. できること 16
  17. 17. Core:RFC6120• tlsによる接続• SASLによる認証(SASL:  RFC4422)• 別XMPPネットワークへの転送(ルーティング) 17
  18. 18. IM:RFC6121• プレゼンス(ユーザの現状を表現するデー タ)の送受信• トーク(1対1の会話,メッセージング)• ロスタ(友⼈人情報)のやりとり• サブスクリプション(友⼈人情報の登録や削除) 18
  19. 19. 拡張仕様• ユーザプロフィール情報取得 (XEP-0054: vcard-temp)• グループチャット (XEP-0045: Multi-User Chat)• Pub-Sub (XEP-0060: Publish-Subscribe)• Jingle ボイスチャットやビデオチャットのため の拡張  (XEP-0166: Jingle) 19
  20. 20. アプリケーション• iChat/iMessage• Google Talk• Facebook Chat• MSN Live• PSN 20
  21. 21. 21
  22. 22. Perl Ocean 22
  23. 23. Lyo Kato⽒氏によって開発されたXMPPプロトコルを中⼼心とするリアルタイムコミュニケーション フレームワークスイート 23
  24. 24. 特徴 24
  25. 25. Webサービスとのインテグレーションを前提とした設計 現在あるWebサービスに,リアルタイムコミュニケーションを インテグレーションできることを⽬目的とする 25
  26. 26. デファクトスタンダードな拡張をひと通り標準サポートしたフルスタックフレームワーク 拡張機能のうちデファクトスタンダードなものや Webサービスとのインテグレーションにおいて必要と思われるものは 最初から組み込む 26
  27. 27. ⼤大規模なWebサービスとのインテグレーションに耐えるクラスタサポート 同時接続数の問題の解決,⾮非同期処理理におけるプロセスや サーバーライフサイクルサービスコード更更新頻度度を考慮した クラスタリングをサポート 27
  28. 28. WebSocketなどを利利⽤用したHTTP Bindingの独⾃自サポート HTTP  Binding(WebSocket/SSE/XHR)を独⾃自にサポート クラスタサポートと組み合わせて,XMPPと併⽤用することも可能 28
  29. 29. 機能• ⼀一対⼀一のメッセンジャ• プレゼンスサービス• グループチャット• イベントのプッシュ通知• オーディオチャット・ビデオチャット 29
  30. 30. Oceanの実装状況 30
  31. 31. 実装済み機能• 基本的なメッセンジャ機能• グループチャット 31
  32. 32. 実装中機能• イベントのプッシュ通知• HTTP Bindingのサポート• オーディオチャット・ビデオチャット 32
  33. 33. 組み込まない物• ユーザ情報管理理• フレンド管理理• 購読管理理 33
  34. 34. Oceanのクラスタサポート 34
  35. 35. スケーリングの課題 35
  36. 36. サーバパフォーマンスからくる同時接続数の限界 1サーバあたりの同時接続数の限界 リソースの枯渇,パフォーマンスの低下 36
  37. 37. プロセス/スレッドのブロック イベントドリブンなシステムの上で データベースの読み出しなど重い同期処理理が発⽣生すると プロセスやスレッドをブロックしてしまう 37
  38. 38. サーバライフサイクルとサービスコード更更新頻度度のミスマッチ 永続的コネクションしているクライアントがある状況では 頻繁的な再起動は避けたい 38
  39. 39. 三層構成のアーキテクチャ デリバリサービス メッセージブローカ フロントエンドノード群 39
  40. 40. フロントエンドノード群 Ocean Frontend Frontend Frontend Frontend (XMPP) (XMPP) (XMPP) (WebSocket) 40
  41. 41. メッセージブローカ Ocean Delivery Server Delivery Server Broker(gearmand) Frontend Frontend 41
  42. 42. デリバリサービス WebService Connection Map OceanUserA Home 1 Delivery Server Delivery ServerUserA Work 2UserB Home 1 Broker inbox(gearmand) inbox(gearmand) Frontend Frontend 42
  43. 43. WebService Ocean Delivery Delivery Server Server Broker(gearmand)inbox(gearmand) inbox(gearmand) Frontend Frontend 43
  44. 44. Oceanで使っている技術•Perl5.8+•Gearman•AnyEvent 44
  45. 45. Licence• Artistic Licence• Perlと同じ 45
  46. 46. Oceanをためす 46
  47. 47. GitHub上で開発 https://github.com/perl-ocean/ocean-core 47
  48. 48. ドキュメントも拡充中 http://perl-ocean.github.io/ocean-core 48
  49. 49. プロジェクトテンプレートの⽣生成 インテグレーションのための プロジェクトテンプレートを スクリプトで⽣生成できる 49
  50. 50. スタンドアロンモード ウェブサービスとのつなぎ込みが必要ない スタンドアロンモードも実装 50
  51. 51. Oceanをインストールしてすぐに試せます http://perl-ocean.github.io/ocean-core/ installation.html 51
  52. 52. mixiにてトライアル中• iChatでの友人との1対1のメッセージのやりと りのみ• http://mixi.jp/promotion.pl?id=realtime 52
  53. 53. Question? 53

×