狠狠撸

狠狠撸Share a Scribd company logo
Perl Ocean
XMPP based realtime communication framework suite



                             @lapis25
  Kansai.pm Meeting #15 / 2013/02/23
Kansai.pm#15 Perl Ocean
?@lapis25
?Kansai Perl Mongers

?http://id.mixi.jp/lapis25
?mixi.Inc
?Distribution Unit(フィード通知ユニット)
?Feed/Noti?cation/Push Noti?cation
?API Programmer
Kansai.pm#15 Perl Ocean
Agenda


?XMPP?
?Perl Ocean
Kansai.pm#15 Perl Ocean
XMPP?
EXtensible Messaging and Presence Protocol
拡張可能なメッセージとプレゼンスのプロトコル
って,なに?


? いわゆるメッセンジャのためのプロトコル
アプリケーション
? iChat/iMessage
? Google Talk
? Facebook Chat
? MSN Live
? PSN
特徴
? オープン標準(RFC6120, RFC6121)

? 永続的コネクション

? XMLベース

? 中央サーバを持たない

? 拡張性が?高い
オープン標準

? プロトコルはJabberの頃から公開されていた

? 現在はRFCとして公表されている

 ? RFC6120 および	
 ?RFC6121
? Jabberからだと10年年以上,RFCからでも8年年
永続的コネクション


? ログインからログアウトまでの間
  ひとつのTCPコネクションを維持

? コネクション上で
  メッセージなどのやりとりを双?方向に?行行う
XMLベース

? 単?一の??長いXMLとして符号化される

? XMLがゆえに冗??長

? バイナリデータを送る場合は
  Base64エンコードしてから
 送る必要があるので?非効率率率
中央サーバを持たない


? ネットワークの構造は電子メールに似ていて
 独自のサーバを立てられる

? サーバ間をつなぐ仕様(S2S)が存在する

? ローカルのみのネットワークも可能
拡張性

? Core以外の機能は,RFCではなく
  XEP (XMPP Extension Protocol)と呼ばれる

? グループチャットやボイス?ビデオチャット
  などの規格もここに含まれる

? http://xmpp.org/xmpp-protocols/xmpp-
  extensions/
Kansai.pm#15 Perl Ocean
Perl Ocean
Lyo Kato?氏によって開発された
 XMPPプロトコルを中?心とする
リアルタイムコミュニケーション
    フレームワークスイート
特徴
Webサービスとの
インテグレーションを
前提とした設計
   現在あるWebサービスに,リアルタイムコミュニケーションを
            インテグレーションできることを?目的とする
デファクトスタンダードな拡張を
ひと通り標準サポートした
フルスタックフレームワーク
           拡張機能のうちデファクトスタンダードなものや
 Webサービスとのインテグレーションにおいて必要と思われるものは
                         最初から組み込む
?大規模なWebサービスとの
インテグレーションに耐える
クラスタサポート
    同時接続数の問題の解決,?非同期処理理におけるプロセスや
   サーバーライフサイクルサービスコード更更新頻度度を考慮した
                   クラスタリングをサポート
WebSocketなどを利利?用した
HTTP Bindingの独?自サポート
      HTTP	
 ?Binding(WebSocket/SSE/XHR)を独?自にサポート
    クラスタサポートと組み合わせて,XMPPと併?用することも可能
機能

? ?一対?一のメッセンジャ

? プレゼンスサービス

? グループチャット

? イベントのプッシュ通知

? オーディオチャット?ビデオチャット
翱肠别补苍のクラスタサポート
スケーリングの课题
サーバパフォーマンスからくる
同時接続数の限界
          1サーバあたりの同時接続数の限界
        リソースの枯渇,パフォーマンスの低下
プロセス/スレッドのブロック
             イベントドリブンなシステムの上で
    データベースの読み出しなど重い同期処理理が発?生すると
          プロセスやスレッドをブロックしてしまう
サーバライフサイクルと
サービスコード更更新頻度度の
ミスマッチ
    永続的コネクションしているクライアントがある状況では
                  頻繁的な再起動は避けたい
叁层构成のアーキテクチャ


     デリバリサービス


    メッセージブローカ


   フロントエンドノード群
フロントエンドノード群

                 Ocean
 Frontend   Frontend   Frontend     Frontend
  (XMPP)     (XMPP)     (XMPP)    (WebSocket)
メッセージブローカ

                      Ocean
  Delivery Server                      Delivery Server




                    Broker(gearmand)




    Frontend                             Frontend
デリバリサービス
                        WebService


   Connection Map
                         Ocean
UserA   Home        1
                             Delivery Server            Delivery Server
UserA   Work        2
UserB   Home        1

                                               Broker

                         inbox(gearmand)                   inbox(gearmand)

                               Frontend                   Frontend
WebService

                  Ocean
      Delivery            Delivery
       Server              Server




            Broker(gearmand)



inbox(gearmand)           inbox(gearmand)

     Frontend             Frontend
Kansai.pm#15 Perl Ocean
翱肠别补苍の开発状况
組み込まない物


? ユーザ情報管理理

? フレンド管理理

? 购読管理理
実装済み機能

? 認証(PLAIN, OAuth2)

? 基本的なメッセンジャ機能

? グループチャット

? HTTP Bindingのサポート
実装中機能



? イベントのプッシュ通知	
 ?(試験中)

? オーディオチャット?ビデオチャット
そのほかやってること



? パフォーマンス向上

? クラスタリングサポート機能追加
Oceanで使っている技術


?Perl5.8+
?Gearman
?AnyEvent
Licence



? Artistic Licence
? 笔别谤濒と同じ
翱肠别补苍をためす
骋颈迟贬耻产上で开発

   https://github.com/perl-ocean/ocean-core
ドキュメントも拡充中

   http://perl-ocean.github.io/ocean-core
プロジェクトテンプレートの?生成

       インテグレーションのための
       プロジェクトテンプレートを
         スクリプトで?生成できる
スタンドアロンモード

  ウェブサービスとのつなぎ込みが必要ない
        スタンドアロンモードも実装
Oceanをインストールして
すぐに試せます

   http://perl-ocean.github.io/ocean-core/
                            installation.html
Demo
mixiにてトライアル中




? iChatでの友人との1対1のメッセージのやりと
  りのみ

? http://mixi.jp/promotion.pl?id=realtime
Question?

More Related Content

Kansai.pm#15 Perl Ocean