Kansai.pm#15 Perl Ocean

  • 547 views
Uploaded on

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

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

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
547
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
2
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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