Keeping COMET alive サイボウズ・ラボ株式会社 奥 一穂.

Slides:



Advertisements
Similar presentations
セッション管理 ソフトウェア特論 第 8 回. ここでの内容 セッション管理の基本を知る。 HttpSession の使い方を知る。
Advertisements

TCP/IP によるチャットプログラ ム 薄井 秀晃. 基礎知識編 TCP/IP とは? IP とは・・・ Internet Protocol の略称であり通信方法の技術的なルールで あり、実際にデータを送受信する前にデータを小さなデータ に分割し、それに発信元と受信先の IP アドレスを付加させて.
オリジンのはなし. NetAgent Shibuya.XSS Feb What is "Origin" ?  オリジン  Same-Origin Policy  クロスオリジンなんとか…  RFC6454 "The Web.
1 安全性の高いセッション管理方 式 の Servlet への導入 東京工業大学 理学部 千葉研究室所属 99-2270-6 松沼 正浩.
© 2005 株式会社はてな 本資料の一部または全部の無断複製・転載を禁じます prototype.js と Perl で Ajax 株式会社はてな 伊藤 直也
1 なんとなく Ajax ~新しくて古い XMLHttp 川合孝典 (Kansai.pm) 2005/5/22.
ご提案書 『ホテル インターネットサービスソリューション』
IIS 4.0で開発をするコツ Webアプリケーション構築.
情報基礎A 情報科学研究科 徳山 豪.
Webプロキシサーバにおける 動的資源管理方式の提案と実装
The Perl Conference Japan ’98 朝日奈アンテナによる コンテンツ情報の取得と利用
最新ファイルの提供を保証する代理FTPサーバの開発
第1回.
第3回参考文献発表 PHP言語 岩永逸平.
技術トピックス 2014/10.
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
ネットワーク技術II 第8.2課 イーサネット・スイッチング
Hot Pepper for iPod touch
インターネット構成法 最終課題 ~ネットワークデザイン~.
ちょっと気になること メディアコミュニケーション論Ⅲ 第14回.
ネットワーク構成法 スケール 第6回 11月19日.
JavaServlet&JSP入門 01K0018 中村太一.
Webアプリケーション.
セッション管理 J2EE I 第9回 /
HTTPプロトコルとJSP (1) データベース論 第3回.
HTTPプロトコル J2EE I 第7回 /
SCTPにおける アドレス選択ポリシーを定義できる IPアドレス自動更新機能の設計
(B2) 親: minami, kazuki 多様な認証機器に対応する 認証システム (B2) 親: minami, kazuki.
.NET テクノロジー を利用した SAP ソリューションの拡張 (3階層化) (評価環境構築ガイド)
Javaによる Webアプリケーション入門 第9回
第2章 第1節 情報通信の仕組み 1 ネットワークの仕組み 2 通信プロトコル 3 認証と情報の保護
モバイルP2Pを用いた携帯電話 動画配信手法の提案 第3回
望月 祐洋,由良 淳一,楠本 晶彦 {moma, yurayura,
第8章 Web技術とセキュリティ   岡本 好未.
インターネット概論第3回 kudo担当分.
第11章 UDPユーザ・データグラム・プロトコル
特定ユーザーのみが利用可能な仮想プライベート・ネットワーク
分散IDSの実行環境の分離 による安全性の向上
IaaS型クラウドにおける インスタンス構成の動的最適化手法
ソケットプログラム(TCP,UDP) EasyChat開発2
ユーザ毎にカスタマイズ可能な Webアプリケーションの 効率の良い実装方法
インターネットにおける真に プライベートなネットワークの構築
Cisco Umbrella のご紹介 2018 年 1 月.
UDPマルチキャストチャット    空川幸司.
Web - 01 IIS を インストールしよう.
Exchange Server 2010 Outlook 階層型アドレス帳 活用術 展開 ~ トラブルシュートまで
第16章 BOOTP:ブートストラップ・プロトコル
Webプロキシ HTTP1.0 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
端末およびサービス透過的な 情報閲覧支援システムの構築
第5回 個人の動画配信補足のためのWeb構築
TCP/IPとプロセス間通信 2007年1月12日 海谷 治彦.
IP over DVB-RCSの設計と実装
複数のオーバレイネットワークを制御するためのプライベートなネットワーク環境
VPNとホストの実行環境を統合するパーソナルネットワーク
オブジェクトストレージ(SDS)と ネットワークの仮想化技術(SDN)の 活用方法について
ENUM を応用した 三者間の通信法 著者 1G00P066-9 杉田 隆俊 担当者 1G01P111-1 横澤 一岐
仮想環境を用いた 侵入検知システムの安全な構成法
勝手にインフラ隊 (の中の人といっしょ) に学ぶネットワーク講座 Part2
勝手にインフラ隊 (の中の人といっしょ) に学ぶネットワーク講座 Part2
GbEにおける TCP/IP の研究について
CO-Client Opeartion 1.1 利用履歴データベースの設計 (スキーマ バージョン 対応)
ネットワークプロトコル.
第2回 Webサーバ.
異種セグメント端末による 分散型仮想LAN構築機構の設計と実装
特定ユーザーのみが利用可能な仮想プライベート・ネットワーク
アプリケーションゲートウェイ実験 2001.10.5 鬼塚 優.
Webプロキシ HTTP1.1 ヒント CS-B3 ネットワークプログラミング  &情報科学科実験I.
TCP/IPの通信手順 (tcpdump)
ネットワークシステム ネットワークシステム概要.
HTTPプロトコルの詳細 M1 峯 肇史.
Presentation transcript:

Keeping COMET alive サイボウズ・ラボ株式会社 奥 一穂

a.k.a. Ajax Polling 代表例 やる気のない説明でごめんなさい Comet とは? long-lived stream over HTTP 代表例 Lingr やる気のない説明でごめんなさい 2007年2月23日 Keeping COMET Alive

でも、今日は地上の星について話しましょう Comet とは? (2) Comet は、まだまだ未成熟な技術です 道を誤ると危険!! シューメーカー・レヴィ第9彗星 1994年7月、分裂して木星に衝突 でも、今日は地上の星について話しましょう 2007年2月23日 Keeping COMET Alive

Comet vs. Specifications Comet のプログラミングモデル まとめ & おまけ 目次 Comet vs. Specifications Comet のプログラミングモデル まとめ & おまけ 2007年2月23日 Keeping COMET Alive

Comet vs. Specifications 2007年2月23日 Keeping COMET Alive

Comet vs. Specifications HTTP Keepalive HTTP/1.1 Pipelining 同時接続数の制限 XHR の Same Origin Policy 2007年2月23日 Keeping COMET Alive

HTTP/1.0 で de-facto な仕様が出現 HTTP/1.1 で正式な仕様になった Comet では、当然使いたい What is Keepalive? 複数リクエストで TCP 接続を使いまわし 接続切断のオーバーヘッドがなくなる HTTP/1.0 で de-facto な仕様が出現 参考: RFC2068 HTTP/1.1 で正式な仕様になった Comet では、当然使いたい 2007年2月23日 Keeping COMET Alive

Firefox は Pipelining を実装している orz HTTP/1.1 Pipelining HTTP/1.1 の requirement Keepalive をサポートする限りにおいて 複数の HTTP リクエストを続けて送信 レイテンシの隠蔽が可能 Comet とは相性が悪い レスポンス送信待ちの接続に次のリクエストが来る Firefox は Pipelining を実装している orz デフォルト Off だけど、On にしている人も IE は未実装? 2007年2月23日 Keeping COMET Alive

How to Use Keepalive BUT NOT Pipelining やや裏技ですが… 2つの方法 HTTP/1.0 Keepalive を使う Pipeline 実装が壊れているサーバを名乗る IIS/4, IIS/5, Netscape Enterprise/3 参考: Firefox のソース 2007年2月23日 Keeping COMET Alive

複数の Comet セッションがほしいケースも 回避策は? 同時接続数の制限 HTTP の同時接続数: 2~4 A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. -- 8.1.4 Practical Considerations, RFC 2616 複数の Comet セッションがほしいケースも 例: 複数のチャットルームに入る 回避策は? JSONP – セキュリティリスク or パフォーマンス劣化 やはり XHR を使いたい 2007年2月23日 Keeping COMET Alive

RFC2616 再訪 Server の定義とは? 結論: ホスト名を増やすことで回避可能 同時接続数の制限 (2) A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. -- 8.1.4 Practical Considerations, RFC 2616 Server の定義とは? IP アドレスではなく location.hostname 主要ブラウザ全部がそう (だったと思う…) VirtualHost や Load Balancing を考えると妥当な設計? 結論: ホスト名を増やすことで回避可能 2007年2月23日 Keeping COMET Alive

XHR の Same Origin Policy XmlHttpRequest は、location.hostport のサーバとしか交信できない ホスト名を増やした場合の回避策? 2007年2月23日 Keeping COMET Alive

XHR の Same Origin Policy (2) 回避策: Iframe + XHR Iframe の場合は、document.domain を変更することで、異なるサブドメインのフレーム間交信が可能 例: サービスの URL は chatservice.yy iframe に xxx.chatservice.yy をロード iframe 内から xxx.chatservice.yy に XHR xxx を大量に生成 → 同時接続数制限を回避 2007年2月23日 Keeping COMET Alive

Comet のプログラミングモデル 2007年2月23日 Keeping COMET Alive

C10K Problem 3+1種類のプログラミングモデル これからの課題 Comet のプログラミングモデル Suspend & Resume モデル Queue モデル Suspend & Push モデル 独自サーバモデル これからの課題 2007年2月23日 Keeping COMET Alive

C10K Problem Comet では、C10K の意味が変わる 従来のプログラミングモデルは使えない C10K Problem サーバで TCP 接続 10,000 本をどう扱うか? 大規模サービスの人たちは経験済 Comet では、C10K の意味が変わる これまで場合: リクエスト待ち x 10K Comet の場合: 処理中のリクエスト x 10K 従来のプログラミングモデルは使えない 例: Perl インタプリタを1万個も起動したくない メモリが 100GB くらい必要? 2007年2月23日 Keeping COMET Alive

Jetty が実装 (Jetty Continuations) 手順 Suspend & Resume モデル Jetty が実装 (Jetty Continuations) 手順 1. アプリケーションロジックでサスペンド宣言 2. サーバが Notify or タイムアウトまで待機 3. アプリケーションロジックを再実行 評価 + 従来のプログラミングモデルに近い - 負荷が高く、チャット等マルチキャストには向かない 2007年2月23日 Keeping COMET Alive

lighttpd の開発者が提案 (mod_mailbox) ウェブサーバ上に Queue を作る ブラウザが Comet で Queue から読込 Queue は自動的に expire 評価 + 負荷が低く、マルチキャストに向く - アクセス制限等の柔軟性に疑問符 - スケールアウトできない 2007年2月23日 Keeping COMET Alive

cometd (reverse proxy) が実装 手順 Suspend & Push モデル cometd (reverse proxy) が実装 手順 1. ウェブサーバが特殊なヘッダ (w.ID) を返す 2. rproxy がレスポンス送信待ち状態に入る 3. アプリケーションロジックが rproxy を経由して (ID で指定した接続に) レスポンスをプッシュ 評価 + 負荷が低く、マルチキャストに向く + スケールアウト可能 2007年2月23日 Keeping COMET Alive

スケールアップを狙うならコレ Perl 等でも、そこそこの速度が出ます 独自サーバモデル 無駄なオーバーヘッドが無い 特定用途向け httpd の実装は難しくない Perl 等でも、そこそこの速度が出ます C やネットワークの知識はあったほうがいい パフォーマンスチューニングのため 初心者へのオススメ: PoCo::Server::HTTP パフォーマンスがほしい人: Sys::Syscall qw(:epoll) 2007年2月23日 Keeping COMET Alive

DB 変更をトリガーにして Push したいよね? これからの課題 現実的な例: スケジュールの変更通知 変更を共有メンバー (変更者を除く) に通知したい スケジュールの追加・変更・削除… アプリケーションロジックの何ヶ所で対応が必要? DB 変更をトリガーにして Push したいよね? Push のロジックはスクリプト言語で書きたいはず DB サーバーを拡張? O/R マッパーで対応可能? 2007年2月23日 Keeping COMET Alive

まとめ & おまけ 2007年2月23日 Keeping COMET Alive

オススメの Comet サービス構成 プログラミングモデルは発展途上 パフォーマンスを狙うなら独自サーバ まとめ Comet 接続は別 hostname iframe + XHR プログラミングモデルは発展途上 パフォーマンスを狙うなら独自サーバ 2007年2月23日 Keeping COMET Alive

いかに楽に Comet するかが問題なんです おまけ Comet に「新しい技術的問題」は無い 問題があったとしても、TCP/IP の歴史に答えはある TCP で可能なことは over HTTP でも可能 see SoftEther いかに楽に Comet するかが問題なんです 2007年2月23日 Keeping COMET Alive