SlideShare una empresa de Scribd logo
1 de 85
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ウェブを速くするために
DeNAがやっていること
HTTP/2と、さらにその先
DeNA Co., Ltd.
Kazuho Oku
1
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
DeNAは○○の会社
2ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
DeNAはウェブの会社
3ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
DeNAはウェブの会社
 ウェブ技術を使ったサービス群
⁃ Mobage
⁃ DeNAショッピング・モバオク
⁃ DeNA Palette
⁃ …
 スマホアプリも HTTP や WebView を使用
4ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
DeNAはウェブの会社
(まあ、だいたい)
5ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ウェブ基盤技術の研究開発
6ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ウェブ基盤技術の研究開発
 2種類のアプローチ
⁃ スループットの最適化
⁃ レスポンスタイムの高速化
 メリットは何?
7ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
スループットの最適化=コスト削減
 HandlerSocket
⁃ DeNA の樋口が開発
⁃ MySQL Conference Community Awards 2011 受賞
 HandlerSocket とは?
⁃ MySQL サーバむけ KVS プロトコル実装
⁃ 単純なクエリに SQL を使わないことにより、大量の
接続を高速に処理
⁃ 効果:
• スレーブ台数とネットワーク負荷を削減
• サーバが数千台規模だと、削減コスト>>開発費
8ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
レスポンスタイム削減=売上増大
9ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
出典: http://radar.oreilly.com/2009/06/bing-and-google-agree-slow-pag.html
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
本日のテーマ
 HTTP/2 の基本
 HTTP/2 の最適化
⁃ レスポンスタイム最適化
⁃ スループット最適化
 H2O と他ソフトウェアの実装の話を織り交ぜつつ
10ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O
 DeNA で開発している HTTP/2 サーバ
⁃ 中の人: Kazuho Oku (me)
 タイムライン:
⁃ 2014年7月: 開発開始
⁃ 2014年12月: 初回リリース (0.9.0)
⁃ 2014年2月: 1.0リリース
• HTTP/2策定作業の完了と同時
⁃ 現在: 1.7.0beta-4
 スループットとレスポンスタイムの双方で、おそらく世
界最速の HTTP/2 実装
11ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 誕生の背景
12ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
転送データ量は増大中
13ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
出典: http://httparchive.org/trends.php?s=All&minlabel=Aug+1+2011&maxlabel=Aug+1+2015#bytesTotal&reqTotal
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
バンド幅も増大中
 エンドユーザのバンド幅は年率50%で増加(ニールセン
の法則)
14ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
出典: http://www.nngroup.com/articles/law-of-bandwidth/
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
未来はバラ色?
15ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ページロード時間はバンド幅に比例しない
16ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
出典: More Bandwidth Doesn't Matter - 2011 Mike Belshe (Google)
※実効バンド幅は1.6Mbps程度で頭打ちに
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ページロードはレイテンシが小さいほど速い
17ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
出典: More Bandwidth Doesn't Matter - 2011 Mike Belshe (Google)
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Why?
18ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/1.1は多重性がない
19ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
RTT
request
response
request
response
client server
…
RTT
 HTTP/1.1では、1RTTあたり1リクエスト/レスポンスし
か送受信できない
⁃ RTT=ラウンドトリップタイム
• レイテンシの大きさを表す値
 緩和策:複数のTCP接続を使う
⁃ 同時6本が一般的
• 1RTTあたり6リクエスト!!!
• それでも遅い
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/1.1パイプラインの問題
20ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
RTT
requests
responses
client server
 仕様上、レスポンス受信前に次のリクエストを送信可能
 問題:
⁃ 切断時に、レスポンス未受信のリクエストを再送信し
ていいかわからない
• サーバが同じリクエストを複数回処理する可能性
⁃ 先行リクエストの処理に時間がかかると後続が詰まる
(head-of-line blocking)
⁃ バグのあるサーバ実装が多い
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
レイテンシは今後も小さくならない
 光の速度はかわらない
⁃ アメリカまで光ファイバーで往復すれば80ミリ秒
 携帯回線はレイテンシが大きい
⁃ LTE ~ 50ms
21ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
やばい!ウェブが遅くなってきた!
22ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
どうしよう?
23ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
解決策:レイテンシに負けないプロトコルを作る
24ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2!
25ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2
 RFC 7540 (2015/5)
⁃ Google の QUIC プロトコルの実験を参考に規格化
 基本的な技術要素
⁃ バイナリプロトコル
⁃ 多重化
⁃ ヘッダ圧縮
26ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
バイナリプロトコルな理由
 脆弱性を防ぐ
⁃ HTTP Request/Response Splitting Attack
• HTTP/1.1のパーサによる解釈の差をつく攻撃
 転送データ量の低減
⁃ 細かな粒度でレスポンスの順序を変更したい
• 転送単位が小さいなら、その単位毎につけるヘッダは小さ
くないといけない → バイナリにするしかない
⁃ ヘッダ圧縮
• 圧縮するんだから、どのみちバイナリ
 全てのデータは、「フレーム」に分解して送受信
27ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
典型的な通信フロー
(クライアントが送信)
GET / HTTP/1.1
Host: example.com
User-Agent: MySuperClient/1.0
(サーバが送信)
HTTP/1.1 200 OK
Date: Thu, 20 Aug 2015 06:48:36 GMT
Server: Apache/2.2.29 (Unix)
Last-Modified: Wed, 12 Mar 2014 05:03:17…
ETag: "50b5e5-33a-4f461c1300f40"
Content-Length: 826
Content-Type: text/html
<html>
…
28ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
HEADERSフレーム(クライアント送信):
:method: GET
:scheme: https
:authority: example.com
:path: /
user-agent: MySuperClient/1.0
HEADERSフレーム(サーバ送信):
:status: 200
date: Thu, 20 Aug 2015 06:48:36 GMT
server: Apache/2.2.29 (Unix)
last-Modified: Wed, 12 Mar 2014 05:03:…
etag: "50b5e5-33a-4f461c1300f40"
content-length: 826
content-type: text/html
DATAフレーム(サーバ送信):
<html>…
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
多重化
 同時に100以上のリクエストを発行可能
 任意のタイミングでリクエスト送信可能
 レスポンスの順序に制限なし
 レスポンスを織り交ぜ可能
⁃ DATAのstream IDを見よ
29ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
client server
…
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (1)
 HTTP/1.1のヘッダは大きい
⁃ リクエスト:
• 最低でも300バイト程度
• Google Analytics使うとCookieで+200バイトなど
⁃ レスポンスも通常300バイト程度
 100個レスポンスを受け取るなら、それだけで30KB
⁃ レイテンシがなくなるなら、ヘッダサイズも小さくし
たい
• 大量に 304 Not Modified を返すこととかありますよね
30ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (2)
 HPACK (RFC 7541) として規定
 技術要素
⁃ 初見の文字列は、静的ハフマン圧縮
⁃ 2回目以降は、前回出現時からのオフセットで表現
⁃ 頻出文字列は、固定テーブルのインデックスで表現
31ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (3)
 想定例:
⁃ https://example.com/ にアクセス
⁃ 参照されている /banner.jpg と /icon.png をロード
32ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (4)
 / へのリクエスト
33ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
(圧縮前: 291バイト)
:method: GET
:scheme: https
:authority: example.com
:path: /
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/…
accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language: ja,en-US;q=0.7,en;q=0.3
accept-Encoding: gzip, deflate
(圧縮後: 147バイト)
02 # :method: GET
07 # :scheme: https
41 88 2f 91 d3 5d 05 5c 87 a7 # :authority: example.com
04 # :path: /
7a bc d0 7f 66 a2 81 b0 da e0 53 ...(46 bytes) # user-agent: ...
53 b0 49 7c a5 89 d3 4d 1f 43 ae ...(50 bytes) # accept: ...
51 93 e8 3f a2 d4 b7 0d df 7d a0 ...(21 bytes) # accept-language: ...
10 # accept-encoding: ...
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (5)
 /banner.jpg へのリクエスト
34ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
(圧縮前: 300バイト)
:method: GET
:scheme: https
:authority: example.com
:path: /banner.jp
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/…
accept: image/png,image/*;q=0.8,*/*;q=0.5
accept-language: ja,en-US;q=0.7,en;q=0.3
accept-encoding: gzip, deflate
referer: https://example.com/
(圧縮後: 62バイト)
02 # :method: GET
07 # :scheme: https
c1 # :authority: example.com
44 89 62 31 d5 51 6c 5f a5 73 7f # :path: /banner.jpg
c1 # user-agent: …
53 9a 35 23 98 ac 57 54 df 46 a4 ...(28 bytes) # accept: ...
c0 # accept-language: ...
10 # accept-encoding: ...
73 8f 9d 29 ad 17 18 60 be 47 4d ...(17 bytes) # referer: ...
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (6)
 /icon.png へのリクエスト
35ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
(圧縮前: 298バイト)
:method: GET
:scheme: https
:authority: example.com
:path: /icon.png
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/…
accept: image/png,image/*;q=0.8,*/*;q=0.5
accept-language: ja,en-US;q=0.7,en;q=0.3
accept-encoding: gzip, deflate
referer: https://example.com/
(圧縮後: 17バイト)
02 # :method: GET
07 # :scheme: https
c4 # :authority: example.com
44 87 60 c4 3d 4b d7 54 df # :path: /icon.png
c4 # user-agent: …
c0 # accept: ...
c2 # accept-language: ...
10 # accept-encoding: ...
bf # referer: ...
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ヘッダ圧縮 (7)
 最初のリクエストでもそこそこ圧縮される
 画像等アセットへのリクエストが繰り返すとすごい縮む
⁃ レスポンスも同様
36ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
リクエストパス ヘッダサイズ(圧縮前,バイト) ヘッダサイズ(圧縮後,バイト) 圧縮率
/ 291 147 50.5%
/banner.jpg 300 62 20.7%
/icon.png 298 17 5.7%
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ここまでのまとめ
 HTTP/2の基本
⁃ 多重化によりレイテンシの影響を低減
⁃ ヘッダ圧縮により通信量を低減
 上記2点を体感できるデモ
⁃ https://www.symfony.fi/entry/compare-
resource-loading-between-http-2-and-http-1-1
37ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 におけるレスポンスタイム最適化
38ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2のレスポンスタイムベンチマーク
 コンテンツ系ウェブサイトが表示されるまでの時間測定
 初期描画(first-paint)までの時間に大差、H2O が最短
39ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
差が出た理由: 優先度制御
40ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 の規定する優先度制御
 クライアントがリクエスト毎に優先度を指定する
⁃ 2種類の制御手法の組み合わせ
• 重みづけ (weight)
⁃ 値に比例したバンド幅の配分
• 依存関係 (dependency)
⁃ 依存されているレスポンスを先に送信
⁃ グループ化にも利用
 サーバは指定された優先度を「参考にする」
41ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御実装
42ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
43ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
Unblocked
weight: 101
 1. 初期状態(接続直後)
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
44ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
HTML
weight: 32
Unblocked
weight: 101
 2. HTML受信開始
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
45ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
HTML
weight: 32
CSS
weight: 32
JS (HEAD)
weight: 32
Unblocked
weight: 101
 3. <HEAD>にあったCSSとJavaScriptをリクエスト
⁃ CSS/JSを圧倒的に優先
• Follower vs. CSS/JS の weight は 1:32:32:32…
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
46ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
HTML
weight: 32
Unblocked
weight: 101
 4. CSSとJavaScriptの受信完了
⁃ HTMLの<BODY>部も届き始める
⁃ first paint (ウェブページをレンダリングできるぞ!)
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
47ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
HTML
weight: 32
Image
weight: 22
Image
weight: 22
Image
weight: 22
Unblocked
weight: 101
 5. <BODY>にあった<IMG>の画像をリクエスト
⁃ 画像はHTMLよりちょっと低めのweight
• ブラウザ画面では画像がじわじわ表示
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
48ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
HTML
weight: 32
Image
weight: 22
Image
weight: 22
Image
weight: 22
Unblocked
weight: 101
JS (BODY)
weight: 32
 6. <BODY>末尾のJavaScriptは別の優先度で
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
49ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
Image
weight: 22
Image
weight: 22
Image
weight: 22
Unblocked
weight: 101
JS (BODY)
weight: 32
 7. HTMLの配信完了
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
50ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
Image
weight: 22
Image
weight: 22
Unblocked
weight: 101
 8. JavaScriptの配信も完了
⁃ DOMContentLoaded
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
51ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
Unblocked
weight: 101
 9. 全てのダウンロードが完了
⁃ onload event
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
Firefox の優先度制御
52ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
Leader
weight: 201
Follower
weight: 1
HTML
weight: 32
Image
weight: 22
Image
weight: 22
Image
weight: 22
CSS
weight: 32
JS (HEAD)
weight: 32
Unblocked
weight: 101
JS (BODY)
weight: 32
 まとめ:
⁃ 優先度(図の縦方向)と重みづけを併用
⁃ リソースの「利用形態」にあわせて優先度を設定
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O の優先度制御実装
53ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O の優先度制御実装
 H2O は
⁃ Webブラウザの指示に従い、バンド幅を配分
• 割当は HTTP/2 の規定どおり
⁃ 優先度制御の粒度が細かい
• 16KB単位でストリームを切り替え
• 約64KB単位でバッファリング
 全ての HTTP/2 サーバが優先度制御を(正しく)実装し
ているわけではない
54ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O の優先度制御実装
 優れた優先度制御の要件: weighted fair queuing
⁃ 次に送信すべきストリームを、queue の中から
• 重み (weight) に基づいて
• 公平 (fair) に選択
 H2O の wfq は、リングバッファを使用した O(1) 実装
⁃ ツリーの深さに対しては高速な O(n)
• タイトなループなので高速
⁃ 高速な実装 → 細粒度で送信ストリームを切替可能
 他の HTTP/2 実装も wfq を採用へ
⁃ nghttp2, Apache (mod_h2), hyper, ...
55ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
他のWebブラウザの優先度制御実装
56ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
優先度制御 (Chromeの場合)
57ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 重みづけのみを使用(依存関係は未使用)
 HTTP/2でfirst-paintは劣化
0 0.5 1 1.5 2 2.5 3
Nginx (HTTP/1.1)
Nginx (SPDY/3.1)
H2O (HTTP/2)
Chrome/43
Download Timing (unit: seconds, latency: 100ms)
first paint load complete
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
優先度制御 (Chromeの場合)
58ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 1. HTMLを受信開始
Root
HTML
weight: 256
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
優先度制御 (Chromeの場合)
59ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 2. <HEAD>をパース、CSSとJSをリクエスト
Root
HTML
weight: 256
CSS
weight: 220
JS
weight: 183
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
優先度制御 (Chromeの場合)
60ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 3. <BODY>が徐々に到着、画像もリクエスト
⁃ この時点でのバンド幅の配分は?
• HTML:CSS:JS:Image*3 = 256:220:183:330
• CSSやJSよりも画像のほうがバンド幅を食ってる
⁃ これではfirst-paint が早くならない
Root
HTML
weight: 256
CSS
weight: 220
JS
weight: 183
Image
weight: 110
Image
weight: 110
Image
weight: 110
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
優先度制御 (他のウェブブラウザの場合)
61ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
 Edge – 優先度制御なし
 Safari – 優先度制御なし
 サーバ側でなんとかしないと…
Root
HTML
weight: 16
CSS
weight: 16
JS
weight: 16
Image
weight: 16
Image
weight: 16
Image
weight: 16
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O による優先度の書き換え
 クライアントが依存関係ツリーを構築しない場合に
 レンダリングをブロックしそうな content-type のレス
ポンスを最優先で配信
62ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Root
HTML
weight: 16
CSS
weight: max
JS
weight: max
Image
weight: 16
Image
weight: 16
Image
weight: 16
(internal root)
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O の reprioritize-blocking-assets オプション
 first paint が大幅に改善
63ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
0 0.5 1 1.5 2 2.5 3
Nginx (HTTP/1.1)
Nginx (SPDY/3.1)
H2O (HTTP/2)
H2O+repriori ze (HTTP/2)
Chrome/43
Download Timing (unit: seconds, latency: 100ms)
first paint load complete
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
優先度制御まとめ
 ユーザの体感速度を大幅に向上させる技術
⁃ first-paint time が改善するため
 クライアント側:
⁃ Firefox – すばらしい
⁃ 他のWebブラウザ – 要改善
 サーバ側:
⁃ 実装状況がまちまち
⁃ H2O は Firefox 以外のブラウザむけの最適化も実装
64ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュ
65ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュ
 HTTP/2はRTTを隠蔽する技術
 でも、1RTT(リクエストを投げてからレスポンスを受け
取るまで)は絶対かかるよね?
 それ、0RTTでできるよ!
⁃ サーバが、クライアントの発行するリクエストを予測
して、レスポンスをプッシュすればいい
※これ以外の目的でも使える技術ですが、今回はウェブブラ
ウザのレスポンスタイムに絞った議論をします
66ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュ
 例: RTT=50ms, アプリサーバの処理時間=200ms
67ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
req.
processrequest
push-asset
HTML
push-asset
push-asset
push-asset
req.
processrequest
asset
HTML
asset
asset
asset
req.
450ms(5RTT+processingme)
250ms(1RTT+processingme)
without push with push
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュ
 CDNによるウェブ高速化にも応用可能
⁃ アプリサーバの応答を待つ間も回線を有効活用可能
⁃ アプリ提供者は、その分、アプリサーバの設置拠点を
減らすことが可能に
68ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
req.
push-asset
HTML
push-asset
push-asset
push-asset
client edge server (CDN) app. server
req.
HTML
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュ
 実用にむけた課題:
⁃ (クライアントに頼らない)優先度制御
⁃ プッシュの起動方法
⁃ ブラウザキャッシュとの兼ね合い
69ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュと優先度制御
 RFC どおり実装してあっても、あまり役に立たない
⁃ プッシュされるレスポンスは、プッシュを
起動したレスポンスに依存する形でスケ
ジュールされるから
 H2O は、プッシュの mime-type を見て優先度を決定
⁃ reprioritize-blocking-assets と同様
70ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
HTML
weight: ??
CSS (pushed)
weight: 16
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュの使い方 (1)
 Link: rel=preload ヘッダ
⁃ アプリサーバが返す Link ヘッダを認識してプッシュ
HTTP/1.1 200 OK
Content-Type: text/html
Link: </style.css>; rel=preload # このヘッダ!!!
⁃ H2O, nghttpx (nghttp2), mod_h2 (Apache) が対応
⁃ 問題: アプリサーバが応答を返すまでプッシュ不可能
71ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュの使い方 (2)
 H2O では、アプリサーバへリクエストを転送する前にプ
ッシュを開始可能
# 1. mrubyハンドラでプッシュを開始 (Linkヘッダをセット)
mruby.handler: |
Proc.new do |env|
[399, { "Link" => "</style.css>; rel=preload" }, []]
end
# 2. リバースプロキシハンドラがアプリサーバにリクエストを転送
proxy.reverse.url: http://app.example.com:8080/
72ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュ vs. ブラウザキャッシュ
 キャッシュ済のファイルはプッシュしたくない
⁃ バンド幅(と場合によっては時間)のムダ
 キャッシュの有無を判断する方法は?
⁃ ブラウザキャッシュ内の状況を確認するためにリクエ
スト/レスポンスを送信してはいけない
• そのために1RTTかかるとプッシュのメリットがなくなる
73ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
cache-aware server-push
 H2O 1.5 以降で実装 (experimental)
 ブラウザキャッシュ内の CSS, JS を fingerprinting
⁃ Golomb coded sets (bloom filterの圧縮版) を使用
 fingerprint を全てのリクエストに cookie として添付
⁃ cookie サイズは100バイト程度
• さらに HPACK による圧縮が効く
⁃ ServiceWorker を使った実装も開発中 (jxck氏)
 H2O は fingerprint を基に、ウェブアプリの要求するプ
ッシュを実際に行うか判定
⁃ プッシュした場合は fingerprint を更新
74ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
cache-aware server-push
 cookieを使うアプローチの問題:
⁃ Webブラウザキャッシュに何が入ってるか、ブラウザ
以外には正確には分からない
⁃ cookieは消される可能性/細かな更新が困難
 理想的には、Webブラウザが fingerprint を送信すべき
↓
 2014/10: 関係者と議論 @ http2/quic meetup
 2015/01: インターネットドラフト(RFC化の提案)を提出
(共著者: Mark Nottingham)
mod_h2 (Apache) がドラフトを実装
75ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
cache-aware server-push
 fingerprint を含むリクエストの例
:method: GET
:scheme: https
:authority: example.com
:path: /
cache-digest: IdrjaOrSB4wfpbxdx5Q/
⁃ この cache-digest ヘッダは、以下12の URL がキャ
ッシュ済であることを示している
https://example.com/assets/css/bootstrap.min.css,
https://example.com/assets/css/font-awesome.css,
https://example.com/assets/css/header.css,
https://example.com/assets/css/magnific-popup.css,
https://example.com/assets/css/main.css,
https://example.com/assets/css/pinstrap.css,
https://example.com/assets/css/pinterest.css,
https://example.com/js/bootstrap.min.js, https://example.com/js/jquery-1.11.0.js,
https://example.com/js/jquery-ui.min.js, https://example.com/js/jquery.magnific-
popup.js, https://example.com/js/pinterest.js 76ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
サーバプッシュまとめ
 ポテンシャルはあるが使いにくい(と思われてきた)
⁃ H2O がそれらの問題を解決
⁃ 今後の期待:
• 仕様の標準化
• ウェブブラウザや、他のサーバでの実装
77ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
レスポンスタイム最適化まとめ
 HTTP/2 はユーザの待ち時間を最適化
⁃ ユーザ体験向上と売上増加につながると考えられる
 HTTP/2 の基本要素
⁃ 多重化によるレイテンシの隠蔽
⁃ バイナリ化による通信データ量の削減
 どれだけ高速になるかはサーバの実装依存
⁃ 優先度制御
⁃ サーバプッシュ
78ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP サーバのスループット最適化
79ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
ベンチマーク:静的ファイルの配信
 ベンチマーク環境: AWS c3.8xlarge (2台)
⁃ クライアントとサーバは、同一network placement
 ファイルサイズ: 612バイト (デスクリプタキャッシュ:on)
80ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
HTTP/2 は高スループットなプロトコル
 HTTP/2 over TLS は、暗号化のない HTTP/1 と同等か
より高速
⁃ TLS の負荷は HTTPS に移行しない理由にならない
81ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
なぜ H2O は速いのか
 ステートマシンを極力廃した設計
 SIMD 命令でチューニングされた HTTP/1 パーサ
 HTTP/2 と TLS を前提にした設計
⁃ ヘッダを文字列ではなく、ポインタ演算で比較
⁃ 大量のレスポンスをマージして、できるだけ少ないシ
ステムコールで送信
82ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
H2O - その他の特徴
 (m)rubyによるスクリプティング:
⁃ mod_rewriteよりも保守しやすい
⁃ Rack 標準に則っている → ベンダロックインが発生
しない
 先進のTLSサポート:
⁃ セッションキャッシュのサーバ間共有
⁃ セッションチケットのマスター鍵の自動更新
⁃ レコードサイズの最適化
⁃ 自動化されたOCSPステープリング
83ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
まとめ
84ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved.
まとめ
 HTTP/2 が約束する未来はバラ色
⁃ より短いレスポンスタイム
⁃ より高いスループット
 H2O が、HTTP/2 サーバ実装の競争をリード
⁃ 優先度制御/サーバプッシュ/スループット
 DeNA は、H2O の成果を社会に還元
⁃ OSS として世界と共有
• H2O は DeNA 単独ではなく OSS コミュニティの成果
⁃ IETF 等での標準化
85ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先

Más contenido relacionado

La actualidad más candente

大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開Rakuten Group, Inc.
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
 
大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexd大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexdItsuki Kuroda
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーToru Makabe
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Shin Ohno
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜LINE Corporation
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...whywaita
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)NTT DATA Technology & Innovation
 
楽天における大規模データベースの運用
楽天における大規模データベースの運用楽天における大規模データベースの運用
楽天における大規模データベースの運用Rakuten Group, Inc.
 
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAオーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAOre Product
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)NTT DATA Technology & Innovation
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 

La actualidad más candente (20)

大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開大規模なリアルタイム監視の導入と展開
大規模なリアルタイム監視の導入と展開
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexd大企業アジャイルの勘所 #devlovex #devlovexd
大企業アジャイルの勘所 #devlovex #devlovexd
 
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャーKubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
Kubernetesのしくみ やさしく学ぶ 内部構造とアーキテクチャー
 
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
Mercari JPのモノリスサービスをKubernetesに移行した話 PHP Conference 2022 9/24
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
eBPFを用いたトレーシングについて
eBPFを用いたトレーシングについてeBPFを用いたトレーシングについて
eBPFを用いたトレーシングについて
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
GitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみたGitLabのAutoDevOpsを試してみた
GitLabのAutoDevOpsを試してみた
 
PayPayでのk8s活用事例
PayPayでのk8s活用事例PayPayでのk8s活用事例
PayPayでのk8s活用事例
 
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
ソフトウェアでのパケット処理あれこれ〜何故我々はロードバランサを自作するに至ったのか〜
 
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
なぜディスクレスハイパーバイザに至ったのか / Why did we select to the diskless hypervisor? #builde...
 
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
Knative Eventing 入門(Kubernetes Novice Tokyo #11 発表資料)
 
楽天における大規模データベースの運用
楽天における大規模データベースの運用楽天における大規模データベースの運用
楽天における大規模データベースの運用
 
オーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiAオーバーエンジニアリングって何? #devsumi #devsumiA
オーバーエンジニアリングって何? #devsumi #devsumiA
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
コンテナとimmutableとわたし。あとセキュリティ。(Kubernetes Novice Tokyo #15 発表資料)
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 

Destacado

DeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live StreamingDeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live StreamingTakeyuki Ogura
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来Kazuho Oku
 
HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向Kazuho Oku
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondKazuho Oku
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)Toshiharu Sugiyama
 
これからの Microservices
これからの Microservicesこれからの Microservices
これからの MicroservicesToru Yamaguchi
 
Developing the fastest HTTP/2 server
Developing the fastest HTTP/2 serverDeveloping the fastest HTTP/2 server
Developing the fastest HTTP/2 serverKazuho Oku
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてMakoto Haruyama
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestMasaki Nakagawa
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -Tomoya Kabe
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)dena_study
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発Satoshi Takano
 
B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方Tomohiro MITSUMUNE
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in RailsHypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in RailsToru Kawamura
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜Kentaro Matsumae
 
SmartNews Ads System - AWS Summit Tokyo 2015
SmartNews Ads System - AWS Summit Tokyo 2015SmartNews Ads System - AWS Summit Tokyo 2015
SmartNews Ads System - AWS Summit Tokyo 2015SmartNews, Inc.
 
実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017 実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017 Preferred Networks
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP betterKazuho Oku
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)denatech2016
 
自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理Kuwabara Kunihito
 

Destacado (20)

DeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live StreamingDeNA TechCon2016 360VR Live Streaming
DeNA TechCon2016 360VR Live Streaming
 
HTTP/2の課題と将来
HTTP/2の課題と将来HTTP/2の課題と将来
HTTP/2の課題と将来
 
HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向HTTPとサーバ技術の最新動向
HTTPとサーバ技術の最新動向
 
Reorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and BeyondReorganizing Website Architecture for HTTP/2 and Beyond
Reorganizing Website Architecture for HTTP/2 and Beyond
 
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
DeNAtechcon_DeNAのセキュリティの取り組みと、スマートフォンセキュリティ(same-origin policy)
 
これからの Microservices
これからの Microservicesこれからの Microservices
これからの Microservices
 
Developing the fastest HTTP/2 server
Developing the fastest HTTP/2 serverDeveloping the fastest HTTP/2 server
Developing the fastest HTTP/2 server
 
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム SakashoについてDeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
DeNAオリジナル ゲーム専用プラットフォーム Sakashoについて
 
DeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in TestDeNAが取り組む Software Engineer in Test
DeNAが取り組む Software Engineer in Test
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
 
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
DeNA の新しいネイティブ開発(パズル戦隊デナレンジャー)
 
チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発チラシルiOSでの広告枠開発
チラシルiOSでの広告枠開発
 
B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方B2B2Cなヘルスケアサービスの作り方
B2B2Cなヘルスケアサービスの作り方
 
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in RailsHypermedia: The Missing Element to Building Adaptable Web APIs in Rails
Hypermedia: The Missing Element to Building Adaptable Web APIs in Rails
 
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
iOSレガシーコード改善ガイド〜マンガボックス開発における事例〜
 
SmartNews Ads System - AWS Summit Tokyo 2015
SmartNews Ads System - AWS Summit Tokyo 2015SmartNews Ads System - AWS Summit Tokyo 2015
SmartNews Ads System - AWS Summit Tokyo 2015
 
実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017 実世界の人工知能@DeNA TechCon 2017
実世界の人工知能@DeNA TechCon 2017
 
H2O - making HTTP better
H2O - making HTTP betterH2O - making HTTP better
H2O - making HTTP better
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
 
自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理自動運転に向けた取り組みと安全管理
自動運転に向けた取り組みと安全管理
 

Similar a ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先

HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計Kazuho Oku
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)J-Stream Inc.
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーHideo Kimura
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphonedena_study
 
勉強会資料 Distribution
勉強会資料 Distribution勉強会資料 Distribution
勉強会資料 Distributionmiki koganei
 
AWSとmod_pagespeedで 楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで 楽々サクサク高速化!!aasakawa
 
Lolipop server
Lolipop serverLolipop server
Lolipop serverJun Chiba
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすShunsuke Maeda
 
Web体験を向上させる無料CDN 「rapid start」× stripe決済
Web体験を向上させる無料CDN 「rapid start」× stripe決済Web体験を向上させる無料CDN 「rapid start」× stripe決済
Web体験を向上させる無料CDN 「rapid start」× stripe決済Katsuhisa Ogawa
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②Yahoo!デベロッパーネットワーク
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage PlatformMasaki Nakagawa
 
NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野livedoor
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能TAKUYA OHTA
 
drecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battledrecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battleMitsuki Kenichi
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf虎の穴 開発室
 
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...Insight Technology, Inc.
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbNaotoshi Seo
 
2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka
2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka
2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osakatama200x Kobayashi
 

Similar a ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 (20)

HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計HTTP/2時代のウェブサイト設計
HTTP/2時代のウェブサイト設計
 
CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)CDNの仕組み(JANOG36)
CDNの仕組み(JANOG36)
 
Perl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバーPerl で作るメディアストリーミングサーバー
Perl で作るメディアストリーミングサーバー
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
Effective web performance tuning for smartphone
Effective web performance tuning for smartphoneEffective web performance tuning for smartphone
Effective web performance tuning for smartphone
 
勉強会資料 Distribution
勉強会資料 Distribution勉強会資料 Distribution
勉強会資料 Distribution
 
AWSとmod_pagespeedで 楽々サクサク高速化!!
AWSとmod_pagespeedで楽々サクサク高速化!!AWSとmod_pagespeedで楽々サクサク高速化!!
AWSとmod_pagespeedで 楽々サクサク高速化!!
 
Lolipop server
Lolipop serverLolipop server
Lolipop server
 
Dangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らすDangerでpull requestレビューの指摘事項を減らす
Dangerでpull requestレビューの指摘事項を減らす
 
Web体験を向上させる無料CDN 「rapid start」× stripe決済
Web体験を向上させる無料CDN 「rapid start」× stripe決済Web体験を向上させる無料CDN 「rapid start」× stripe決済
Web体験を向上させる無料CDN 「rapid start」× stripe決済
 
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②
Yahoo! JAPAN MeetUp #8 (インフラ技術カンファレンス)セッション②
 
2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform2014-04-22 Ques #4 Automation Testing of Mobage Platform
2014-04-22 Ques #4 Automation Testing of Mobage Platform
 
NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野NHNグループ合同勉強会 ライブドア片野
NHNグループ合同勉強会 ライブドア片野
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
IT エンジニアのための 流し読み Windows 10 - Windows のネットワーク最適化機能
 
drecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battledrecomにおけるwinning the metrics battle
drecomにおけるwinning the metrics battle
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdfDeno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
 
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
[db analytics showcase Sapporo 2017] B27:世界最速のAnalytic DBはHadoopの夢を見るか by 株式会...
 
InfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdbInfluxDB の概要 - sonots #tokyoinfluxdb
InfluxDB の概要 - sonots #tokyoinfluxdb
 
2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka
2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka
2012/5/19 Webのパフォーマンスを考える ~WordPressと付き合うために~ @ WB Osaka
 

Más de Kazuho Oku

HTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときHTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときKazuho Oku
 
QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7Kazuho Oku
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話Kazuho Oku
 
Recent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using rubyRecent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using rubyKazuho Oku
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsivenessKazuho Oku
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsivenessKazuho Oku
 
TLS & LURK @ IETF 95
TLS & LURK @ IETF 95TLS & LURK @ IETF 95
TLS & LURK @ IETF 95Kazuho Oku
 
Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5Kazuho Oku
 
H2O - making the Web faster
H2O - making the Web fasterH2O - making the Web faster
H2O - making the Web fasterKazuho Oku
 
H2O - the optimized HTTP server
H2O - the optimized HTTP serverH2O - the optimized HTTP server
H2O - the optimized HTTP serverKazuho Oku
 
JSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedJSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedKazuho Oku
 
JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法Kazuho Oku
 
JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013Kazuho Oku
 
Using the Power to Prove
Using the Power to ProveUsing the Power to Prove
Using the Power to ProveKazuho Oku
 
JSX - 公開から1年を迎えて
JSX - 公開から1年を迎えてJSX - 公開から1年を迎えて
JSX - 公開から1年を迎えてKazuho Oku
 
JSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebJSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebKazuho Oku
 
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜Kazuho Oku
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)Kazuho Oku
 

Más de Kazuho Oku (20)

HTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないときHTTP/2で 速くなるとき ならないとき
HTTP/2で 速くなるとき ならないとき
 
QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7QUIC標準化動向 〜2017/7
QUIC標準化動向 〜2017/7
 
TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話TLS 1.3 と 0-RTT のこわ〜い話
TLS 1.3 と 0-RTT のこわ〜い話
 
Recent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using rubyRecent Advances in HTTP, controlling them using ruby
Recent Advances in HTTP, controlling them using ruby
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsiveness
 
Programming TCP for responsiveness
Programming TCP for responsivenessProgramming TCP for responsiveness
Programming TCP for responsiveness
 
TLS & LURK @ IETF 95
TLS & LURK @ IETF 95TLS & LURK @ IETF 95
TLS & LURK @ IETF 95
 
Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5Cache aware-server-push in H2O version 1.5
Cache aware-server-push in H2O version 1.5
 
H2O - making the Web faster
H2O - making the Web fasterH2O - making the Web faster
H2O - making the Web faster
 
H2O - the optimized HTTP server
H2O - the optimized HTTP serverH2O - the optimized HTTP server
H2O - the optimized HTTP server
 
JSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons LearnedJSON SQL Injection and the Lessons Learned
JSON SQL Injection and the Lessons Learned
 
JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法JSX 速さの秘密 - 高速なJavaScriptを書く方法
JSX 速さの秘密 - 高速なJavaScriptを書く方法
 
JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013JSX の現在と未来 - Oct 26 2013
JSX の現在と未来 - Oct 26 2013
 
Using the Power to Prove
Using the Power to ProveUsing the Power to Prove
Using the Power to Prove
 
JSX - 公開から1年を迎えて
JSX - 公開から1年を迎えてJSX - 公開から1年を迎えて
JSX - 公開から1年を迎えて
 
JSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the WebJSX - developing a statically-typed programming language for the Web
JSX - developing a statically-typed programming language for the Web
 
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
ウェブブラウザの時代は終わるのか 〜スマホアプリとHTML5の未来〜
 
JSX
JSXJSX
JSX
 
JSX Optimizer
JSX OptimizerJSX Optimizer
JSX Optimizer
 
JSX Design Overview (日本語)
JSX Design Overview (日本語)JSX Design Overview (日本語)
JSX Design Overview (日本語)
 

ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先

  • 1. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ウェブを速くするために DeNAがやっていること HTTP/2と、さらにその先 DeNA Co., Ltd. Kazuho Oku 1
  • 2. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. DeNAは○○の会社 2ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 3. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. DeNAはウェブの会社 3ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 4. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. DeNAはウェブの会社  ウェブ技術を使ったサービス群 ⁃ Mobage ⁃ DeNAショッピング・モバオク ⁃ DeNA Palette ⁃ …  スマホアプリも HTTP や WebView を使用 4ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 5. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. DeNAはウェブの会社 (まあ、だいたい) 5ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 6. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ウェブ基盤技術の研究開発 6ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 7. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ウェブ基盤技術の研究開発  2種類のアプローチ ⁃ スループットの最適化 ⁃ レスポンスタイムの高速化  メリットは何? 7ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 8. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. スループットの最適化=コスト削減  HandlerSocket ⁃ DeNA の樋口が開発 ⁃ MySQL Conference Community Awards 2011 受賞  HandlerSocket とは? ⁃ MySQL サーバむけ KVS プロトコル実装 ⁃ 単純なクエリに SQL を使わないことにより、大量の 接続を高速に処理 ⁃ 効果: • スレーブ台数とネットワーク負荷を削減 • サーバが数千台規模だと、削減コスト>>開発費 8ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 9. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. レスポンスタイム削減=売上増大 9ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 出典: http://radar.oreilly.com/2009/06/bing-and-google-agree-slow-pag.html
  • 10. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 本日のテーマ  HTTP/2 の基本  HTTP/2 の最適化 ⁃ レスポンスタイム最適化 ⁃ スループット最適化  H2O と他ソフトウェアの実装の話を織り交ぜつつ 10ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 11. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O  DeNA で開発している HTTP/2 サーバ ⁃ 中の人: Kazuho Oku (me)  タイムライン: ⁃ 2014年7月: 開発開始 ⁃ 2014年12月: 初回リリース (0.9.0) ⁃ 2014年2月: 1.0リリース • HTTP/2策定作業の完了と同時 ⁃ 現在: 1.7.0beta-4  スループットとレスポンスタイムの双方で、おそらく世 界最速の HTTP/2 実装 11ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 12. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 誕生の背景 12ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 13. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 転送データ量は増大中 13ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 出典: http://httparchive.org/trends.php?s=All&minlabel=Aug+1+2011&maxlabel=Aug+1+2015#bytesTotal&reqTotal
  • 14. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. バンド幅も増大中  エンドユーザのバンド幅は年率50%で増加(ニールセン の法則) 14ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 出典: http://www.nngroup.com/articles/law-of-bandwidth/
  • 15. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 未来はバラ色? 15ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 16. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ページロード時間はバンド幅に比例しない 16ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 出典: More Bandwidth Doesn't Matter - 2011 Mike Belshe (Google) ※実効バンド幅は1.6Mbps程度で頭打ちに
  • 17. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ページロードはレイテンシが小さいほど速い 17ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 出典: More Bandwidth Doesn't Matter - 2011 Mike Belshe (Google)
  • 18. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Why? 18ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 19. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/1.1は多重性がない 19ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 RTT request response request response client server … RTT  HTTP/1.1では、1RTTあたり1リクエスト/レスポンスし か送受信できない ⁃ RTT=ラウンドトリップタイム • レイテンシの大きさを表す値  緩和策:複数のTCP接続を使う ⁃ 同時6本が一般的 • 1RTTあたり6リクエスト!!! • それでも遅い
  • 20. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/1.1パイプラインの問題 20ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 RTT requests responses client server  仕様上、レスポンス受信前に次のリクエストを送信可能  問題: ⁃ 切断時に、レスポンス未受信のリクエストを再送信し ていいかわからない • サーバが同じリクエストを複数回処理する可能性 ⁃ 先行リクエストの処理に時間がかかると後続が詰まる (head-of-line blocking) ⁃ バグのあるサーバ実装が多い
  • 21. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. レイテンシは今後も小さくならない  光の速度はかわらない ⁃ アメリカまで光ファイバーで往復すれば80ミリ秒  携帯回線はレイテンシが大きい ⁃ LTE ~ 50ms 21ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 22. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. やばい!ウェブが遅くなってきた! 22ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 23. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. どうしよう? 23ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 24. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 解決策:レイテンシに負けないプロトコルを作る 24ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 25. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2! 25ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 26. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2  RFC 7540 (2015/5) ⁃ Google の QUIC プロトコルの実験を参考に規格化  基本的な技術要素 ⁃ バイナリプロトコル ⁃ 多重化 ⁃ ヘッダ圧縮 26ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 27. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. バイナリプロトコルな理由  脆弱性を防ぐ ⁃ HTTP Request/Response Splitting Attack • HTTP/1.1のパーサによる解釈の差をつく攻撃  転送データ量の低減 ⁃ 細かな粒度でレスポンスの順序を変更したい • 転送単位が小さいなら、その単位毎につけるヘッダは小さ くないといけない → バイナリにするしかない ⁃ ヘッダ圧縮 • 圧縮するんだから、どのみちバイナリ  全てのデータは、「フレーム」に分解して送受信 27ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 28. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 典型的な通信フロー (クライアントが送信) GET / HTTP/1.1 Host: example.com User-Agent: MySuperClient/1.0 (サーバが送信) HTTP/1.1 200 OK Date: Thu, 20 Aug 2015 06:48:36 GMT Server: Apache/2.2.29 (Unix) Last-Modified: Wed, 12 Mar 2014 05:03:17… ETag: "50b5e5-33a-4f461c1300f40" Content-Length: 826 Content-Type: text/html <html> … 28ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 HEADERSフレーム(クライアント送信): :method: GET :scheme: https :authority: example.com :path: / user-agent: MySuperClient/1.0 HEADERSフレーム(サーバ送信): :status: 200 date: Thu, 20 Aug 2015 06:48:36 GMT server: Apache/2.2.29 (Unix) last-Modified: Wed, 12 Mar 2014 05:03:… etag: "50b5e5-33a-4f461c1300f40" content-length: 826 content-type: text/html DATAフレーム(サーバ送信): <html>…
  • 29. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 多重化  同時に100以上のリクエストを発行可能  任意のタイミングでリクエスト送信可能  レスポンスの順序に制限なし  レスポンスを織り交ぜ可能 ⁃ DATAのstream IDを見よ 29ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 client server …
  • 30. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (1)  HTTP/1.1のヘッダは大きい ⁃ リクエスト: • 最低でも300バイト程度 • Google Analytics使うとCookieで+200バイトなど ⁃ レスポンスも通常300バイト程度  100個レスポンスを受け取るなら、それだけで30KB ⁃ レイテンシがなくなるなら、ヘッダサイズも小さくし たい • 大量に 304 Not Modified を返すこととかありますよね 30ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 31. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (2)  HPACK (RFC 7541) として規定  技術要素 ⁃ 初見の文字列は、静的ハフマン圧縮 ⁃ 2回目以降は、前回出現時からのオフセットで表現 ⁃ 頻出文字列は、固定テーブルのインデックスで表現 31ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 32. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (3)  想定例: ⁃ https://example.com/ にアクセス ⁃ 参照されている /banner.jpg と /icon.png をロード 32ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 33. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (4)  / へのリクエスト 33ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 (圧縮前: 291バイト) :method: GET :scheme: https :authority: example.com :path: / user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/… accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 accept-language: ja,en-US;q=0.7,en;q=0.3 accept-Encoding: gzip, deflate (圧縮後: 147バイト) 02 # :method: GET 07 # :scheme: https 41 88 2f 91 d3 5d 05 5c 87 a7 # :authority: example.com 04 # :path: / 7a bc d0 7f 66 a2 81 b0 da e0 53 ...(46 bytes) # user-agent: ... 53 b0 49 7c a5 89 d3 4d 1f 43 ae ...(50 bytes) # accept: ... 51 93 e8 3f a2 d4 b7 0d df 7d a0 ...(21 bytes) # accept-language: ... 10 # accept-encoding: ...
  • 34. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (5)  /banner.jpg へのリクエスト 34ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 (圧縮前: 300バイト) :method: GET :scheme: https :authority: example.com :path: /banner.jp user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/… accept: image/png,image/*;q=0.8,*/*;q=0.5 accept-language: ja,en-US;q=0.7,en;q=0.3 accept-encoding: gzip, deflate referer: https://example.com/ (圧縮後: 62バイト) 02 # :method: GET 07 # :scheme: https c1 # :authority: example.com 44 89 62 31 d5 51 6c 5f a5 73 7f # :path: /banner.jpg c1 # user-agent: … 53 9a 35 23 98 ac 57 54 df 46 a4 ...(28 bytes) # accept: ... c0 # accept-language: ... 10 # accept-encoding: ... 73 8f 9d 29 ad 17 18 60 be 47 4d ...(17 bytes) # referer: ...
  • 35. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (6)  /icon.png へのリクエスト 35ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 (圧縮前: 298バイト) :method: GET :scheme: https :authority: example.com :path: /icon.png user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:40.0) Gecko/… accept: image/png,image/*;q=0.8,*/*;q=0.5 accept-language: ja,en-US;q=0.7,en;q=0.3 accept-encoding: gzip, deflate referer: https://example.com/ (圧縮後: 17バイト) 02 # :method: GET 07 # :scheme: https c4 # :authority: example.com 44 87 60 c4 3d 4b d7 54 df # :path: /icon.png c4 # user-agent: … c0 # accept: ... c2 # accept-language: ... 10 # accept-encoding: ... bf # referer: ...
  • 36. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ヘッダ圧縮 (7)  最初のリクエストでもそこそこ圧縮される  画像等アセットへのリクエストが繰り返すとすごい縮む ⁃ レスポンスも同様 36ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 リクエストパス ヘッダサイズ(圧縮前,バイト) ヘッダサイズ(圧縮後,バイト) 圧縮率 / 291 147 50.5% /banner.jpg 300 62 20.7% /icon.png 298 17 5.7%
  • 37. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ここまでのまとめ  HTTP/2の基本 ⁃ 多重化によりレイテンシの影響を低減 ⁃ ヘッダ圧縮により通信量を低減  上記2点を体感できるデモ ⁃ https://www.symfony.fi/entry/compare- resource-loading-between-http-2-and-http-1-1 37ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 38. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 におけるレスポンスタイム最適化 38ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 39. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2のレスポンスタイムベンチマーク  コンテンツ系ウェブサイトが表示されるまでの時間測定  初期描画(first-paint)までの時間に大差、H2O が最短 39ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 40. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 差が出た理由: 優先度制御 40ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 41. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 の規定する優先度制御  クライアントがリクエスト毎に優先度を指定する ⁃ 2種類の制御手法の組み合わせ • 重みづけ (weight) ⁃ 値に比例したバンド幅の配分 • 依存関係 (dependency) ⁃ 依存されているレスポンスを先に送信 ⁃ グループ化にも利用  サーバは指定された優先度を「参考にする」 41ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 42. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御実装 42ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 43. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 43ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 Unblocked weight: 101  1. 初期状態(接続直後)
  • 44. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 44ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 HTML weight: 32 Unblocked weight: 101  2. HTML受信開始
  • 45. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 45ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 HTML weight: 32 CSS weight: 32 JS (HEAD) weight: 32 Unblocked weight: 101  3. <HEAD>にあったCSSとJavaScriptをリクエスト ⁃ CSS/JSを圧倒的に優先 • Follower vs. CSS/JS の weight は 1:32:32:32…
  • 46. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 46ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 HTML weight: 32 Unblocked weight: 101  4. CSSとJavaScriptの受信完了 ⁃ HTMLの<BODY>部も届き始める ⁃ first paint (ウェブページをレンダリングできるぞ!)
  • 47. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 47ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 HTML weight: 32 Image weight: 22 Image weight: 22 Image weight: 22 Unblocked weight: 101  5. <BODY>にあった<IMG>の画像をリクエスト ⁃ 画像はHTMLよりちょっと低めのweight • ブラウザ画面では画像がじわじわ表示
  • 48. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 48ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 HTML weight: 32 Image weight: 22 Image weight: 22 Image weight: 22 Unblocked weight: 101 JS (BODY) weight: 32  6. <BODY>末尾のJavaScriptは別の優先度で
  • 49. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 49ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 Image weight: 22 Image weight: 22 Image weight: 22 Unblocked weight: 101 JS (BODY) weight: 32  7. HTMLの配信完了
  • 50. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 50ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 Image weight: 22 Image weight: 22 Unblocked weight: 101  8. JavaScriptの配信も完了 ⁃ DOMContentLoaded
  • 51. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 51ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 Unblocked weight: 101  9. 全てのダウンロードが完了 ⁃ onload event
  • 52. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. Firefox の優先度制御 52ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root Leader weight: 201 Follower weight: 1 HTML weight: 32 Image weight: 22 Image weight: 22 Image weight: 22 CSS weight: 32 JS (HEAD) weight: 32 Unblocked weight: 101 JS (BODY) weight: 32  まとめ: ⁃ 優先度(図の縦方向)と重みづけを併用 ⁃ リソースの「利用形態」にあわせて優先度を設定
  • 53. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O の優先度制御実装 53ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 54. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O の優先度制御実装  H2O は ⁃ Webブラウザの指示に従い、バンド幅を配分 • 割当は HTTP/2 の規定どおり ⁃ 優先度制御の粒度が細かい • 16KB単位でストリームを切り替え • 約64KB単位でバッファリング  全ての HTTP/2 サーバが優先度制御を(正しく)実装し ているわけではない 54ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 55. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O の優先度制御実装  優れた優先度制御の要件: weighted fair queuing ⁃ 次に送信すべきストリームを、queue の中から • 重み (weight) に基づいて • 公平 (fair) に選択  H2O の wfq は、リングバッファを使用した O(1) 実装 ⁃ ツリーの深さに対しては高速な O(n) • タイトなループなので高速 ⁃ 高速な実装 → 細粒度で送信ストリームを切替可能  他の HTTP/2 実装も wfq を採用へ ⁃ nghttp2, Apache (mod_h2), hyper, ... 55ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 56. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 他のWebブラウザの優先度制御実装 56ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 57. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 優先度制御 (Chromeの場合) 57ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先  重みづけのみを使用(依存関係は未使用)  HTTP/2でfirst-paintは劣化 0 0.5 1 1.5 2 2.5 3 Nginx (HTTP/1.1) Nginx (SPDY/3.1) H2O (HTTP/2) Chrome/43 Download Timing (unit: seconds, latency: 100ms) first paint load complete
  • 58. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 優先度制御 (Chromeの場合) 58ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先  1. HTMLを受信開始 Root HTML weight: 256
  • 59. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 優先度制御 (Chromeの場合) 59ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先  2. <HEAD>をパース、CSSとJSをリクエスト Root HTML weight: 256 CSS weight: 220 JS weight: 183
  • 60. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 優先度制御 (Chromeの場合) 60ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先  3. <BODY>が徐々に到着、画像もリクエスト ⁃ この時点でのバンド幅の配分は? • HTML:CSS:JS:Image*3 = 256:220:183:330 • CSSやJSよりも画像のほうがバンド幅を食ってる ⁃ これではfirst-paint が早くならない Root HTML weight: 256 CSS weight: 220 JS weight: 183 Image weight: 110 Image weight: 110 Image weight: 110
  • 61. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 優先度制御 (他のウェブブラウザの場合) 61ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先  Edge – 優先度制御なし  Safari – 優先度制御なし  サーバ側でなんとかしないと… Root HTML weight: 16 CSS weight: 16 JS weight: 16 Image weight: 16 Image weight: 16 Image weight: 16
  • 62. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O による優先度の書き換え  クライアントが依存関係ツリーを構築しない場合に  レンダリングをブロックしそうな content-type のレス ポンスを最優先で配信 62ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 Root HTML weight: 16 CSS weight: max JS weight: max Image weight: 16 Image weight: 16 Image weight: 16 (internal root)
  • 63. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O の reprioritize-blocking-assets オプション  first paint が大幅に改善 63ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 0 0.5 1 1.5 2 2.5 3 Nginx (HTTP/1.1) Nginx (SPDY/3.1) H2O (HTTP/2) H2O+repriori ze (HTTP/2) Chrome/43 Download Timing (unit: seconds, latency: 100ms) first paint load complete
  • 64. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. 優先度制御まとめ  ユーザの体感速度を大幅に向上させる技術 ⁃ first-paint time が改善するため  クライアント側: ⁃ Firefox – すばらしい ⁃ 他のWebブラウザ – 要改善  サーバ側: ⁃ 実装状況がまちまち ⁃ H2O は Firefox 以外のブラウザむけの最適化も実装 64ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 65. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュ 65ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 66. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュ  HTTP/2はRTTを隠蔽する技術  でも、1RTT(リクエストを投げてからレスポンスを受け 取るまで)は絶対かかるよね?  それ、0RTTでできるよ! ⁃ サーバが、クライアントの発行するリクエストを予測 して、レスポンスをプッシュすればいい ※これ以外の目的でも使える技術ですが、今回はウェブブラ ウザのレスポンスタイムに絞った議論をします 66ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 67. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュ  例: RTT=50ms, アプリサーバの処理時間=200ms 67ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 req. processrequest push-asset HTML push-asset push-asset push-asset req. processrequest asset HTML asset asset asset req. 450ms(5RTT+processingme) 250ms(1RTT+processingme) without push with push
  • 68. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュ  CDNによるウェブ高速化にも応用可能 ⁃ アプリサーバの応答を待つ間も回線を有効活用可能 ⁃ アプリ提供者は、その分、アプリサーバの設置拠点を 減らすことが可能に 68ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 req. push-asset HTML push-asset push-asset push-asset client edge server (CDN) app. server req. HTML
  • 69. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュ  実用にむけた課題: ⁃ (クライアントに頼らない)優先度制御 ⁃ プッシュの起動方法 ⁃ ブラウザキャッシュとの兼ね合い 69ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 70. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュと優先度制御  RFC どおり実装してあっても、あまり役に立たない ⁃ プッシュされるレスポンスは、プッシュを 起動したレスポンスに依存する形でスケ ジュールされるから  H2O は、プッシュの mime-type を見て優先度を決定 ⁃ reprioritize-blocking-assets と同様 70ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先 HTML weight: ?? CSS (pushed) weight: 16
  • 71. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュの使い方 (1)  Link: rel=preload ヘッダ ⁃ アプリサーバが返す Link ヘッダを認識してプッシュ HTTP/1.1 200 OK Content-Type: text/html Link: </style.css>; rel=preload # このヘッダ!!! ⁃ H2O, nghttpx (nghttp2), mod_h2 (Apache) が対応 ⁃ 問題: アプリサーバが応答を返すまでプッシュ不可能 71ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 72. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュの使い方 (2)  H2O では、アプリサーバへリクエストを転送する前にプ ッシュを開始可能 # 1. mrubyハンドラでプッシュを開始 (Linkヘッダをセット) mruby.handler: | Proc.new do |env| [399, { "Link" => "</style.css>; rel=preload" }, []] end # 2. リバースプロキシハンドラがアプリサーバにリクエストを転送 proxy.reverse.url: http://app.example.com:8080/ 72ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 73. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュ vs. ブラウザキャッシュ  キャッシュ済のファイルはプッシュしたくない ⁃ バンド幅(と場合によっては時間)のムダ  キャッシュの有無を判断する方法は? ⁃ ブラウザキャッシュ内の状況を確認するためにリクエ スト/レスポンスを送信してはいけない • そのために1RTTかかるとプッシュのメリットがなくなる 73ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 74. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. cache-aware server-push  H2O 1.5 以降で実装 (experimental)  ブラウザキャッシュ内の CSS, JS を fingerprinting ⁃ Golomb coded sets (bloom filterの圧縮版) を使用  fingerprint を全てのリクエストに cookie として添付 ⁃ cookie サイズは100バイト程度 • さらに HPACK による圧縮が効く ⁃ ServiceWorker を使った実装も開発中 (jxck氏)  H2O は fingerprint を基に、ウェブアプリの要求するプ ッシュを実際に行うか判定 ⁃ プッシュした場合は fingerprint を更新 74ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 75. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. cache-aware server-push  cookieを使うアプローチの問題: ⁃ Webブラウザキャッシュに何が入ってるか、ブラウザ 以外には正確には分からない ⁃ cookieは消される可能性/細かな更新が困難  理想的には、Webブラウザが fingerprint を送信すべき ↓  2014/10: 関係者と議論 @ http2/quic meetup  2015/01: インターネットドラフト(RFC化の提案)を提出 (共著者: Mark Nottingham) mod_h2 (Apache) がドラフトを実装 75ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 76. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. cache-aware server-push  fingerprint を含むリクエストの例 :method: GET :scheme: https :authority: example.com :path: / cache-digest: IdrjaOrSB4wfpbxdx5Q/ ⁃ この cache-digest ヘッダは、以下12の URL がキャ ッシュ済であることを示している https://example.com/assets/css/bootstrap.min.css, https://example.com/assets/css/font-awesome.css, https://example.com/assets/css/header.css, https://example.com/assets/css/magnific-popup.css, https://example.com/assets/css/main.css, https://example.com/assets/css/pinstrap.css, https://example.com/assets/css/pinterest.css, https://example.com/js/bootstrap.min.js, https://example.com/js/jquery-1.11.0.js, https://example.com/js/jquery-ui.min.js, https://example.com/js/jquery.magnific- popup.js, https://example.com/js/pinterest.js 76ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 77. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. サーバプッシュまとめ  ポテンシャルはあるが使いにくい(と思われてきた) ⁃ H2O がそれらの問題を解決 ⁃ 今後の期待: • 仕様の標準化 • ウェブブラウザや、他のサーバでの実装 77ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 78. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. レスポンスタイム最適化まとめ  HTTP/2 はユーザの待ち時間を最適化 ⁃ ユーザ体験向上と売上増加につながると考えられる  HTTP/2 の基本要素 ⁃ 多重化によるレイテンシの隠蔽 ⁃ バイナリ化による通信データ量の削減  どれだけ高速になるかはサーバの実装依存 ⁃ 優先度制御 ⁃ サーバプッシュ 78ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 79. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP サーバのスループット最適化 79ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 80. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. ベンチマーク:静的ファイルの配信  ベンチマーク環境: AWS c3.8xlarge (2台) ⁃ クライアントとサーバは、同一network placement  ファイルサイズ: 612バイト (デスクリプタキャッシュ:on) 80ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 81. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. HTTP/2 は高スループットなプロトコル  HTTP/2 over TLS は、暗号化のない HTTP/1 と同等か より高速 ⁃ TLS の負荷は HTTPS に移行しない理由にならない 81ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 82. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. なぜ H2O は速いのか  ステートマシンを極力廃した設計  SIMD 命令でチューニングされた HTTP/1 パーサ  HTTP/2 と TLS を前提にした設計 ⁃ ヘッダを文字列ではなく、ポインタ演算で比較 ⁃ 大量のレスポンスをマージして、できるだけ少ないシ ステムコールで送信 82ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 83. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. H2O - その他の特徴  (m)rubyによるスクリプティング: ⁃ mod_rewriteよりも保守しやすい ⁃ Rack 標準に則っている → ベンダロックインが発生 しない  先進のTLSサポート: ⁃ セッションキャッシュのサーバ間共有 ⁃ セッションチケットのマスター鍵の自動更新 ⁃ レコードサイズの最適化 ⁃ 自動化されたOCSPステープリング 83ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 84. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. まとめ 84ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先
  • 85. Copyright (C) 2016 DeNA Co.,Ltd. All Rights Reserved. まとめ  HTTP/2 が約束する未来はバラ色 ⁃ より短いレスポンスタイム ⁃ より高いスループット  H2O が、HTTP/2 サーバ実装の競争をリード ⁃ 優先度制御/サーバプッシュ/スループット  DeNA は、H2O の成果を社会に還元 ⁃ OSS として世界と共有 • H2O は DeNA 単独ではなく OSS コミュニティの成果 ⁃ IETF 等での標準化 85ウェブを速くするためにDeNAがやっていること - HTTP/2と、さらにその先

Notas del editor

  1. ただまあ、あまりウェブの会社だって連呼してるとラミネス監督や瀬古総監督に怒られるので怖いですね。
  2. ウェブサイトあたりの転送データ量 (2011/8-2015/8)
  3. 測定条件:ウェブ全体の上位25ページのコンテンツを使用。レイテンシ60ms、パケットロスなし。 10Mbpsのときの実効バンド幅は1.6Mbps。100Mbpsになっても同じ
  4. HEADERSフレームとDATAフレームを使う リクエスト行とヘッダの区別がなくなった。メソッドやパスは、特殊な名前のヘッダで表現する レスポンス行とについても同様
  5. 最後:で、この手法っていうのは、アプリケーションサーバが遅い場合以外にも応用できる訳です。どういう場合かと言うと
  6. アプリケーションサーバが遠くにある場合ですね。たとえば、ユーザは日本にいて、サーバはアメリカにある場合です
  7. ただ、実際は色々課題があるわけです。 (以下、時間があれば) ひとつは、優先度制御をどうするか。一般的なプルリクエストの場合は、クライアントが優先度を指定してくれるわけですが、プッシュの場合はサーバが自分で決めないといけない。 もうひとつは、プッシュの起動方法。ウェブアプリはどうやってプッシュの開始をウェブサーバに指示すべきか。 最後は、ブラウザキャッシュとの兼ね合いになります。