以下斜め読んだ内容

pseudo translation of useful posts, book reviews, remarks,etc. twitter: feeddict

Voxer「spdy始めました。ios/osx用ライブラリiSPDY出しました」

Voxer Engineeringブログ 2014.1.3のエントリ

iSPDY Released | Voxer Engineering

  • トランシーバーに通話・動画・メッセージングが合体したようなアプリをweb/ネイティブ向けに出してるvoxerの近況
  • ceoが米軍特殊部隊上がりとか、ctoがハワイ(しかもカウアイ島)在住とか、nodeコアメンバーがいたりとメンツが面白い会社
  • エントリの本題はosx/ios向けにspdyクライントライブラリ出した件
    • なんだが、ライブラリ出すまでの経緯とか
    • twitterがCocoaSPDY出した件にも触れてて
      • もっと早くだしてくれたら使ってたね、とか
  • コンパクトだが勉強になって楽しい

以下斜め読んだ内容

  • @voxer
  • レイテンシをゼロに近づたいです
  • レイテンシ下がるとユーザはもっとアクティブに。メッセージ送信量up
    • これはログから分かる
  • バックエンドの最適化
    • これはずっとやってきた
    • テクノロジースタック全て
    • 今はnode,redis,riak,smartosつかってる
  • 次はネットワークレベル
    • まずはstud投入
  • そしてspdy
  • voxerアプリは、常にhttpsで話さないといけない
    • httpsという縛りはパフォーマンス面でボトルネック
    • モバイル環境でのレイテンシは、予測不可能
    • レイテンシが小さくなったり大きくなったり、振り幅デカイ
  • あと、パケットの先頭詰まり(head of line blocking)も厄介
  • kee-aliveなコネクション?、pipelining?
    • ちょっと前のvoxerはこの2つを使い、httpsのコネクションプール作って頑張ってた
    • 要は、tlsでのプロトコルネゴシエーション、およびコネクションプールのメンテ
    • これは複雑でしかも遅いんですよ
    • うまい事やってくるライブラリはiosの世界ではなかったし
  • spdy使うメリット?
  • アプリ開発という観点でも実はメリットある
  • spdy使ってみてわかった
    • アプリの挙動把握、デバッグ、メンテ
    • 前よりずっと簡単になった
    • アプリ開発がよりシンプルになった
  • ポイントは、tcpソケット1つで全てのリクエストを捌くという部分
    • エラーハンドリングのロジック、キューイング、再送、バックグラウンドモード
    • 全てが前よりもシンプルになった
  • iSPDY
  • twitterが出したCocoaSPDY
    • twitter/CocoaSPDY
    • 取り組んでる問題はiSPDYと似てる
    • もっと早く出してたら使ってた
    • でもCocoaSPDYで用足りるというよりこれをベースに足りないもの足すと言う感じだが
  • voxierアプリはspdyのserver pushをヘビーに使ってる
    • アプリのリアルタイム更新してる部分
    • 前はwebsocketかhttp pipeliningで頑張ってた部分
    • websocketもpipeliningもトレードオフがあり
      • クライアント、サーバー、ネットワーク、全てのレベルで
  • spdy(とserver push)はリアルタイム更新にとってかなり理想的なソリューション
    • tcpコネクション1つでクライアントにどんどん送れる
  • iSPDYのデザインゴール
    • memory footprintを小さく
    • server pushサポート
    • 発信データのスケジューリング
    • trailing headers
    • pingサポート
    • Content-Encodingヘッダ使ったtransparent decompression
    • ios
      • バックグラウンドでのソケット再要求
      • VoIPモードサポート
    • オプション機能
  • spdy投入はトントン拍子にいった
    • node使ってるし node-spdyがある
  • iSPDY作ったのは、node-spdy作った人(=Fedor Indutny
  • stud使って、tls termination
    • node側には暗号化されてないspdyストリームが流れる
    • ここでnode-spdy使う
    • (補足)
      • iSPDYはNPNをサポートしない。
      • readme曰く、最新のOpenSSLをクライアントに同梱必須がネック、と
      • アプリのバイナリサイズ肥大化、アプリ開発の複雑化
  • 古いバージョンのvoxerアプリ、android版など別platform
    • これまで通りhttpsで話す
    • node-spdyがフォールバックしてくれる
  • サーバー側のコードベースは、ほとんどいじらずに済んだ