Upgrade to Pro — share decks privately, control downloads, hide ads and more …

SSLセッションキャッシュを共有したいだけの人生だった

 SSLセッションキャッシュを共有したいだけの人生だった

@nojima (Cybozu, Inc)
nginx tech talks
2016-02-08
http://eventdots.jp/event/578421

4bbaed9ee2677ae2ab37e71b4f3cf3f1?s=128

Yusuke Nojima

February 08, 2016
Tweet

More Decks by Yusuke Nojima

Other Decks in Technology

Transcript

  1. SSLセッションキャッシュを 共有したいだけの人生だった @nojima Cybozu, Inc. nginx Tech Talks 2016-02-09 nginx

    Tech Talks 1
  2. SSL のハンドシェイクに 265ms もかかっている とあるサイトに SSL で接続してみる 2016-02-09 nginx Tech

    Talks 2
  3. 265ms → 138ms (だいたい半分) になった!! もう一度接続してみる 2016-02-09 nginx Tech Talks

    3
  4. Why? • SSL セッションキャッシュのおかげ • SSL ハンドシェイクで共有したパラメータ (共有鍵とか) をキャッシュ しておく。

    • 次回同じセッションIDで接続してきたクライアントに対しては パラメータの共有を省いて、いきなり TLS セッションを開始する。 • 効果 • ラウンドトリップが1往復分減る → レイテンシ減 • サーバ側の計算が減る → スループット増 ※ ブラウザによっては SSL セッションチケットという別の仕組みでセッション再開できるが、 IE や iOS Safari は対応していない。 2016-02-09 nginx Tech Talks 4
  5. ところが nginx の標準機能では、 複数のサーバ間でセッションキャッシュを 共有できない!!! 2016-02-09 nginx Tech Talks 5

  6. Client Layer 4 Load Balancer nginx-1 nginx-2 nginx-3 ① 最初のコネクションが

    nginx-1 に割り振られる ② nginx-1 にセッションがキャッシュされる ③ 二回目のコネクションが nginx-3 に割り振られる ④ キャッシュがないので セッション再開できない!!! DC 2016-02-09 nginx Tech Talks 6
  7. というわけで nginx の SSL セッションキャッシュを 共有できるようにするパッチを書いた。 2016-02-09 nginx Tech Talks

    7
  8. nginx-ssl-scache-sync-module • nginx が SSL セッションキャッシュを保存する処理にフック して、別のサーバの nginx に対してセッションキャッシュを 送り付ける仕組み。

    • サイボウズの本番環境で使うために作った。 • 以下の URL で公開中 • https://gist.github.com/nojima/daac8c5710a2766bd638 • 1.9.10 より新しい nginx には当たらないので注意。多分そのうち直し ます。 2016-02-09 nginx Tech Talks 8
  9. nginx-1 nginx-2 nginx-3 session cache ① SSL接続 が来る ② セッション

    キャッシュ が生成される cache ③ 非同期に セッション キャッシュを 送りつける cache cache Client ④ 再び SSL 接続が来る ⑤ セッションが再開できる! session cache DC 2016-02-09 nginx Tech Talks 9
  10. nginx-ssl-scache-sync-module • よかった点 • パフォーマンス向上 • 前述のとおり、キャッシュによってサーバのスループットが上がる。 • レイテンシも減るが、日本だとあまり実感できない。 •

    Just Works!! • サイボウズの本番環境で1年間運用。トラブルなし。 • よくない点 • スケールしない • nginx サーバ台数に比例してセッションを共有する通信の負荷が上がってしまう。 2016-02-09 nginx Tech Talks 10
  11. ところで H2O は? • H2O はセッションキャッシュの共有を標準でサポートしている。 • しかも memcached を使う方式なのでサーバ台数が増えても

    大丈夫。 • 自分たちが memcached を使わなかったのは、OpenSSL の制約の都合 上実装できないと思っていたから。 • しかし、H2O は驚きのスーパーハックで解決していた: https://github.com/h2o/h2o/issues/118 2016-02-09 nginx Tech Talks 11
  12. 今日言いたかったこと 誰か H2O 方式のセッションキャッシュ 共有モジュールを書いてくれ!!!! (or ngx_ssl_session_fetch_by_lua に期待) 2016-02-09 nginx

    Tech Talks 12
  13. WE ARE HIRING サイボウズはインフラエンジニアを 募集しております 2016-02-09 nginx Tech Talks 13