HTML5とか勉強会の番外編〜ブラウザとサーバの間を考えよう〜に行ってきました
司会: わかささんより、濃い話はツイート×サイン(特製うちわ)が出るとのこと
今回、会場の節電の都合で空調が止まっている中、
配布されたノベルティーのgooうちわを使ってみんな暑さをしのぎました。
会場担当のみなさんありがとうございました。
以下、[]内は私の感想です。
(19:15)
WebSockets html5j.org 小松さん
- どうやったらWebページが速くなるかを日々追求
- wakochiのデモ http://wakachi.komasshu.info
- サーバーに「分かち書き」で入っているテキストをどんどん取ってくるデモ
- WebSockets pipelineを使っている
- 今日のトピック
- Intro to WebSocket and SPDY
- Dive into WebSocket Protocol
Intro to WebSockets
- Webの使い方が変わってきた
- 最初はHTMLひとつ → イメージ、CSS → ユーザー/ユーザー間コンテンツ
- Single resource → multiple resources → multi + bidrectional
- 使われているプロトコルはHTTPで同じ: リクエスト/レスポンスのプロトコル
- どんな問題が?
- 複数リソースの場合、往復をくり返すので遅い
- リアルタイム性にはポーリングが必要
- 現在どんな方法が使われているか?
- 最新テクノロジー: SPDY, WebSocket
- プロトコルスタック
- 比較表: slideshare参照
- ゴールは
- SPDY: レイテンシを縮少
- WebSockets: 双方向アプリケーションを作る
- ゴールは
Dive Into WebSocket Protocol
- デモ1: multi device interaction
- デモ2: 双方向通信の比較
- echocompare.html: マウス座標をエコーするだけのデモ
- WebSocketsでも遅延はあるがなめらかに流れる
- JSでの書き方の例: slideshare参照
- プロトコル定義 RFC6455
- handshake: in context of HTTP/1.1
- data transfer: frame format
- schema: ws(80), wss(443)
- 多くのブラウザでサポートされてきている
- ハンドシェイク
- request
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket ← websocketを使いますよ Connection: Upgrade ← upgradeしたいです Origin: http://example.com Sec-WebSocket-...
-
- response
HTTP/1.1 101 Switching Protocols ← upgradeしますよ Upgrade: websocket ← websocketですよ Connection: Upgrade Sec-WebSocket-...
- データフレーミング
- reachability
- プレーンなデータを送ると、intermediaryが中身の解釈ができないとき打ち切ってしまうことが
- subprotocol
- WS上で動くプロトコルを決めよう → IANA登録
- extension
- multiplexing
- per-frame compression
- socket.io
- fallbackしてくれるJSライブラリ
- スケーラビリティーは?
- ロードバランサ(node-proxy, nginx)でWSを解釈してアプリサーバーに振り分ける
- [感想: WebSocketsはintermediaryがどれくらい対応してくれるのかに期待でしょうか。いったんつながってしまえばTCPみたいなものですが、逆に言うとそこでどんな情報を交換するのか、プロトコルをまた考えないといけないですね]
(19:53)
SPDY IIJ 大津さん
- @jovi0608, https://github.com/shigeki
- slideshare: http://ow.ly/c1NzK
- SPDYのベンチマークができるサイトを公開したい
- 作ってみたら安定しない。過激なことをやろうとすると止まってしまう
- 会場でSPDYのサイトを立ち上げた人 → 2人くらい
- 安いSSL証明書があれば。オレオレでもOK
- Node.js, Jettyなどの実装もある
- 最近SPDYが話題です
- SPDYの歴史
- SPDYの状況
- 最近のトピック: Chrome Secure Proxy
- HTML読込の高速化
- SPDYの特徴 (Google I/O 2012の資料より)
- SPDYに向かないこと (Google I/O 2012の資料より)
- SPDYフレームの詳細
- ハンドシェイク
- SYN_STREAM
- ヘッダ圧縮の仕組はkey-valueペアをzlib圧縮してるだけなので、HTTPに特化しているわけではない
- サーバープッシュ
- SYN_REPLYを送る前に先読みデータを一方向streamをサーバー側からどんどん送っちゃう
- レスポンスが届いたときにはもうデータがキャッシュにある
- Navigation Timing APIでSPDY動作を調べるサイトを作った
- window.performance
- 測ってみた → pushはそんなに稼げない
- 実際にデモ
- [感想: SPDYはNPN拡張でハンドシェークするのが難しいところです。ロードバランサがSPDYネイティブにしゃべれない場合はport forwardingでがんばるのでしょうか]
(20:30)
SSBP Skeed 柳澤さん
- SkeedSilverBulletProtocol
- 誰得?
- ブラウザから使えるわけじゃない
- TCPでいいじゃん
- ↓次のような用途に
- WAN越しにファイルを送ると異様に遅い。特に外国に送ると遅い
- 話の流れ
- この現象の存在自体の認識
- 正確な理解
- TCPの仕様・実装に課題
- さあ直そう
- TCPに仕様・実装はどうなっているか
- 何が問題なのか
- ウインドウサイズの問題
- 広帯域&遠距離で通信する場合の適正なwindow sizeはすごく大きい
- 100Mbps、RTT 150msだと1.875Mバイト
- OS間通信ではバッファの大きさなどが原因で適正値の範囲がそう変えられない
- 広帯域&遠距離で通信する場合の適正なwindow sizeはすごく大きい
- フロー制御の問題
- パケットロス率はある程度から下げられない
- 輻輳ではないのにパケットロスが発生するとレートを下げてしまう
- → だから代替・改善が必要だ
- ウインドウサイズの問題
- SSBPの想定
- 帯域副は広いもの
- 距離は遠いもの
- パケットロスは当然ある
- OSカーネル内で動作するのは必ずしも必要でない
- SSBPの実装
- TCP: 到達完全性の保証とフロー制御の実現とがACK機構を介して密接に結びついている
- ACKが2つの役割を持っている
- SSBP: この2つを完全に分離、それぞれに最適な手法を取る
- 届かなかったパケットを選択的にまとめて報告
- TCP: 輻輳とパケットロスとを同一視
- SSBP: パケットロスは不可避だからそれ以外の方法で
- 輻輳によるパケットロスの前には機器遅延の増大が発生するはず。つまり「狙うべき遅延」があるはず
- 例えば…: 電話かけてから出るまでに時間がかかるようになると不良品が出はじめる
- 電話をかけたら45秒で出れるくらいの忙しさをキープする!
- 輻輳によるパケットロスの前には機器遅延の増大が発生するはず。つまり「狙うべき遅延」があるはず
- ユーザー空間で動作するアプリとすることでバッファを大きく取れる
- その結果… 16時間を30分に
- TCP: 到達完全性の保証とフロー制御の実現とがACK機構を介して密接に結びついている
- とにかく実用性重視
- プロプライエタリなプロトコルを作ることについて
- まとめ
- [感想: すごく面白くて、どんどんのめり込んで聞いてしまうプレゼンでした! 用途を限って最適化するというのはわかりやすい話でした]
(21:00)
第二部: 座談会
- NTTコミュ様ご提供のケータリングとビール、ソフトドリンクなどを楽しみつつ
- ところどころツイート禁止の濃い話をたくさん聞けました
- 総論としてはこんな感じでしょうか
- WebレイヤからWSやSPDYが出てくるのだがと、結局低レイヤの話になってくる
- intermediaryのことを考えないとサービスとしては成立しない
- 両レイヤの技術者の間でのコミュニケーション、乗り入れが重要になってくる
- @komasshuさんの「俺はweb屋だ、俺はネットワーク屋だ、と閉じていては辛いっちゅうことですよ」という言葉が印象に残りました
非常に楽しく、また勉強になる時間でした。ありがとうございました。