http2 時代の web - web over http2

80
HTTP/2 時代の Web Web over HTTP2 #yapcasia 2015 Jxck

Upload: jxck-

Post on 16-Apr-2017

34.371 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: HTTP2 時代の Web - web over http2

HTTP/2 時代の WebWeb over HTTP2#yapcasia 2015 Jxck

Page 2: HTTP2 時代の Web - web over http2

● id: Jxck● github: Jxck● twitter: @jxck_● about: http://jxck.io● blog: http://jxck.hatenablog.com● podcast: http://mozaic.fm● Love: music

Jack

Page 4: HTTP2 時代の Web - web over http2

4

Page 5: HTTP2 時代の Web - web over http2

5

http://http2.info

Page 6: HTTP2 時代の Web - web over http2

● #1 2013/08/14● #2 2013/10/17● #3 2014/01/28● #4 2014/03/20● #5 2014/07/30● #6 2014/11/25

Meetup - #http2study

http://connpass.com/series/457/

● IETF briefing session● spec discuttion● implementation tips● project sharing● etc

Page 7: HTTP2 時代の Web - web over http2

● #1 2014/02/23● #2 2014/05/24● #3 2014/09/06● #4 2015/01/24

Hackathon● issuethon 2014/04/12

○ discuttion on http2 issues on ML & github

Page 8: HTTP2 時代の Web - web over http2

Implementations in Japan

nghttp2C

iij-http2node.js

http2-goGo

sasazukanode.js

haskell-http2haskell

h2oC

Page 9: HTTP2 時代の Web - web over http2

Local Activity Report @IETF89

Page 10: HTTP2 時代の Web - web over http2

RFC7540

10

Page 11: HTTP2 時代の Web - web over http2

本当に出た

11

Page 12: HTTP2 時代の Web - web over http2

今何がおこっているか?

12

Page 13: HTTP2 時代の Web - web over http2

策定フェーズ

から

使うフェーズ

13

Page 14: HTTP2 時代の Web - web over http2

Position Matrix

14

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

Page 15: HTTP2 時代の Web - web over http2

どう有るべきか?

15

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

積極的に使いこなして行く?

使わない方がいい場合がある?

気にせずとにかく入れるべき?

Page 16: HTTP2 時代の Web - web over http2

現状把握

16

Page 17: HTTP2 時代の Web - web over http2

コンテンツサイズ

17

http://httparchive.org/trends.php?s=All&minlabel=Dec+16+2010&maxlabel=Aug+1+2015#bytesTotal&reqTotal

1 ページ中のリクエスト数とレスポンスサイズ (2010/12 ~ 2015/8)

サイズもリクエスト数も増加の一途

=> サイズが増えるなら帯域が増えればいいのか?

Page 18: HTTP2 時代の Web - web over http2

帯域 vs レイテシ

帯域 の増加よりも、 レイテシ の削減の方が効果が

大きい。18

https://docs.google.com/presentation/d/1r7QXGYOLCh4fcUq0jDdDwKJWNqWK1o4xMtYpKZCJYjM/present?slide=id.g518e3c87f_2_0

Page 19: HTTP2 時代の Web - web over http2

速くするために

● RTT (Round Trip Time) を減らす

○ 物理的に近くする

○ レスポンスを速くする

● RT (Round Trip) を減らす

○ アクセスする回数を減らす

○ キャッシュしてアクセスを減らす

○ なんとかしてアクセスしないで済ます

19

Page 20: HTTP2 時代の Web - web over http2

HTTP/1.1

20

advanced だから駆け足で

Page 21: HTTP2 時代の Web - web over http2

HTTP/1.*

21

Page 22: HTTP2 時代の Web - web over http2

HTTP/1.*

22

● Header○ テキストベース○ 圧縮不可○ 毎回送る○ 重複が多い(UA)

● Body○ 何でも良い○ 圧縮可能(gzip etc)

Page 23: HTTP2 時代の Web - web over http2

HTTP/1.*

23

● TCP を毎回確立○ 毎回 3-W-H○ 毎回 initial cwnd から

Page 24: HTTP2 時代の Web - web over http2

HTTP/1.*

24

● HTTP Head of Line Blocking○ 一度に一つの HTTP リクエスト○ 一つ詰まると後続がブロック

Page 25: HTTP2 時代の Web - web over http2

HTTP/1.*

25

● ブラウザは 6 本同時に接続● 同時に 6 つのコンテンツを並行取得

123456

123456

Page 26: HTTP2 時代の Web - web over http2

シンプルな一方高速化に限界が

26

Page 27: HTTP2 時代の Web - web over http2

回避策

27

● HTTP○ Keep Alive○ CSS Sprite○ File Concat○ Domain Sharding

● TCP○ TCP Fast Open○ InitCWND 10○ TLS Session Ticket○ TLS False Start

http://www.oreilly.co.jp/books/9784873114460/http://www.oreilly.co.jp/books/9784873113616/

Page 28: HTTP2 時代の Web - web over http2

回避策

28

● HTTP○ Keep Alive○ CSS Sprite○ File Concat○ Domain Sharding

● TCP○ TCP Fast Open○ InitCWND 10○ TLS Session Ticket○ TLS False Start

Bad Hack

Kernellevel

http://www.oreilly.co.jp/books/9784873114460/http://www.oreilly.co.jp/books/9784873113616/

Page 29: HTTP2 時代の Web - web over http2

HTTP/2

29

advanced だから駆け足で

Page 30: HTTP2 時代の Web - web over http2

HTTP2

30

Page 31: HTTP2 時代の Web - web over http2

HTTP2

31

● バイナリフレーム○ パースしやすい○ サイズ効率が良い○ データ分割しやすい

● セマンティクス維持○ 語彙は変わらない○ 互換性

Page 32: HTTP2 時代の Web - web over http2

HTTP2

32

● HPACK○ Huffman 圧縮

○ 頻出ヘッダを共有

○ 送信済みデータを再利用

● 圧縮率は実装次第● see also:http://bit.ly/1E8aHYL

Page 33: HTTP2 時代の Web - web over http2

HTTP2

33

● 1 コネクションにストリームを多重化

Page 34: HTTP2 時代の Web - web over http2

HTTP2

34

● コンテンツの優先度制御● 必要に応じたリソース分配

see also: http://bit.ly/1EFDnD7 1 : 2 : 3

Page 35: HTTP2 時代の Web - web over http2

35http://www.slideshare.net/shigeki_ohtsu/http2-quic

コネクションを使い切る

Page 36: HTTP2 時代の Web - web over http2

Head of Line Blocking 回避

36https://jxck.io/labs/hol/

Page 37: HTTP2 時代の Web - web over http2

プロトコルを改善し最適化の余地が産まれた

37

Page 38: HTTP2 時代の Web - web over http2

Server Push

38

● 依存コンテンツを先に送ってキャッシュさせる

● リクエスト発生時キャッシュヒットする

● 1Req / 1RT の壁を超える

Page 39: HTTP2 時代の Web - web over http2

積極的な Cache Contorl● Browser Cache

○ 熾烈な奪い合い

○ 75% の人は 48h で領域を使い切る

○ see also: http://bit.ly/1HUy0Ex● Push で積極的な Cache 管理

39https://github.com/h2o/h2o/issues/421

Page 40: HTTP2 時代の Web - web over http2

with Service Worker

40

● HTTP2 Push を Push API 受け取れる予定

● Fetch - Push が全て JS でコントロール可能

● HTTP2 + SW で積極的なミドルコントロール

Page 41: HTTP2 時代の Web - web over http2

Push が入ることの意味

41

● HTTP が Fetch と Push の両方をカバーした

● 双方向通信に必要な機能が揃った

● コンテンツ配信だけじゃもったいない

● 使用例○ WebSocket over HTTP2 (策定中)○ gRPC (push は未サポート?)○ Servlet 4.0 (push の扱いを議論中)○ Service Worker の Push API (議論中)

コンテンツ配信の枠を超え

アプリケーションからより

積極的に使えるプロトコルに

Page 42: HTTP2 時代の Web - web over http2

Position Matrix (now)

42

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

Page 43: HTTP2 時代の Web - web over http2

HTTP2 は自分にとって必要か?

43

Page 44: HTTP2 時代の Web - web over http2

必要?

44

● HTTP よりも他にボトルネックあるし

● HTTP/1.1 に最適化して速度出てるし

● HTTPS にするのがなぁ。。

● Push って必要?

● インフラどうなるの?

● G と FB と Tw が必要としてるだけでしょ?

● そもそも実装が。。

● etc

Page 45: HTTP2 時代の Web - web over http2

Performance

45

Page 46: HTTP2 時代の Web - web over http2

Response Time の後の世界

46

FilmStrip

https://sites.google.com/a/webpagetest.org/docs/using-webpagetest/metrics/speed-index

● 同じレンスポンスタイムでも、表示の最適化により

体感は変わる。

● 一枚の画像が、バックエンドのチューニングを台無

しにすることもある。

Page 47: HTTP2 時代の Web - web over http2

Res Time は全体の半分しか測れてない

● Response Time の後の世界○ Cache の最適化

○ Critical Rendering Path の最適化

○ SPA● 何を見るか

○ Speed Index○ Film Strip○ TTFB (time to first byte)○ First Paint○ RUM (real user monitoring)○ etc

47

see also: http://bit.ly/1fsJZhD http://bit.ly/1U1hWDx

Speed Indexhttp://bit.ly/1HMvBg6

Page 48: HTTP2 時代の Web - web over http2

HTTP/1.1 の呪縛

48

Page 49: HTTP2 時代の Web - web over http2

最適化

49

● HTTP/1.1 向けハック○ JS の concat○ CSS の concat○ 画像の Sprite○ Sprite のための CSS○ ドメイン分ける

○ etc

Bad Hack 無しの素直な作りでも遅くなら

なかったとしたら?http://www.oreilly.co.jp/books/9784873114460/http://www.oreilly.co.jp/books/9784873113616/

Page 50: HTTP2 時代の Web - web over http2

実装・インフラ

50

Page 51: HTTP2 時代の Web - web over http2

進む実装

51

● Nginx● Apache HTTPd● Apache Trafic Server● IIS● Akamai● H2O● nghttp2● etc

今は実装がこなれるまでの過渡期。各所で検証も進んでいる。

Page 52: HTTP2 時代の Web - web over http2

インフラ

● Load Balance どうするの?

● HTTPS の終端は?

● CDN は?

● 証明書管理は?

● etc

52see also: http://bit.ly/1PqYWNB

need more知見

Page 53: HTTP2 時代の Web - web over http2

HTTPS

53

Page 54: HTTP2 時代の Web - web over http2

様々な問題

● NSA: PRISM (広域盗聴)● AT&T: NSA への協力

TLS 推奨の流れ

● W3C○ End-to-End Encryption and the Web

● IETF○ Privacy Protected Security Considerations

● Google○ HTTPS as a ranking signal

● Mozilla○ Deprecating Non-Secure HTTP

● Let’s Encrypt (延期11月)○ https://letsencrypt.org/

54"Edward Snowden-2" by Laura Poitras / Praxis Films. Licensed under CC 表示 3.0 via ウィキメディア・コモンズ

Pervasive Surveillance

Page 55: HTTP2 時代の Web - web over http2

HTTPS は前提?

55

● HTTP2○ 仕様上は平文もあるが、ブラウザは実装してない。

● WebRTC○ HTTPS じゃないと getUserMedia が毎回要確認

● Service Worker○ HTTPS じゃないと登録できない

● HSTS○ HTTPS で接続させる

● Oppotunistic Encryption○ HTTP でも暗号化する

● Upgrade Insecure Request○ http:// を https:// に読み替えてリクエスト

see also: http://bit.ly/1Lq1fT9

Page 56: HTTP2 時代の Web - web over http2

HTTP2 はハイパージャイアント

のもの?

56

Page 57: HTTP2 時代の Web - web over http2

ハイパージャイアントニーズ

● 戦ってるレベルが違う○ 毎日が DOS○ 1byte 減らすインパクトが違う

○ 効率が良くなると DC レベルでメリット

○ 知見もリソースも潤沢

● そうじゃないと HTTP2 はいらない?○ 小さくても複雑なアプリ

○ 中くらいでもよく使われるサービス

○ HTTP/1.1 との戦いは Web 全体の課題

57

使わないといけなくはない使ってはいけなくもない

Page 58: HTTP2 時代の Web - web over http2

クライアントの普及

58

良く知らない導入しない

理解した導入しない

知らないうちに導入してる

理解した導入する

標準化の功。すでにクライアントの普及は始まってる。あとは、サービスが対応するかどうか次第。

Page 59: HTTP2 時代の Web - web over http2

カジュアルに使っちゃだめなの?

59

Page 60: HTTP2 時代の Web - web over http2

良く知らないで使うと失敗する?

割と単純に入れるだけで効果がある場合も

60also: http://bit.ly/1NLszIR

Page 61: HTTP2 時代の Web - web over http2

敷居は高いのか

● 突き詰めれば難しい

○ それは HTTP/1.1 も同じでは?

○ ノウハウがどこまで増えるか

● 敷居は仕様よりエコシステム

○ ツールなどの支援

○ フレームワークの抽象化

○ 気がついたら使ってた までの道のり

● HTTP/1.1 とのセマンティクス互換

○ 深入りしないなら入るのも抜けるのもできる

○ ミドルウェアの抽象化に任せていれば意識しない?61

Page 62: HTTP2 時代の Web - web over http2

広がるエコシステム

● servlet 4.0○ ミドルレイヤの仕様への導入: http://bit.ly/1PDc8iW

● HDFS○ ミドルウェアの通信プロトコルに: http://bit.ly/1hvxhR9

● grpc: ○ 汎用 RPC として: http://bit.ly/1MI5QjP

● F5-BigIP:○ gateway レベルで対応: http://bit.ly/1LmYxe4

● CURL:○ いつものツールが: http://bit.ly/1Eb19wi

62

Page 63: HTTP2 時代の Web - web over http2

これからどうなるか?

63

Page 64: HTTP2 時代の Web - web over http2

研究課題

● priority 最適化戦略

● hpack の圧縮戦略

● push による cache 管理戦略

● フレームワーク API (Push etc)● P2P など拡張仕様

64

Page 65: HTTP2 時代の Web - web over http2

HTTP3

65https://github.com/HTTPWorkshop/workshop/wiki/HTTP-Ideas

Page 66: HTTP2 時代の Web - web over http2

TCP の限界

● TCP レベルの Head of Line Blocking● 一本のコネクションに全て載せている

● パケットが一つ落ちると再送が発生

● コネクション全体が詰まる

66

TCP 自体は直せない

Page 67: HTTP2 時代の Web - web over http2

UDP それは最後の希望

67

● TCP 自体の問題

○ TCP 自体が持つ問題の解決は難しい

○ 別ポートプロトコルの普及は難しい

○ ミドルボックスを通れない

● UDP がある!!

○ UDP には良い意味で何も無い

○ そこに全て載せればいいのでは?

○ ポートも同じ、暗号化すればミドルボックスも通る

Page 68: HTTP2 時代の Web - web over http2

そして QUIC へ● Head of Line Block を解消

● 0RTT での接続確立

● TLS 1.3 ベース

● 輻輳制御も独自に実装

● UDP 上に実装することで迅速なデプロイ

● TCP の限界を突破

68

HTTP2 overQUIC over

UDP

Page 69: HTTP2 時代の Web - web over http2

Position Matrix

69

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

HTTP/1.1 は生き続けるので、これからも問題なく動く。

Page 70: HTTP2 時代の Web - web over http2

Position Matrix

70

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

戦略としてはあり(ただし留まり続けることが低コストである保証は無い)

Page 71: HTTP2 時代の Web - web over http2

Position Matrix

71

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

エコシステムの成熟次第でそうなる

かも

Page 72: HTTP2 時代の Web - web over http2

Position Matrix

72

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

既存課題の解決+

次のステージへ

Page 73: HTTP2 時代の Web - web over http2

Position Matrix

73

良く知らない導入しない

理解した導入しない

良く知らない導入する

理解した導入する

まずはここから

Page 74: HTTP2 時代の Web - web over http2

まとめ

● 今何が起こっているか

○ HTTP2 RFC が発行された

○ HTTP2 実装が進んでいる

○ エコシステムの芽も見え始めた

● これからどうなっていくのか

○ HTTP/1.1 が消える事は無い

○ HTTPS 化は止まらなそう

○ Web はまだまだ進化しそう

○ HTTP2 はそのうちのひとつ

○ そして QUIC へ74

Page 75: HTTP2 時代の Web - web over http2

Next Checkpoint

75

Page 76: HTTP2 時代の Web - web over http2

Nginx ! Nginx ! Nginx !

76

by the end of 2015!!すでに patch あり

http://nginx.org/patches/http2/

Page 77: HTTP2 時代の Web - web over http2

IETF at 横浜 (11月)

77

#http2study も日本でなにかやるかも

Page 78: HTTP2 時代の Web - web over http2

78

JOIN US !!

Page 79: HTTP2 時代の Web - web over http2

have a nice web :)

79

Page 80: HTTP2 時代の Web - web over http2

Jack