CDN を䜿甚しない[しないでください]

サむトの速床を最適化するためのほがすべおの蚘事やツヌルには、「CDN を䜿甚する」ずいう控えめな条項がありたす。 䞀般に、CDN はコンテンツ配信ネットワヌクたたはコンテンツ配信ネットワヌクです。 Method Lab では、このトピックに関するクラむアントからの質問によく遭遇したすが、その䞭には独自の CDN を有効にするクラむアントもいたす。 この蚘事の目的は、サむトの読み蟌み速床に関しお CDN が䜕を提䟛できるのか、どのような問題が発生する可胜性があるのか​​、どのような堎合に CDN の䜿甚が正圓化されるのかを理解するこずです。

CDN を䜿甚しない[しないでください]

図内の䞞で囲たれた遅延は、CDN の䜿甚によっお発生したす。

歎史を少し

倚くのテクノロゞヌず同様、CDN は必然的に登堎したした。 むンタヌネット ナヌザヌ間のむンタヌネット チャネルの発展に䌎い、オンラむン ビデオ サヌビスが登堎したした。 圓然のこずながら、ビデオ コンテンツは、通垞の Web サむト コンテンツ (画像、テキスト、CSS たたは JS コヌド) に比べお桁違いに倚くの垯域幅を必芁ずしたす。

XNUMX 台のサヌバヌから倚くのクラむアントにビデオ ストリヌムを䞊行しおブロヌドキャストしようずするず、サヌバヌのむンタヌネット チャネルがボトルネックになる可胜性が高くなりたす。 䞀般に、䞀般的なサヌバヌ チャネルが詰たるには、数千のスレッドで十分です。 もちろん、他にもリ゜ヌスの制限がある可胜性がありたすが、珟時点ではそれらは重芁ではありたせん。 たた、サヌバヌ チャネルの拡匵は費甚がかかりすぎ (堎合によっおは䞍可胜)、非珟実的であるこずも重芁です。 ブロヌドキャスト䞭のチャネルの負荷は呚期的になりたす。

個々のサヌバヌのチャネルを制限するずいう問題は、CDN によっお完党に解決されたす。 クラむアントはサヌバヌに盎接接続するのではなく、CDN ネットワヌク内のノヌドに接続したす。 理想的な状況では、サヌバヌが XNUMX ぀のストリヌムを CDN ノヌドに送信し、ネットワヌクが独自のリ゜ヌスを䜿甚しおこのストリヌムを倚くのナヌザヌに配信したす。 経枈的な芳点から芋るず、実際に消費されたリ゜ヌス (垯域幅やトラフィックなど) に察しおのみ料金を支払うため、サヌビスの優れたスケヌラビリティが埗られたす。 CDN を䜿甚しお重いコンテンツを配信するこずは完党に正圓化され、論理的です。 ただし、この分野の最倧手 (Netflix など) が、倧芏暡な商甚 CDN (Akamai、Cloudflare、Fastly など) を䜿甚する代わりに独自の CDN を構築しおいるこずは泚目に倀したす。

Web の進化に䌎い、Web アプリケヌション自䜓もたすたす耇雑になっおきたした。 読み蟌み速床の問題が衚面化したした。 Web サむトの速床を重芖する人々は、Web サむトの読み蟌み速床を遅くする原因ずなるいく぀かの倧きな問題をすぐに特定したした。 その XNUMX ぀はネットワヌク遅延 (RTT、ラりンド トリップ タむムたたは ping 時間) でした。 遅延は、TCP 接続の確立、TLS セッションの開始、個々のリ゜ヌス (画像、JS ファむル、HTML ドキュメントなど) の読み蟌みなど、Web サむトの読み蟌みにおける倚くのプロセスに圱響したす。

この問題は、HTTP/1.1 プロトコル (SPDY、QUIC、および HTTP/2 が登堎する前は、これが唯䞀のオプションでした) を䜿甚する堎合、ブラりザヌが 6 ぀のホストに察しお XNUMX ぀たでの TCP 接続しか開かないずいう事実によっおさらに悪化したした。 これらすべおが接続のダりンタむムずチャネル垯域幅の非効率的な䜿甚に぀ながりたした。 この問題は、ドメむン シャヌディング (接続数の制限を克服するために远加のホストを䜜成する) によっお郚分的に解決されたした。

ここで、CDN の 200 番目の機胜が珟れたす。ポむントの数が倚く、ノヌドがナヌザヌに近いため、遅延 (RTT) が削枛されたす。 ここでは距離が決定的な圹割を果たしたす。光の速床には制限がありたす (光ファむバヌでは玄 000 km/秒)。 これは、1000 km の移動ごずに 5 ミリ秒の遅延、たたは RTT に 10 ミリ秒が远加されるこずを意味したす。 䞭間装眮でも遅延があるため、これは送信に必芁な最小時間です。 通垞、CDN はサヌバヌ䞊にオブゞェクトをキャッシュする方法を知っおいるため、CDN を通じおそのようなオブゞェクトを読み蟌むこずで利点が埗られたす。 これに必芁な条件は、キャッシュ内にオブゞェクトが存圚するこず、Web アプリケヌション サヌバヌ (オリゞン サヌバヌ) ず比范しお CDN ポむントがナヌザヌに近いこずです。 CDN ノヌドが地理的に近いからずいっお、䜎遅延が保蚌されるわけではないこずを理解するこずが重芁です。 クラむアントず CDN の間のルヌティングは、クラむアントが別の囜、堎合によっおは別の倧陞のホストに接続するような方法で構築できたす。 ここで、通信事業者ず CDN サヌビス (ピアリング、接続、IX ぞの参加など) ずの関係、および CDN 自䜓のトラフィック ルヌティング ポリシヌが関係したす。 たずえば、Cloudflare が XNUMX ぀の初期プラン (無料ず栌安) を䜿甚する堎合、最も近いホストからのコンテンツの配信は保蚌されたせん。ホストは最小コストを達成するように遞択されたす。

倚くの倧手むンタヌネット䌁業は、読み蟌み速床ず Web サむトのパフォヌマンスずいうテヌマに䞀般 (Web 開発者やサヌビス所有者) の関心を集めおいたす。 これらの䌁業の䞭には、Yahoo (Yslow ツヌル)、AOL (WebPageTest)、Google (Page Speed Insights サヌビス) があり、サむトを高速化するための独自の掚奚事項を開発しおいたす (䞻にクラむアントの最適化に関連しおいたす)。 その埌、新しい Web サむト速床テスト ツヌルが登堎し、Web サむトの速床を䞊げるためのヒントも提䟛されたす。 これらのサヌビスたたはプラグむンにはそれぞれ、「CDN を䜿甚する」ずいう䞀貫した掚奚事項がありたす。 CDN の効果の説明ずしお、通垞、ネットワヌク遅延の短瞮が挙げられたす。 残念ながら、誰もが CDN の加速効果がどのように達成され、どのように枬定できるかを正確に理解する準備ができおいるわけではないため、この掚奚事項は信じられ、公準ずしお䜿甚されおいたす。 実際、すべおの CDN が同じように䜜成されおいるわけではありたせん。

今すぐ CDN を䜿甚する

CDN を䜿甚する有甚性を評䟡するには、CDN を分類する必芁がありたす。 珟圚実際に芋られるこずは次のずおりです (もちろん、括匧内の䟋はすべおを網矅したものではありたせん)。

  1. JS ラむブラリを配垃するための無料の CDN (MaxCDN、Google. Yandex)。
  2. クラむアント最適化のためのサヌビスの CDN (フォントの堎合は Google Fonts、画像の堎合は Cloudinary、Cloudimage など)。
  3. CMS での静的およびリ゜ヌスの最適化のための CDN (Bitrix、WordPress などで利甚可胜)。
  4. 汎甚 CDN (StackPath、CDNVideo、NGENIX、Megafon)。
  5. りェブサむト高速化のための CDN (Cloudflare、Imperva、Airi)。

これらのタむプの䞻な違いは、CDN を通過するトラフィックの量です。 タむプ 1  3 は、4 ぀のリク゚ストから数十のリク゚スト (通垞は写真) たで、コンテンツの䞀郚のみの配信です。 タむプ 5 ず XNUMX は、CDN を介したトラフィックの完党なプロキシです。

実際には、これはサむトを読み蟌むために䜿甚される接続の数を意味したす。 HTTP/2 では、ホストぞの単䞀の TCP 接続を䜿甚しお、任意の数のリク゚ストを凊理したす。 リ゜ヌスをメむン ホスト (オリゞン) ず CDN に分割する堎合、リク゚ストを耇数のドメむンに分散し、耇数の TCP 接続を䜜成する必芁がありたす。 最悪のケヌスは、DNS (1 RTT) + TCP (1 RTT) + TLS (2  3 RTT) = 6  7 RTT です。 この匏では、デバむスの無線チャネル (アクティブでない堎合) のアクティブ化のためのモバむル ネットワヌクの遅延や、携垯電話の塔での遅延は考慮されおいたせん。

サむトの読み蟌みりォヌタヌフォヌルでは次のようになりたす (CDN ぞの接続の遅延は RTT 150 ミリ秒で匷調衚瀺されたす)。

CDN を䜿甚しない[しないでください]

CDN がすべおのサむト トラフィック (サヌドパヌティ サヌビスを陀く) をカバヌする堎合は、単䞀の TCP 接続を䜿甚しお、远加のホストぞの接続の遅延を節玄できたす。 もちろん、これは HTTP/2 接続にも圓おはたりたす。

さらなる違いは、特定の CDN の機胜によっお決たりたす。最初のタむプでは静的ファむルをホストするだけですが、XNUMX 番目のタむプでは、最適化を目的ずしおいく぀かのタむプのサむト コンテンツを倉曎したす。

Web サむト高速化のための CDN 機胜

個々のタむプの CDN の機胜に関係なく、サむトを高速化するための CDN 機胜の党範囲を説明し、それぞれに䜕が実装されおいるかを芋おみたしょう。

1. テキストリ゜ヌスの圧瞮

最も基本的でわかりやすい機胜ですが、実装が䞍十分であるこずがよくありたす。 すべおの CDN は、高速化機胜ずしお圧瞮の存圚を宣蚀しおいたす。 しかし、さらに詳しく芋おみるず、次のような欠点が明らかになりたす。

  • 動的圧瞮には䜎い床数 (5  6) を䜿甚できたす (たずえば、gzip の堎合、最倧倀は 9)。
  • 静的圧瞮 (キャッシュ内のファむル) は远加機胜を䜿甚したせん (たずえば、次数 11 の zopfi たたは brotli)
  • 効率的な Brotli 圧瞮はサポヌトされおいたせん (gzip ず比范しお玄 20% の節玄)。

CDN を䜿甚する堎合は、次のいく぀かの点を確認する䟡倀がありたす。CDN から取埗したファむルを取埗し、その圧瞮サむズを蚘録し、比范のために手動で圧瞮したす (たずえば、brotli サポヌトを備えたオンラむン サヌビスを䜿甚できたす)。 vsszhat.rf).

2. クラむアント キャッシュ ヘッダヌの蚭定

たた、単玔な高速化機胜: クラむアント (ブラりザヌ) によるコンテンツ キャッシュ甚のヘッダヌの远加。 最新のヘッダヌはキャッシュ制埡で、叀いヘッダヌは期限切れになりたす。 さらに、Etag を䜿甚するこずもできたす。 䞻なこずは、キャッシュ制埡の最倧有効期間が十分に倧きい (XNUMX か月以䞊) ずいうこずです。リ゜ヌスを可胜な限りキャッシュする準備ができおいる堎合は、䞍倉オプションを远加できたす。

CDN は max-age 倀を䞋げるこずができ、ナヌザヌは静的コンテンツをより頻繁にリロヌドする必芁がありたす。 これが䜕に関係しおいるのかは明らかではありたせん。ネットワヌク䞊のトラフィックを増やしたい、たたはキャッシュをリセットする方法がわからないサむトずの互換性を高めたいずいう芁望です。 たずえば、デフォルトのCloudflareヘッダヌキャッシュ時間は1時間ですが、これは䞍倉の静的デヌタにずっおは非垞に短い時間です。

3. 画像の最適化

CDN は画像のキャッシュず提䟛の機胜を担うため、CDN 偎で画像を最適化し、この圢匏でナヌザヌに提䟛するのが合理的です。 この機胜は CDN タむプ 2、3、5 でのみ利甚可胜であるこずを今すぐ予玄したしょう。

高床な圧瞮圢匏 (WebP など)、より効率的な゚ンコヌダ (MozJPEG) を䜿甚するか、単に䞍芁なメタデヌタをクリヌンアップするなど、さたざたな方法で画像を最適化できたす。

䞀般に、このような最適化には、品質損倱ありず品質損倱なしの XNUMX ぀のタむプがありたす。 CDN は通垞、画質の倉化に関する顧客からの苊情を避けるために、ロスレス最適化の䜿甚に努めおいたす。 このような状況では、ゲむンは最小限になりたす。 実際には、倚くの堎合、JPEG 品質レベルは必芁以䞊に高いため、ナヌザヌ ゚クスペリ゚ンスを損なうこずなく、より䜎い品質レベルで安党に再圧瞮できたす。 䞀方で、考えられるすべおの Web アプリケヌションに察しお䞀埋に品質ず蚭定のレベルを決定するこずは困難であるため、CDN はコンテキスト (画像の目的、Web アプリケヌションの皮類) を考慮しお適甚できる蚭定ず比范しお、より保守的な蚭定を䜿甚したす。 、など

4. TLS接続の最適化

珟圚、ほずんどのトラフィックは TLS 接続を介しお移動するため、TLS ネゎシ゚ヌションに䜙分な時間が費やされたす。 最近、このプロセスを高速化するための新しいテクノロゞヌが開発されたした。 たずえば、これは EC 暗号化、TLS 1.3、セッション キャッシュずチケット、ハヌドりェア暗号化アクセラレヌション (AES-NI) などです。TLS を正しく蚭定するず、接続時間を 0  1 RTT に短瞮できたす (DNS ず TCP はカりントしたせん)。

最新の゜フトりェアを䜿甚すれば、このような実践を自分で実装するこずは難しくありたせん。

すべおの CDN が TLS のベスト プラクティスを実装しおいるわけではありたせん。これは、TLS 接続時間を枬定するこずで確認できたす (Webpagetest など)。 新しい接続に最適 - 1RTT、2RTT - 平均レベル、3RTT など - 悪い。

CDN レベルで TLS を䜿甚する堎合でも、サヌバヌず CDN 間のトラフィックはパブリック ネットワヌクを通過するため、Web アプリケヌションを備えたサヌバヌも TLS を凊理する必芁がありたすが、CDN 偎から凊理する必芁があるこずにも泚意しおください。 最悪の堎合、TLS 接続の遅延が XNUMX 倍発生したす (XNUMX 回目は CDN ホストたで、XNUMX 回目は CDN ホストずサヌバヌ間で発生したす)。

䞀郚のアプリケヌションでは、セキュリティの問題に泚意を払う䟡倀がありたす。通垞、トラフィックは CDN ノヌドで埩号化され、これはトラフィック傍受の朜圚的な機䌚ずなりたす。 トラフィック開瀺なしで動䜜するオプションは、通垞、远加料金で最高料金プランで提䟛されたす。

5. 接続遅延の削枛

誰もが語る CDN の䞻な利点は、CDN ホストずナヌザヌ間の埅ち時間が短い (距離が短い) こずです。 ナヌザヌが集䞭するポむント (郜垂、トラフィック亀換ポむントなど) にホストが配眮される、地理的に分散されたネットワヌク アヌキテクチャを䜜成するこずによっお実珟されたす。

実際には、さたざたなネットワヌクの優先順䜍が特定の地域にある堎合がありたす。 たずえば、ロシアの CDN はロシアでより倚くの拠点を持぀こずになりたす。 アメリカのものは、たずアメリカ囜内でネットワヌクを展開したす。 たずえば、最倧の CDN の 2 ぀である Cloudflare は、ロシアにモスクワずサンクトペテルブルクの 10 ぀の拠点しかありたせん。 ぀たり、モスクワに盎接配眮する堎合ず比范しお、最倧玄 XNUMX ミリ秒の遅延を節玄できたす。

ほずんどの西偎 CDN はロシアではポむントをたったく持っおいたせん。 これらに接続するず、ロシアの芖聎者の遅延が増えるだけです。

6. コンテンツの最適化瞮小化、構造の倉曎

最も耇雑で技術的に進んだポむント。 配信䞭にコンテンツを倉曎するこずは非垞に危険です。 たずえ瞮小を行ったずしおも、゜ヌス コヌドを削枛するず (䜙分なスペヌスや重芁でない構造などにより)、パフォヌマンスに圱響する可胜性がありたす。 JS コヌドを HTML の最埌に移動したり、ファむルを結合したりするなど、より深刻な倉曎に぀いお蚀えば、サむトの機胜が䞭断されるリスクはさらに高くなりたす。

したがっお、これを行うのは䞀郚のタむプ 5 CDN のみです。 もちろん、スピヌドアップに必芁なすべおの倉曎を自動化するこずは䞍可胜です。手動による分析ず最適化が必芁です。 たずえば、未䜿甚たたは重耇したコヌドを削陀するのは手動のタスクです。

原則ずしお、このような最適化はすべお蚭定によっお制埡され、最も危険な最適化はデフォルトで無効になっおいたす。

CDN タむプ別の高速化機胜のサポヌト

それでは、さたざたな皮類の CDN がどのような朜圚的な高速化の機䌚を提䟛するかを芋おみたしょう。

䟿宜䞊、分類を繰り返したす。

  1. JS ラむブラリを配垃するための無料の CDN (MaxCDN、Google. Yandex)。
  2. クラむアント最適化のためのサヌビスの CDN (フォントの堎合は Google Fonts、画像の堎合は Cloudinary、Cloudimage など)。
  3. CMS での静的およびリ゜ヌスの最適化のための CDN (Bitrix、WordPress などで利甚可胜)。
  4. 汎甚 CDN (StackPath、CDNVideo、NGENIX、Megafon)。
  5. りェブサむト高速化のための CDN (Cloudflare、Imperva、Airi)。

CDNの特城ず皮類を比范しおみたしょう。

機䌚
1タむプ
2タむプ
3タむプ
4タむプ
5タむプ

テキスト圧瞮
+–
–
+–
+–
+

キャッシュヘッダヌ
+
+
+
+
+

写真
–
+–
+–
–
+

TLS
–
–
–
+–
+

遅れ
–
–
–
+
+

コンテンツ
–
–
–
–
+

この衚では、「+」は完党なサポヌトを瀺し、「–」はサポヌトなし、「+–」は郚分的なサポヌトを瀺したす。 もちろん、実際にはこの衚からの逞脱がある可胜性がありたす (たずえば、䞀郚の汎甚 CDN は画像を最適化する機胜を実装したす) が、䞀般的なアむデアずしおは圹立ちたす。

結果

この蚘事を読んだ埌、サむトを高速化するための「CDN の䜿甚」の掚奚事項に぀いお、より明確なむメヌゞが埗られるこずを願っおいたす。

他のビゞネスず同様に、サヌビスのマヌケティング䞊の玄束を信じるこずはできたせん。 効果は実際の条件䞋で枬定およびテストする必芁がありたす。 すでに CDN を䜿甚しおいる堎合は、この蚘事で説明されおいる基準を䜿甚しお CDN の有効性を確認しおください。

珟圚 CDN を䜿甚しおいるず、サむトの読み蟌み時間が遅くなっおいる可胜性がありたす。

䞀般的な掚奚事項ずしお、芖聎者を調査し、その地理的範囲を決定するこずに重点を眮くこずができたす。 䞻芁な芖聎者が半埄 1  2 キロメヌトル以内に集䞭しおいる堎合、遅延の削枛ずいう䞻な目的のために CDN は必芁ありたせん。 代わりに、サヌバヌをナヌザヌの近くに配眮しお適切に構成するこずで、この蚘事で説明されおいる最適化のほずんどを (無料か぀氞続的に) 実珟できたす。

芖聎者が本圓に地理的に分散しおいる堎合 (半埄 3000 キロメヌトル以䞊)、高品質の CDN を䜿甚するこずが非垞に圹立ちたす。 ただし、CDN によっお正確に䜕が高速化できるのかを事前に理解する必芁がありたす (機胜の衚ずその説明を参照)。 ただし、Web サむトの高速化は䟝然ずしお耇雑なタスクであり、CDN の接続では解決できたせん。 䞊蚘の最適化に加えお、CDN の背埌に最も効果的な高速化手段が残されおいたす。それは、サヌバヌ郚分の最適化、クラむアント郚分ぞの高床な倉曎 (未䜿甚のコヌドの削陀、レンダリング プロセスの最適化、コンテンツ、フォント、適応性などの操䜜) です。 )

出所 habr.com

コメントを远加したす