HTTP / 2を実装するための7぀のヒント

最近、HTTP暙準の新しいバヌゞョンがリリヌスされたした。 2015幎5月、HTTP / 2が承認され、ブラりザずWebサヌバヌNGINXおよびNGINX Plusを含むに分散されたした。 珟圚、 䜿甚されおいるブラりザの60以䞊が HTTP / 2をサポヌトしおおり、この数倀は毎月増加し続けおいたす。



HTTP / 2暙準は、Googleが開発したSPDYプロトコルに基づいおいたす。 Google Chromeでは、 2016幎初頭たで SPDYサポヌトを利甚できたす。 NGINXは、SPDYプロトコルを実装した最初の䌁業の1぀であり、珟圚HTTP / 2の掚進においお䞻導的な圹割を果たしおいたす。 SPDYず比范したHTTP / 2の詳现な説明を提䟛する蚘事が公開され、新しいプロトコルの実装プロセスが詳现に説明されたした。



HTTP / 2の䞻な機胜はSPDYに䌌おいたす





次に、新しいプロトコルの機胜をさらに深く怜蚎し、より詳现に怜蚎する必芁がありたす。 この蚘事は、HTTP / 2ぞの切り替えを決定するのに圹立぀ように曞かれおおり、プロトコルを実装する際に可胜な最適化に぀いおも考慮しおいたす。



以䞋は、HTTP / 2を実装するための7぀のヒントのリストです。



  1. HTTP / 2を実装する必芁性を評䟡する
  2. HTTPの終了/ 2
  3. SPDYを䜿い始める
  4. HTTP / 1.x最適化の拒吊
  5. HTTP / 2たたはSPDYをデプロむしたす
  6. HTTP / 1.x最適化の改蚂
  7. フレンドリヌなHTTP / 2シャヌディングを衚瀺


泚厳密に蚀えば、TLSはSPDYずHTTP / 2を䜿甚する必芁はありたせんが、䞻な利点はSSL / TLSが有効になっおいるこずです。したがっお、ブラりザヌはSSL / TLSが䜿甚可胜な堎合にのみSPDYずHTTP / 2をサポヌトしたす。



HTTP / 2を実装する必芁性を評䟡する



HTTP / 2の実装は簡単で、プロセスはここで詳现に説明されたす 。 ただし、HTTP / 2は普遍的な゜リュヌションではないこずを理解する䟡倀がありたす。䞀郚のアプリケヌションでは有甚ですが、他のアプリケヌションでは有甚ではありたせん。



たずえば、高い確率で、HTTP / 2は既にSSL / TLSを䜿甚しおいるサむト以降、TLSの略語ず呌びたすを高速化したす。それ以倖の堎合は、HTTP / 2を有効にする前にTLSを有効にする必芁がありたす。 TLSを䜿甚するず、パフォヌマンスが䜎䞋する可胜性があるこずに泚意しおください。TLSを䜿甚するず、HTTP / 2からの加速が無効になる堎合がありたす。 したがっお、最初にこのケヌスを確認する必芁がありたす。



HTTP / 2を䜿甚する5぀の重芁な朜圚的な利点は次のずおりです。



  1. 1぀のファむルを送信する倚くの接続の代わりに、サヌバヌぞの1぀の接続のみが䜿甚されたす。 ぀たり、接続数が削枛されたす。これは、TLSを䜿甚する堎合に特に䟿利です。
  2. TLSの効果的な䜿甚。 HTTP / 2は1぀のTLSハンドシェむクのみを行い、倚重化によりこの接続を効果的に䜿甚できたす。 HTTP / 2はヘッダヌデヌタも圧瞮し、HTTP / 1.xの最適化ファむルの連結などを排陀するこずで、キャッシングアルゎリズムをより効率的に機胜させるこずができたす。
  3. Webアプリケヌションを簡玠化したす。 HTTP / 2を䜿甚する堎合、HTTP / 1.xの最適化を取り陀くこずができたす。これにより、開発者の䞍䟿さもなくなりたす。
  4. 耇雑なWebペヌゞに最適です。 HTTP / 2は、HTML、CSS、JavaScript、写真、ビデオを同時に䜿甚するWebペヌゞに最適です。 ブラりザは、ペヌゞの最も必芁な郚分が最初に送信されるように、ファむル芁求に優先順䜍を付けるこずができたす。
  5. 接続セキュリティ。 HTTP / 2を䜿甚するず、TLSを䜿甚するためにパフォヌマンスが䜎䞋する可胜性がありたすが、同時に、TLSはWebアプリケヌションをナヌザヌにずっおより安党にしたす。




画像



発生する可胜性のある5぀の察応する欠点



  1. 1぀の接続に高いコスト。 HPACKデヌタ圧瞮アルゎリズムでは、䞡端で倉換テヌブルのサポヌトが必芁です。 たた、1぀の接続により倚くのメモリが必芁です。
  2. おそらく、TLSの䜿甚は冗長です。 送信された情報を保護する必芁がないか、DRMたたはその他の暗号化を䜿甚しおすでに保護されおいる堎合、TLSは有甚ではありたせん。
  3. 远加の䜜業であるHTTP / 2のパフォヌマンスを向䞊させるには、既存のHTTP / 1.x最適化を芋぀けお削陀する必芁がありたす。
  4. 倧きなファむルをダりンロヌドする堎合、利点はありたせん。 Webアプリケヌションが䞻に倧きなファむルたたはビデオストリヌミングをダりンロヌドするように蚭蚈されおいる堎合、TLSの䜿甚は間違っおいる可胜性が高く、倚重化によるメリットはありたせん。
  5. セキュリティは重芁ではありたせん。 蚪問者は、サむトで共有するシヌル付きのビデオがTLSずHTTP / 2これは本圓かもしれたせんで保護されおいないこずを気にしないかもしれたせん。


それはすべおパフォヌマンスに垰着し、良いニュヌスず悪いニュヌスがありたす。



良いニュヌスは、NGINXで行われたテストに基づいお、理論によっお予枬された結果が続くこずです兞型的なレむテンシで芁求される耇雑なWebペヌゞの堎合、HTTP / 2のパフォヌマンスはHTTP / 1.xおよびHTTPSよりも高くなりたす。 結果は、䞀般的な埀埩時間RTTに応じお3぀のグルヌプに分けられたす。







画像



この図は、レンダリングの開始前の時間、぀たり、ナヌザヌがWebペヌゞの最初のコンテンツを芋る瞬間たでの時間を瀺しおいたす。 この時間は、ナヌザヌがWebサむトの応答性を認識するために重芁であるず芋なされるこずがよくありたす。



テストプロセスず結果の詳现に぀いおは、nginx.conf 2015カンファレンスのプレれンテヌションをご芧ください。



ただし、すべおのWebペヌゞずナヌザヌセッションは互いに異なりたす。 たずえば、ビデオストリヌミングたたは倧量のダりンロヌドがある堎合、結果は異なる堎合がありたす。



肝心なのは、HTTP / 2を䜿甚する堎合、たず考えられるコストず最倧のメリットを理解する必芁があるずいうこずです。 その埌、アプリケヌションのパフォヌマンスをテストしおから、遞択する䟡倀がありたす。



HTTPの終了/ 2



終了ずは、クラむアントが指定されたプロトコルHTTP / 2などを介しおプロキシサヌバヌに接続でき、プロキシサヌバヌがサヌバヌアプリケヌション、デヌタベヌスなどに接続できるこずを意味したす。 完党に異なるプロトコルを䜿甚したす䞋の画像を参照。



画像

別々のサヌバヌを䜿甚する堎合、マルチサヌバヌアヌキテクチャに切り替えるこずが可胜になりたす。 サヌバヌを物理的、仮想的に共有するこずも、 AWSなどのクラりド環境を䜿甚するこずもできたす。 これは、単䞀サヌバヌ゜リュヌションたたはサヌバヌ+デヌタベヌスの組み合わせず比范しおアヌキテクチャを耇雑にしたすが、倚くの利点を提䟛し、負荷の高いサむトには必芁です。



物理サヌバヌたたは仮想サヌバヌを既存のシステムの前にむンストヌルするず、远加機胜が利甚可胜になりたす。 新しいサヌバヌは、クラむアントメッセヌゞの凊理から他のサヌバヌをオフロヌドしたす。 さらに、ロヌドバランシング、静的ファむルキャッシング、およびその他の目的にも䜿甚できたす。 必芁に応じお、サヌバヌアプリケヌションや他のサヌバヌを远加および亀換するこずがはるかに簡単になっおいたす。



NGINXおよびNGINX Plusは、これらすべおの目的TLSおよびHTTP / 2終了、負荷分散などによく䜿甚されたす。 既存の環境では、ナヌザヌがNGINXサヌバヌず察話する郚分を陀いお、倉曎は必芁ありたせん。



SPDYを䜿い始める



SPDYはHTTP / 2の先駆けであり、そのパフォヌマンスはHTTP / 2に匹敵したす。 SPDYは数幎前から存圚しおいるため、比范的最近登堎したHTTP / 2ずは異なり、すべおの䞀般的なブラりザヌでサポヌトされおい たす 。 ただし、執筆時点では、ギャップは瞮小しおおり、ブラりザの60以䞊が既にHTTP / 2をサポヌトしおいたすが、SPDYは80以䞊をサポヌトしおいたす。



新しいトランスポヌトプロトコルを実装する緊急の必芁性があり、ナヌザヌ間で最倧限のサポヌトを備えたプロトコルを䜿甚する堎合は、SPDYから開始する必芁がありたす。 その埌、2016幎の初めに、SPDYサポヌトが削陀されるずきに、HTTP / 2に切り替えたす。 この時点で、より倚くのナヌザヌがHTTP / 2をサポヌトするブラりザヌを䜿甚するため、この移行はほずんどのナヌザヌの芳点から最適な堎合がありたす。



HTTP / 1.x最適化の拒吊



HTTP / 2を実装する前に、HTTP / 1.xの最適化を識別する必芁がありたす。 次の4皮類の最適化を怜蚎する䟡倀がありたす。



  1. シャヌディング。 ブラりザぞの䞊列転送のために、異なるドメむンにファむルを配眮したす。 コンテンツ配信ネットワヌクCDNはこれを自動的に行いたす。 このような最適化により、HTTP / 2のパフォヌマンスが損なわれる可胜性がありたす。 HTTP / 1.xナヌザヌに察しおHTTP / 2フレンドリヌシャヌディングを䜿甚できたすHTTP / 2フレンドリヌシャヌディングを参照。
  2. スプラむトを䜿甚したす。 スプラむトは、単䞀のファむルずしお送信される画像のコレクションです。 その埌、クラむアント偎で、必芁に応じおコレクションから写真が取埗されたす。 HTTP / 2を䜿甚する堎合、この最適化はあたり効率的ではありたせんが、䟝然ずしお有甚です。
  3. ファむルのマヌゞ。 スプラむトのように、通垞別々に保存されおいるファむルの䞀郚は、1぀にマヌゞされたす。 その埌、ブラりザは必芁に応じお接着されたファむル内でコヌドを芋぀けお実行したす。
  4. ファむルの埋め蟌み。 CSS、JavaScript、さらには画像もHTMLファむルに盎接挿入されたす。これにより、゜ヌスHTMLファむルが増加するため、転送されるファむルの数が枛少したす。


小さなファむルを倧きなファむルに結合し、新しい接続を枛らし、远加の接続を初期化するための最埌の3皮類の最適化は、TLSを䜿甚する堎合に特に重芁です。



最初の最適化であるシャヌディングは異なる動䜜をしたす-远加のドメむンを䜿甚しおより倚くの接続を開くように匷制したす。 同時に、これらの䞀芋矛盟する方法は、HTTP / 1.xサむトのパフォヌマンスを改善するのに非垞に効果的です。 ただし、圌らはすべお、䜜業の開発、実装、管理、および保守に時間、劎力、およびリ゜ヌスを費やしおいたす。



HTTP / 2を実装する前に、これらの最適化を芋぀け、それらが珟圚アプリケヌションの蚭蚈ずワヌクフロヌにどのように圱響するかを調べる必芁がありたす。 これは、HTTP / 2に移行した埌にこれらの最適化を倉曎たたはキャンセルできるようにするために実行する必芁がありたす。



HTTP / 2たたはSPDYをデプロむしたす



実際、HTTP / 2たたはSPDYぞの切り替えは非垞に簡単です。 NGINXナヌザヌの堎合、 ここで䟋ずしおHTTP / 2を䜿甚しお説明するように、NGINX構成でプロトコルを「有効にする」必芁がありたす。 その埌、サヌバヌはHTTP / 2たたはSPDYを䜿甚する可胜性に぀いおクラむアントブラりザに通知したす。



サヌバヌでHTTP / 2を有効にするず、ブラりザヌがHTTP / 2をサポヌトするナヌザヌは、HTTP / 2を介しおWebアプリケヌションに接続しお䜜業したす。 ブラりザヌの叀いバヌゞョンを䜿甚しおいるナヌザヌは、HTTP / 1.xを䜿甚する必芁がありたす䞋図を参照。 負荷の高いサむトにHTTP / 2たたはSPDYを実装する堎合、パフォヌマンスの前埌を枬定し、悪圱響が生じた堎合は倉曎をロヌルバックする必芁がありたす。



画像



泚HTTP / 2は単䞀の接続を䜿甚するため、NGINXの䞀郚の構成蚭定はより重芁になりたす。 output_buffers、proxy_buffers、ssl_buffer_sizeなどのディレクティブのパラメヌタヌの蚭定ずテストに特に泚意しおNGINX構成を確認するこずをお勧めしたす。 䞀般的な蚭定に関する泚意事項 、特定のTLSのヒント ここずここ 、およびTLSを䜿甚する堎合のNGINXのパフォヌマンスに関する蚘事に泚意する必芁がありたす。



泚HTTP / 2で暗号を䜿甚する堎合、次のこずに泚意する必芁がありたす。HTTP/ 2のRFCには、回避すべき暗号の長いリストがありたす。 暗号のリストを自分で構成する堎合、この堎合、 ssl_ciphersを蚭定し、 ssl_prefer_server_ciphersを有効にするこずを怜蚎しおから、ブラりザのすべおの䞀般的なバヌゞョンで適切な暗号をテストするこずをお勧めしたす。 人気のあるQualysのSSLサヌバヌテストブラりザヌのむンゞケヌタヌ2015幎11月珟圚 は、HTTP / 2ハンドシェむクのカりントには信頌性がないず考えられおいたす 。



HTTP / 1.x最適化の改蚂



これは驚くこずではありたせんが、HTTP / 1.xの最適化を削陀たたは倉曎するこずは、HTTP / 2を実装する䞊で最も創造的な郚分です。 考慮すべきいく぀かの問題がありたす。



倉曎を行う前に、圱響を受ける可胜性のある叀いブラりザのナヌザヌを考慮する必芁がありたす。 これを念頭に眮いお、HTTP / 1.xの最適化をキャンセルたたは修正するための3぀の䞻な戊略がありたす。





キャッシングにはいく぀かの機胜がありたす。 理論的には、キャッシングは倚くの小さなファむルに適甚されるず効果的に機胜したす。 ただし、この堎合、倚数のI / O操䜜が実行されたす。 したがっお、関連ファむルを結合するず、ワヌクフロヌずアプリケヌションのパフォヌマンスの䞡方に圹立ちたす。



フレンドリヌなHTTP / 2シャヌディングを衚瀺



シャヌディングはおそらく最も困難であるず同時に、おそらく最も成功したHTTP / 1.x最適化戊略です。 シャヌディングはHTTP / 1.xのパフォヌマンスを改善するために䜿甚できたすが、HTTP / 21぀の接続のみを䜿甚するの堎合、ほずんど無芖されたす。



HTTP / 2ず組み合わせたシャヌディングを䜿甚するには、次の2぀のこずを行う必芁がありたす。





詳现な情報はこちらをご芧ください 。



これらの条件䞋では、HTTP / 1.xでシャヌディングが発生したす-ドメむンが異なるため、ブラりザヌは远加の接続セットを䜜成できたす-個々のドメむンは1぀ず芋なされ、接続にアクセスできるため、HTTP / 2では発生したせんそれらのいずれかに。



おわりに



おそらく、TLSを䜿甚したHTTP / 2は、サむトのパフォヌマンスを向䞊させ、ナヌザヌが接続が安党であるこずを確認できるようにしたす。 さらに、HTTP / 2サポヌトの導入は、倚くの堎合、倚くの劎力を必芁ずしたせん。



䞊蚘のヒントは、最小限の劎力で最高のHTTP / 2パフォヌマンスを達成するのに圹立ち、残りの時間を高速で効率的で安党なアプリケヌションの構築に充おるこずができたす。



All Articles