Kansai.pm#15 Perl Ocean

934 views

Published on

YAPC Asia 2012 で話した内容ほとんどそのままです

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
934
On SlideShare
0
From Embeds
0
Number of Embeds
36
Actions
Shares
0
Downloads
3
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Kansai.pm#15 Perl Ocean

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

×