<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="http://organizeseries.com/"
	>

<channel>
	<title>QUIC &#8211; HTML5Experts.jp</title>
	<atom:link href="/tag/quic/feed/" rel="self" type="application/rss+xml" />
	<link>https://html5experts.jp</link>
	<description>日本に、もっとエキスパートを。</description>
	<lastBuildDate>Sat, 07 Jul 2018 03:14:05 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.7.19</generator>
	<item>
		<title>日本最大級のHTTP/2移行、TLS 1.3、そしてQUICについてヤフーに聞いてみた！</title>
		<link>/shumpei-shiraishi/24164/</link>
		<pubDate>Fri, 15 Sep 2017 00:48:15 +0000</pubDate>
		<dc:creator><![CDATA[白石 俊平]]></dc:creator>
				<category><![CDATA[最新動向]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[システム開発]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[QUIC]]></category>
		<category><![CDATA[http2]]></category>
		<category><![CDATA[ヤフー]]></category>

		<guid isPermaLink="false">/?p=24164</guid>
		<description><![CDATA[連載： HTML5 Conference 2017特集 (5)こんにちは、編集長の白石です。 この記事は、9月24日に開催されるHTML5 Conference 2017に登壇するエキスパートに、予定しているセッションの...]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">連載： <a href="https://html5experts.jp/series/html5-conf2017/" class="series-457" title="HTML5 Conference 2017特集" data-wpel-link="internal">HTML5 Conference 2017特集</a> (5)</div><p>こんにちは、編集長の白石です。</p>

<p>この記事は、9月24日に開催される<a href="http://events.html5j.org/conference/2017/9/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">HTML5 Conference 2017</a>に登壇するエキスパートに、予定しているセッションのトピックを中心に、様々な技術的なお話を伺おうというものです。セッションの内容をより深く理解する手助けになるだけでなく、本記事単体でも面白く読んでいただけることを目指しています。</p>

<p>今回お話を伺ったのは、ヤフー株式会社にお勤めの大津繁樹さんと新部長則さんです。</p>

<p><img src="/wp-content/uploads/2017/09/DSC04596.jpg" alt="" width="640" height="400" class="alignnone size-full wp-image-24194" srcset="/wp-content/uploads/2017/09/DSC04596.jpg 640w, /wp-content/uploads/2017/09/DSC04596-300x188.jpg 300w, /wp-content/uploads/2017/09/DSC04596-207x129.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /><br><span style="font-size: 80%;">▲<strong>左から、ヤフー株式会社 大津繁樹さん、新部長則さん</strong></span></p>

<p>お二人のセッションは「<a href="http://events.html5j.org/conference/2017/9/session/#b2" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">大規模運用で見えるWebプロトコルの理想と現実、そして今後</a>」（ルームB 13:20-14:00）です。
（現在HTML5 Conferenceは定員オーバーの状態ですが、無料イベントということもあってキャンセルも多めに出るらしいので、諦めずにキャンセル待ちすることをお勧めします！）</p>

<h2>日本最大級のHTTPS &amp; HTTP/2化案件の実際</h2>

<p><b class="speaker siraisi">白石:</b> まず簡単な自己紹介からお願いできますでしょうか？</p>

<p><b class="speaker nibe">新部:</b> 私は2005年の7月に入社し、Yahoo!メールや広告の画像配信を行うCDNの運用などを経て、現在は全社で利用しているリバースプロキシの運用を行っています。
現在、社内でプラットフォームと呼ばれる部分にはだいたい関わっている感じですね。</p>

<p><b class="speaker ohtsu">大津:</b> まさに、新部さんのチームは、ヤフーのトラフィックをほとんど全て受け止めていると言って間違いありません。国内最大級のトラフィックを支えているんです、半端ないですよ。</p>

<p><b class="speaker siraisi">白石:</b> では大津さんも自己紹介をお願いできますか？</p>

<p><b class="speaker ohtsu">大津:</b> 私は昨年の10月に入社したばかりです。大きく2つの仕事をしていまして、Node.jsのコミッターとして社内のサポートを行っているのと、IETFでネットワークプロトコルの標準化活動に関わっています。</p>

<p><b class="speaker siraisi">白石:</b> ありがとうございます。では、ヤフーのサービスをHTTPS + HTTP/2化した際のことを伺ってもいいですか？</p>

<p><b class="speaker nibe">新部:</b> まずはヤフーのサービスをHTTPSに移行するところから始めたんです。HTTPS化に伴うコストや影響の試算を踏まえて、2015年10月に、全社横断でHTTPS化するプロジェクトが発足したんです。</p>

<p>HTTPS化するにあたっては大きな問題が2つありました。1つは、TLSの暗号化・復号化の処理が重たいということ。もう1つは、証明書の管理が煩雑にならないようにしなくてはならないということでした。なにせドメインでいうと1,000以上、サービスも100以上ありますので。</p>

<p><img src="/wp-content/uploads/2017/09/bc4381f4affc0b228260a833a3758bfb.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24195" srcset="/wp-content/uploads/2017/09/bc4381f4affc0b228260a833a3758bfb.jpg 640w, /wp-content/uploads/2017/09/bc4381f4affc0b228260a833a3758bfb-300x200.jpg 300w, /wp-content/uploads/2017/09/bc4381f4affc0b228260a833a3758bfb-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> 規模感が普通の会社とは桁違いだ…。</p>

<p><b class="speaker nibe">新部:</b> なので、全社共通のリバースプロキシを作って対応することになったんです。そのリバースプロキシでTLSを一旦終端させて、そこから先は通常のHTTP/1.1に変換し、各サービスにリクエストを転送する。</p>

<p><b class="speaker siraisi">白石:</b> そのリバースプロキシって、だいたいサーバ何台分くらいになるんでしょう…？</p>

<p><b class="speaker nibe">新部:</b> <strong>500台以上</strong>ですね。</p>

<p><b class="speaker ohtsu">大津:</b> 「以上」と言っても幅があると思いますが、<strong>そのかなり上の方</strong>ですよ、実際の数字は(笑)。</p>

<p><b class="speaker siraisi">白石:</b> す、すごい…！</p>

<p><b class="speaker nibe">新部:</b> そして、2016年3月、最初にリバースプロキシに乗ったのはヤフオク！です。</p>

<p><b class="speaker siraisi">白石:</b> なんでヤフオク!を最初のサービスに選んだんですか？</p>

<p><b class="speaker nibe">新部:</b> 検証の意味も強かったので、ある程度以上の規模感のあるサービスをデプロイしたかったんです。あと、下手すると人命を左右するような「何があっても絶対に止められない」サービスは避けたかった。</p>

<p><b class="speaker siraisi">白石:</b> なるほど。</p>

<p><b class="speaker nibe">新部:</b> ヤフオク！も、いきなり全部をHTTPS化したわけじゃなくて、最初は一部だけ、その後範囲を広げていったという感じです。
幸いにもそれほど大きな事故も起こることなく進んでいき、2017年の3月末には、特定のクライアントに提供しているところを除いたすべてのサービスがHTTPSで動作するようになりました。</p>

<h2>HTTP/2化は正直、「エイヤ」でやった</h2>

<p><b class="speaker siraisi">白石:</b> なるほど、HTTPS化は、様々なご苦労はあったことと思いますが、比較的順調に推移したということですね。そして今では多くのサービスがHTTP/2を利用しているんですよね。<strong>HTTP/2化はどういう流れで進んでいったんですか？</strong></p>

<p><b class="speaker nibe">新部:</b> これはちょっと言いにくいし、言っていいのかもわからないんですが…<strong>正直、「エイヤ」でやってしまったところもありますね(笑)</strong>。</p>

<p>全社共通のリバースプロキシを構築できたし、ここをHTTP/2化してしまえば、全部HTTP/2にできるじゃん、と。弊社のエンジニアもHTTP/2サーバの実装に携わっていたりもしたので、自分たちで作った成果を自分たちで使いたいという要望もありまして…。</p>

<p><img src="/wp-content/uploads/2017/09/51c35f6b549c0e867e11f9359ea822e5.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24196" srcset="/wp-content/uploads/2017/09/51c35f6b549c0e867e11f9359ea822e5.jpg 640w, /wp-content/uploads/2017/09/51c35f6b549c0e867e11f9359ea822e5-300x200.jpg 300w, /wp-content/uploads/2017/09/51c35f6b549c0e867e11f9359ea822e5-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> で、「エイヤ」でやっちゃったと(笑)。</p>

<p><b class="speaker nibe">新部:</b> まあ、全部をいきなり切り替えたわけじゃないですけどね。こちらも一部のサーバだけを切り替えて、問題がないことを確認しつつ、だんだんと。</p>

<p><b class="speaker siraisi">白石:</b> なるほどー。ちなみにその、最も重要なリバースプロキシですが、具体的にはどのソフトを利用しているんですか？nginxとか？</p>

<p><b class="speaker nibe">新部:</b> いや、<a href="http://trafficserver.apache.org/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Apache Traffic Server</a>というプロダクトです。元々これは米国のYahoo! Inc.が開発していたものをApache Software Foundationに寄贈したものです。</p>

<p><b class="speaker siraisi">白石:</b> では、Apache HTTP Serverとは関連がないんですね。</p>

<p><b class="speaker nibe">新部:</b> そうです。このサーバをHTTP/2対応させるパッチの開発に、弊社のエンジニアもコミットしているんです。</p>

<h2>「HTTP/2化で速くなったかは…正直わかりません(笑)」</h2>

<p><b class="speaker siraisi">白石:</b> では、HTTP/2への切り替えは、それほど大きな問題もなくうまく行ったと。そうした環境で運用を行ってみて、実際にわかったことや問題などはありますか？例えばHTTP/2化することで、パフォーマンスが向上するんじゃないかという期待はあったと思うのですが。</p>

<p><b class="speaker ohtsu">大津:</b> そうですね…正直に言ってしまうと、HTTP/2でパフォーマンスが上がったかどうかは<strong>よくわからない</strong>んです。</p>

<p><b class="speaker siraisi">白石:</b> ああ、それ<a href="https://html5experts.jp/shumpei-shiraishi/24156/" data-wpel-link="internal">先日インタビューしたあほむさん</a> も同じこと言ってました(笑)。</p>

<p><b class="speaker ohtsu">大津:</b> 個別に見れば、速度が上がっている部分は確実にあるんです。ただ、トータルで向上したかどうかは結局よくわからないんですよね。</p>

<p>例えば、<code>window.onload</code> が速くなったかというと、そうでもないんです。ただ、<code>onload</code>についてはあまりにも様々な要因が絡むんで、測定の指標としてあまり有効でないという問題もありますけどね。なにせ、ずっと昔から運営しているサービスなので、 <code>document.write</code> にブロックされているページも残っていたりしますし。</p>

<p><img src="/wp-content/uploads/2017/09/e64a89a1dacf16720a61477a7e16379c.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24197" srcset="/wp-content/uploads/2017/09/e64a89a1dacf16720a61477a7e16379c.jpg 640w, /wp-content/uploads/2017/09/e64a89a1dacf16720a61477a7e16379c-300x200.jpg 300w, /wp-content/uploads/2017/09/e64a89a1dacf16720a61477a7e16379c-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p><b class="speaker siraisi">白石:</b> 確かに、「トータルで向上したか」と言っても「トータル」ってそもそも何なんだという定義が難しそうです。</p>

<p><b class="speaker ohtsu">大津:</b> そういうところも含めて、測定が十分に行えていないというのも課題ですね。サーバ側のログを見ると、リクエスト数ベースでHTTP/1.1とHTTP/2の割合は現在4:6くらいです。</p>

<p><b class="speaker siraisi">白石:</b> 1.1がまだいるっていうのは…ああそうか、(HTTP/2に対応していない)古いブラウザを使っているクライアントですね。クライアントの環境も様々だから、余計測定が難しいですね…。</p>

<p><b class="speaker ohtsu">大津:</b> そうなんです。一気に切り替えてしまったことで、A/Bテストなども行えていないですしね。A/Bテストを行うために、一部を一旦HTTP/1.1に戻すというのもありかもしれません(笑)。</p>

<h2>HTTP/2がサーバの処理負荷を下げる？</h2>

<p><b class="speaker siraisi">白石:</b> HTTP/2に移行する前の、HTTPSへの切り替えではいかがでしたか？先程、「TLSの処理が重たい」という懸念が事前にあったとのことでしたが。</p>

<p><b class="speaker nibe">新部:</b> 一度それで問題になったことはありますね。</p>

<p>弊社のサービスからプッシュ通知を送った時とかは、ユーザーが一斉に接続するので負荷が一時的に高まるんですが、それでCPUがパツパツになってしまったことがありまして。ただ、HTTPS化する前はCPUがボトルネックになるようなことはなかったので、やはりTLSの処理が影響していたんだろうなあと思います。</p>

<p><b class="speaker ohtsu">大津:</b> ただ、<strong>その後そういう問題は起きていないのは、HTTP/2が一役買っているのかもしれません</strong>。</p>

<p>HTTP/2はTCPセッション数が減るので、TLSの暗号化・復号化に伴う処理負荷も減ります。単純に言えば、HTTP/1.1の時に6セッションだったものがHTTP/2で1セッションになったら、TLSのコストは1/6になるわけで。</p>

<p><b class="speaker siraisi">白石:</b> なるほど！HTTP/2がサーバの処理負荷を下げるという可能性は、今まで思い至りませんでした。</p>

<p><img src="/wp-content/uploads/2017/09/c4c6994cd0eee49d9c63ee16f82a8554.jpg" alt="" width="640" height="421" class="alignnone size-full wp-image-24198" srcset="/wp-content/uploads/2017/09/c4c6994cd0eee49d9c63ee16f82a8554.jpg 640w, /wp-content/uploads/2017/09/c4c6994cd0eee49d9c63ee16f82a8554-300x197.jpg 300w, /wp-content/uploads/2017/09/c4c6994cd0eee49d9c63ee16f82a8554-207x136.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>HTTP/2のさらに先へ。新しいプロトコルを知る &#8211; TLS 1.3とは？</h2>

<p><b class="speaker siraisi">白石:</b> HTML5 Conferenceでは、さらに新しいプロトコルについてもご紹介があるとのことですね。</p>

<p><b class="speaker ohtsu">大津:</b> はい、TLS 1.3やQUICについて紹介しようかと思います。</p>

<p><strong>TLS 1.3</strong>というのは、1.2までの技術的負債を精算しつつ、ハンドシェイクを速くすることを目的とした仕様です。仕様はだいたい固まっていて、現在Googleをはじめとした企業が、実験的に使用して調査中です。</p>

<p><b class="speaker siraisi">白石:</b> 技術的負債を精算して、さらに速く…って、いいことづくめですね。</p>

<p><b class="speaker ohtsu">大津:</b> ただ、TLS 1.3にはまだ大きな問題が残っています。<strong>後方互換性に関わる透過性の問題があって、通信できない場合があることが報告されているのです</strong>。</p>

<p>TLS 1.3に対応していない中間機器が、接続を無断で切断しちゃうことがあるんですよね。そういうファイアウォール、IDS（Intrusion Detection System:不正侵入検知システム）、IDP（Intrusion Prevention System:不正侵入予防システム）などが中間経路にあると、ネットワーク全体がダウンしてしまうこともあります。本来は、TLS 1.2にフォールバックしてほしいのですが…現在Googleなどが後方互換の問題を最小にするために透過性の調査を行っているところです。</p>

<p><b class="speaker siraisi">白石:</b> 通信を遮るものをどう扱うか、は難しい問題ですね。正直、簡単に解決する問題には全く聞こえませんね…</p>

<p><b class="speaker ohtsu">大津:</b> そうなんですよ。少し前に、<a href="https://www.theregister.co.uk/2017/02/27/blue_coat_chokes_on_chrome_encryption_update/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">GoogleがTLS 1.3を試験的に有効化していたところ、ある学校で問題が発生し、数万台のChromebookが通信もアップデートも行えなくなってしまうということがありました</a>。
こうなるとGoogleですらお手上げなんですよね。TLSに完全に依存しているので。</p>

<p>そう考えると、HTTP/2って「幸運」だったと思うんですよね。</p>

<p><b class="speaker siraisi">白石:</b> 「幸運」ですか。</p>

<p><b class="speaker ohtsu">大津:</b> はい、TLS 1.2という「枯れた」プロトコル上の動作を前提にできたのがラッキーでした。TLS1.2って、2008年に登場したプロトコルで、今は完全に普及しきっていますから。</p>

<p>そういう前提のないプロトコルや機能拡張だと、大変なんです。</p>

<p>例えば、TCPのデータ送受信開始を速める「<a href="https://html5experts.jp/jxck/3529/" data-wpel-link="internal">TCP Fast Open</a>」という仕様もあるのですが、<a href="https://www.nanog.org/sites/default/files/Paasch_Network_Support.pdf" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">うまく通じない現象がAppleのエンジニアによって報告</a>されていて、<a href="http://asnokaze.hatenablog.com/entry/2017/05/09/223534" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">最近Linuxで緩和策が講じられたにもかかわらず</a>、Microsoft Edgeではついにデフォルトで無効化されてしまいました。</p>

<p>TCP Fast Openは2014年に標準化されており、Linux、 macOS、 WindowsなどOSの対応も進んでいるのですが、それでもまだこういう状況です。それほど、低レイヤーのプロトコルを普及させていくのは難しい。</p>

<p>だから、私たちがHTTP/2の移行にあまり苦労しなかったことも含め、HTTP/2のアップグレードがこれほどスムーズなのは大変幸運なことなのです。</p>

<p><img src="/wp-content/uploads/2017/09/d3cf54c0f443750953b54a236fa672c3.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24200" srcset="/wp-content/uploads/2017/09/d3cf54c0f443750953b54a236fa672c3.jpg 640w, /wp-content/uploads/2017/09/d3cf54c0f443750953b54a236fa672c3-300x200.jpg 300w, /wp-content/uploads/2017/09/d3cf54c0f443750953b54a236fa672c3-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<h2>QUICという「プラットフォーム」の可能性</h2>

<p><b class="speaker siraisi">白石:</b> <strong>QUIC</strong>についても教えていただけますか？</p>

<p><b class="speaker ohtsu">大津:</b> QUICは、<strong>ざっくり言うとUDPの上でTCP、TLS 1.3、そしてHTTP/2の一部をごちゃっとやる感じのプロトコル</strong>です。</p>

<p><b class="speaker siraisi">白石:</b> ごちゃっと(笑)。</p>

<p><b class="speaker ohtsu">大津:</b> IETFでの標準化も進められていて、今度の10月で1年になりますね。非常に有望なプロトコルで、今後のネットワークのプラットフォームになっていくポテンシャルを秘めていると期待しています。</p>

<p><b class="speaker siraisi">白石:</b> なぜそこまで期待していらっしゃるのでしょう？</p>

<p><b class="speaker ohtsu">大津:</b> 「UDPなので疎通性が良い」というのと「ユーザーランドで動作するプロトコルなのでデプロイが容易」ということが挙げられます。</p>

<p>先程TLS 1.3の普及には苦労しそうだ、という話をしましたが、QUICはUDPなので比較的通りやすいんです。また、通じなかった場合はTCPにフォールバックする機能もある。通信を行うコンピューター同士が、エンドツーエンドでQUICに対応していればいいのです。</p>

<p>ユーザーランドで動作する…というのは、TCP BBR (※) と比較するとわかりやすいと思います。</p>

<p><small>
※参考: 「<a href="http://www.publickey1.jp/blog/17/googletcptcp_bbrgoogle_cloud.html" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始 (Publickey)」</a>
</small></p>

<p>TCP BBRは、Googleが開発した新しい輻輳制御のアルゴリズムです。モバイル環境のように、パケットロスが非常に多い環境でも速度を最大化できるという利点があります。</p>

<p><img src="/wp-content/uploads/2017/09/2071b8b501257b7d07a5f4c6ebf54559.jpg" alt="" width="640" height="427" class="alignnone size-full wp-image-24201" srcset="/wp-content/uploads/2017/09/2071b8b501257b7d07a5f4c6ebf54559.jpg 640w, /wp-content/uploads/2017/09/2071b8b501257b7d07a5f4c6ebf54559-300x200.jpg 300w, /wp-content/uploads/2017/09/2071b8b501257b7d07a5f4c6ebf54559-207x138.jpg 207w" sizes="(max-width: 640px) 100vw, 640px" /></p>

<p>しかし欠点としては、TCPのスタックってOSのカーネルに実装されているので、<strong>使おうとするとカーネルのアップデートが必要になる</strong>ということです。できれば通信を行うコンピューターがどちらもTCP BBRに対応したカーネルにアップグレードしていることが望ましいのですが、OSのアップグレードサイクルを考えると、どれほど少なく見積もっても普及には数年かかるでしょう。</p>

<p>その点QUICはUDPの上で構築されている。プロトコルの処理はユーザーランドで行われるので、デプロイするのにOSのアップグレードなどを伴いません。プロトコルのバージョンアップも、機能追加も比較的簡単だと考えられます。将来的にHTTPだけでなくDNSやWebRTCなどでQUICが利用されることも検討されています。</p>

<p><b class="speaker siraisi">白石:</b> それが、「<strong>QUICはプラットフォームになりうる</strong>」という先程の言葉の意味ですね。</p>

<p><b class="speaker ohtsu">大津:</b> はい。ただ、QUICも実際には良いことばかりではありません。「QUICを無効にしたらChromeが軽くなった」などのノウハウが最近巷に広まってきています（※）。さきほどUDPの透過性の良さについて話しましたがやはり完全に透過ではなく、これも中間経路での問題が出てきている現象だと見られています。</p>

<p><small>
※参考: 「<a href="http://tanweb.net/2017/07/11/15417/" data-wpel-link="external" target="_blank" rel="follow external noopener noreferrer">最近 Chrome が「重くなった・ひっかかる」と感じたら試してみてほしいこと (Tanweb.net)</a>」
</small></p>

<p><b class="speaker siraisi">白石:</b> やはり、ネットワークプロトコルのデプロイって難しいんですね…。ただ、QUICが持つ素晴らしい可能性についても、よくわかりました。</p>

<p>本日は、実際の大規模なHTTPS &amp; HTTP/2への移行経験から新しいWebプロトコルのお話まで聞けて、大変勉強になりました！
どうもありがとうございました。</p>
]]></content:encoded>
		
		<series:name><![CDATA[HTML5 Conference 2017特集]]></series:name>
	</item>
	</channel>
</rss>
