HTTP2.0勉強会第二回も超おもしろかった話 #http2study

イベントURLはこれ。会場は前回と同じくIIJ
僕が参加したのは、前回がとても楽しかったのと、HPAC実装に先立って何かヒントが欲しかったから。

1: HPACについて(藤沢さん)

(TODO: スライドが公開され次第追加)スライド上げてもらいました。ありがとうございます。
藤沢さんはHeader compressionやHPACの仕様策定に関与している。HPACドラフトの著者でもある。
HTTP2ヘッダ圧縮の歴史を最初に聴いた。
もともとEXI(バイナリXML: テキスト形式のXMLをバイナリ化して扱う)の技術を手本にしてヘッダもそうできないか、というところからヘッダ圧縮へのチャレンジは始まったらしい。
藤沢さんもEXIの人だったようで、今回はEXIの原理も軽く聴いたけどとても分かりやすかった。

  • バイナリ化すると小さくなって早くなる
  • EXI技術を知るまでもなく一蹴する人が多かった
  • 基本的な仕組みはトークン化・符号化:二回目以降はインデックスでやりとり
  • EXIは処理が最速になるようにインデックスの貼り方を学習していく
  • データ型適合コーデック

で、HTTP2ではこれをヘッダ圧縮に応用。
SPDYに比べてEXI圧縮すると25%以上のサイズ削減を達成したけど、コーデック処理の分トータルでは遅くなったらしい。
そのままEXI圧縮するのがイマイチなので、話は差分のやりとり(Header Diff)という方向に進む。
インデックス化処理だ。リクエストとレスポンスそれぞれに名前テーブルを用意する。

  • 新規項目 : リテラル表現 →テーブルに追加
  • 既出項目 : インデックス表現 →テーブル不変
  • 異なる値 : デルタ表現 →テーブルを更新

エンコード・デコード双方が同じ方法(アルゴリズム)を採用するため、全ヘッダをやりとりしなくても大丈夫で、情報量を削減できるという仕組み。
上記仕様が3月に提案された後、議論を経て現在のHPACになっている。
HPACではリファレンスセットが追加されている。
質疑応答で「ロールバックのないトランザクション」って表現が聞こえたけどほんとうにそうだと思った。
難しい。

ちなみに、藤沢さんの結言は「HPAC難しくないです」だった。

2: nghttp2 The heir of spdylay(辻川さん @tatsuhiro_t
スライドはGoogleDocsにある

まず余暇でやってるってのがびっくりだった。
余暇でサーバ+クライアント+プロキシ...しかもHPAC対応...
nghttp2ってのは要はCのライブラリ。HPPT2を話せる。
ngとはNext Generation。最初はタキオンが良かったらしいけどdebianにあるソフトウェアと名前が被ったので変えたらしい。
OSSのプロジェクト名重要!

ドラフト04が第一イテレーション、ドラフト06が第二イテレーションとなった。
04を実装してInteropの接続試験を行い、現在は06の先を実装中。
具体的な開発の流れを知れたので、とても有意義だった。
あとHPAC実装の落とし穴とかも聞けたけど、まだ僕は実装していないのでよく分からないところも多かった。
多分辻川さんのスライドを今後何回も見返すと思う。
それと辻川さんが投げたMLがとても良いので、このロジックを参考にして実装しようと思う。

3: httpbis interim@シアトル レポート(大津さん @jovi0608)
メインのスライド↓
http://www.slideshare.net/shigeki_ohtsu/http2-interop-report2
辻川さんのHPACロジックを図示した補足資料↓
http://www.slideshare.net/shigeki_ohtsu/hpack-03encodestrategy
大津さんは先日のinterimに参加してきたので、そのレポートとHTTP2界隈の動向について。
今回のInterimはMS主導だったらしい。会場とかリソースとか。
HTTP2のテストフレームワークをしっかり作って使っていこうという話が上がったらしく、HTTP2も徐々に成熟し始めているのかもしれない。
今回のInterimではエリクソンの実装が出てきたらしいけど、コレ本体はErlangらしい!読まねば!→公開されてないようだ。
エリクソン実装はテスト部分で、パッチ当てたnghttp2を使っていたようだ。
HPACのテストとかもやったらしいけど、具体的にはリクエストヘッダを追加しまくってレスポンスが期待したものかどうかでテストしていたとのお話。
あとintrim最終日は大きめの議論としてNPN vs ALPNがあったようだ。
やはりALPNは開発者サイドから強い反対があり、次回のバンクーバーが最終決戦(Last Call)。
全体として、仕様の収束に向けた動きが始まったという印象を受けた。

感想
超楽しかった。
楽しかっただけではなく、HPAC実装やHTTP2コミュニティを知るなど、様々な面で良い話を聴くことができた。
今回の構成は、前回以上に良いものだったと思う。

  • 藤沢さん : HPACの歴史と分かりやすい解説
  • 辻川さん : 開発者としてのHPACの考え方と開発全体の流れ
  • 大津さん : コミュニティ全体の動向

これは非常に凄い。
HTTP2の基礎知識があること前提の内容だけど、僕はそれで良いと思う。本当に知りたい人は勝手に調べるし。
ただ、ちょっと調べてさぁどうしようっていう僕みたいな人にとっては最高の内容だった。
あとJxckさんによるInteger Representationの解説が公開された。
年末や年明けにハッカソンやるそうなので、興味ある人はそろそろ実装とかしましょう僕と一緒に。

主催の@Jxck_さん、本当にありがとうございます。

        • -

あとこの日(10/17)は僕の23歳の誕生日です。祝え!!