In praktisch jedem Artikel oder Tool zur Optimierung der Website-Geschwindigkeit gibt es einen bescheidenen Punkt "verwenden Sie CDN". Im Grunde ist ein CDN â ein Content Delivery Network ОлО ŃĐ”ŃŃ ĐŽĐŸŃŃаĐČĐșĐž ĐșĐŸĐœŃĐ”ĐœŃа. In der Firma "ĐĐ”ŃĐŸĐŽ Đаб" sehen wir hĂ€ufig Anfragen von Kunden zu diesem Thema, einige aktivieren eigenstĂ€ndig CDN. Ziel dieses Artikels ist es, zu klĂ€ren, was CDN aus Sicht der Ladegeschwindigkeit einer Website leisten kann, welche Probleme auftreten können und in welchen FĂ€llen die Nutzung von CDN gerechtfertigt ist.
![[Nicht] verwenden Sie CDN](/wp-content/uploads/2019/10/6f32a7973856989f2adac4171a6ef9dd.jpg)
Die im Bild markierten Verzögerungen sind auf die Verwendung von CDN zurĂŒckzufĂŒhren.
Ein wenig Geschichte
Wie viele Technologien entstand das CDN aus einer Notwendigkeit. Mit der Entwicklung der InternetkanĂ€le der User entstanden Online-Video-Services. NatĂŒrlich erfordert Video-Content deutlich mehr Bandbreite im Vergleich zu herkömmlichem Website-Content (Bilder, Text und CSS oder JS-Code).
Bei dem Versuch, einen Video-Stream gleichzeitig an mehrere Kunden von einem Server aus zu ĂŒbertragen, wird das enge Glied wahrscheinlich der Internetkanal des Servers sein. In der Regel genĂŒgen einige Tausend Streams, um einen typischen Server-Kanal auszulasten. NatĂŒrlich kann es auch andere RessourcenbeschrĂ€nkungen geben, aber diese sind momentan nicht wichtig. Es ist auĂerdem wichtig zu beachten, dass es zu teuer (und manchmal unmöglich) ist, den Server-Kanal zu erweitern, und es ist auch unwirtschaftlich. Die Last auf dem Kanal bei Ăbertragungen wird zyklischer Natur sein.
Das Problem der EinschrĂ€nkung des Kanals eines einzelnen Servers wird durch CDN hervorragend gelöst. Die Kunden verbinden sich nicht direkt mit dem Server, sondern mit Knoten des CDN-Netzwerks. In der idealen Situation gibt der Server einen Stream an den CDN-Knoten weiter, und danach nutzt das Netzwerk seine eigenen Ressourcen, um diesen Stream an viele Benutzer zu liefern. Aus wirtschaftlicher Sicht zahlen wir nur fĂŒr die tatsĂ€chlich verbrauchten Ressourcen (das kann Bandbreite oder Traffic sein) und erhalten eine ausgezeichnete Skalierbarkeit unseres Dienstes. Die Verwendung von CDN zur Auslieferung von schwerem Content ist vollkommen gerechtfertigt und logisch. Es lohnt sich jedoch zu beachten, dass die gröĂten Akteure in diesem Bereich (z. B. Netflix) ihre eigenen CDNs aufbauen, anstatt groĂe kommerzielle CDNs (Akamai, Cloudflare, Fastly usw.) zu nutzen.
Mit der Entwicklung des Webs wurden auch die Webanwendungen komplexer und schwerer. Das Problem der Ladegeschwindigkeit rĂŒckte in den Vordergrund. Geschwindigkeits-Enthusiasten fanden schnell mehrere Hauptprobleme, die zu langsamen Ladezeiten fĂŒhrten. Eines davon waren Verzögerungen im Netzwerk (RTT â Round Trip Time oder Ping-Zeit). Verzögerungen beeinflussen viele Prozesse beim Laden einer Webseite: die Einrichtung der TCP-Verbindung, den Start der TLS-Session und das Laden jeder einzelnen Ressource (Bilder, JS-Dateien, HTML-Dokumente usw.).
Das Problem wurde dadurch verschĂ€rft, dass beim Einsatz des Protokolls HTTP/1.1 (bis zur EinfĂŒhrung von SPDY, QUIC und HTTP/2 die einzige Option) Browser nicht mehr als 6 TCP-Verbindungen zu einem Host öffnen. Das fĂŒhrte zu Leerlaufzeiten fĂŒr die Verbindungen und einer ineffizienten Nutzung der Bandbreite. Teilweise wurde das Problem durch Domain-Sharding gelöst â die Schaffung zusĂ€tzlicher Hosts, um die Verbindungslimits zu umgehen.
Hier kommt die zweite FĂ€higkeit von CDNs ins Spiel â die Verringerung von Verzögerungen (RTT) durch die Vielzahl an Punkten und die NĂ€he der Knoten zum Nutzer. Die Entfernung spielt hierbei eine entscheidende Rolle: Die Lichtgeschwindigkeit ist begrenzt (ca. 200.000 km/s in Glasfasern). Das bedeutet, dass jede 1000 km Strecke 5 ms Verzögerung oder 10 ms in der RTT hinzufĂŒgt. Dies sind die minimalen Zeitverluste fĂŒr die Ăbertragung, da es noch Verzögerungen durch Zwischenhardware gibt. Da CDNs in der Regel in der Lage sind, Objekte auf ihren Servern zu cachen, können wir durch das Laden solcher Objekte ĂŒber ein CDN profitieren. Die Voraussetzungen dafĂŒr sind: das Objekt muss im Cache vorhanden sein und die NĂ€he des CDN-Punkts zum Nutzer im Vergleich zum Server der Webanwendung (Origin-Server). Es ist wichtig zu verstehen: Die geografische NĂ€he eines CDN-Knotens garantiert keine niedrigen Verzögerungen. Die Routing-Strategien zwischen dem Kunden und dem CDN können so gestaltet sein, dass der Kunde mit einem Host in einem anderen Land oder möglicherweise sogar auf einem anderen Kontinent verbunden wird. Hier kommen die Beziehungen zwischen den Telekombetreibern und dem CDN-Service (Peering, VerfĂŒgbarkeit von Interconnects, Teilnahme an IX usw.) sowie die Routing-Politik des CDNs ins Spiel. Zum Beispiel garantiert Cloudflare bei der Nutzung der beiden EinstiegsplĂ€ne (kostenlos und gĂŒnstig) nicht, dass Inhalte vom nĂ€chstgelegenen Knoten bereitgestellt werden â die Wahl des Hosts erfolgt zur Minimierung der Kosten.
Viele fĂŒhrende Internetunternehmen ziehen das Interesse der Ăffentlichkeit (Webentwickler und Dienstanbieter) an den Themen Ladegeschwindigkeit und FunktionalitĂ€t von Websites an. Zu diesen Unternehmen gehören Yahoo (Tool Yslow), AOL (WebPageTest) und Google (Dienst Page Speed Insights), die ihre Empfehlungen zur Beschleunigung von Websites entwickeln (in erster Linie beziehen sie sich auf die Client-Optimierung). SpĂ€ter tauchen neue Tools zum Testen der Ladegeschwindigkeit von Websites auf, die ebenfalls RatschlĂ€ge zur Geschwindigkeitssteigerung geben. In jedem dieser Dienste oder Plugins gibt es die unverĂ€nderliche Empfehlung âVerwenden Sie ein CDNâ. Als ErklĂ€rung fĂŒr die Wirkung eines CDNs wird in der Regel eine Reduzierung der Netzverzögerungen angefĂŒhrt. Leider sind nicht alle bereit, sich damit auseinanderzusetzen, wie genau der Beschleunigungseffekt eines CDNs erreicht wird und wie er gemessen werden kann, weshalb die Empfehlung als gegeben hingenommen und als Postulat verwendet wird. TatsĂ€chlich sind nicht alle CDNs gleichermaĂen nĂŒtzlich.
Die Verwendung von CDNs heute
Um den Nutzen von CDNs zu bewerten, mĂŒssen sie klassifiziert werden. Was kann man heutzutage aus der Praxis entnehmen (die Beispiele in Klammern sind natĂŒrlich nicht abschlieĂend):
- Kostenlose CDNs fĂŒr die Bereitstellung von JS-Bibliotheken (MaxCDN, Google, Yandex).
- CDNs von Dienstanbietern zur Client-Optimierung (zum Beispiel Google Fonts fĂŒr Schriftarten, Cloudinary, Cloudimage fĂŒr Bilder).
- CDNs fĂŒr statische Inhalte und Ressourcenoptimierung in CMS (verfĂŒgbar in Bitrix, WordPress und anderen).
- Allzweck-CDNs (StackPath, CDNVideo, NGENIX, Megafon).
- CDNs zur Beschleunigung von Websites (Cloudflare, Imperva, Airi).
Der entscheidende Unterschied zwischen diesen Typen liegt darin, welcher Teil des Traffics ĂŒber das CDN geleitet wird. Die Typen 1-3 liefern nur einen Teil des Inhalts: von einer Anfrage bis zu mehreren Dutzend (gewöhnlich Bilder). Die Typen 4 und 5 bedeuten ein vollstĂ€ndiges Proxying des Traffics ĂŒber das CDN.
In der Praxis bedeutet dies die Anzahl der Verbindungen, die fĂŒr das Laden der Website verwendet werden. Bei Verwendung von HTTP/2 nutzen wir eine einzige TCP-Verbindung zum Host, um eine beliebige Anzahl von Anfragen zu verarbeiten. Wenn wir Ressourcen zwischen dem Haupt-Host (Origin) und dem CDN aufteilen, mĂŒssen die Anfragen ĂŒber mehrere Domains verteilt werden, und es mĂŒssen mehrere TCP-Verbindungen erstellt werden. Im schlimmsten Fall ergibt sich folgende Rechnung: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. In dieser Formel sind die Verzögerungen in mobilen Netzwerken zur Aktivierung des Funkkanals des GerĂ€ts (wenn er nicht aktiv war) und die Verzögerungen an der Mobilfunkantenne nicht berĂŒcksichtigt.
So sieht es auf dem Ladebildschirm der Website aus (Verzögerungen beim Anschluss an das CDN bei RTT 150 ms sind hervorgehoben):
![[Nicht] verwenden Sie CDN](/wp-content/uploads/2019/10/d0aafcc5aa4dff6c8a97307f39c8c025.jpg)
Wenn das CDN den gesamten Traffic der Website abdeckt (auĂer von Drittanbietern), können wir eine einzige TCP-Verbindung nutzen, was Verzögerungen beim Anschluss an zusĂ€tzliche Hosts spart. NatĂŒrlich betrifft das HTTP/2-Verbindungen.
Die weiteren Unterschiede hĂ€ngen von der FunktionalitĂ€t des jeweiligen CDNs ab â fĂŒr den ersten Typ handelt es sich lediglich um Hosting eine statische Datei, beim fĂŒnften Typ geht es um die Anpassung mehrerer Arten von Inhalten auf der Website zur Optimierung.
Die Möglichkeiten des CDNs zur Beschleunigung der Website
Lassen Sie uns das gesamte Spektrum der Möglichkeiten des CDNs zur Beschleunigung von Websites beschreiben, ohne uns auf die FunktionalitĂ€t einzelner CDN-Typen zu konzentrieren, und anschlieĂend sehen, was davon in jedem von ihnen implementiert ist.
1. Kompression von Textressourcen
Die grundlegende und verstÀndliche Möglichkeit, die jedoch hÀufig schlecht umgesetzt ist. Alle CDNs deklarieren die Kompression als ihr Feature zur Beschleunigung. Bei genauerer Betrachtung ergeben sich jedoch MÀngel:
- es können niedrige Stufen fĂŒr die dynamische Kompression verwendet werden â 5-6 (zum Beispiel ist fĂŒr gzip das Maximum â 9);
- bei der statischen Kompression (Dateien im Cache) werden keine zusÀtzlichen Möglichkeiten genutzt (z. B. zopfi oder brotli mit Stufe 11);
- es gibt keine UnterstĂŒtzung fĂŒr eine effektive brotli-Kompression (Einsparung von etwa 20 % im Vergleich zu gzip).
Wenn Sie ein CDN verwenden, sollten Sie diese Punkte ĂŒberprĂŒfen: Nehmen Sie eine Datei, die vom CDN gekommen ist, notieren Sie sich ihre GröĂe im komprimierten Format und komprimieren Sie sie manuell zur Vergleichszwecken (Sie können einen Online-Service zur UnterstĂŒtzung von brotli verwenden, z. B. ).
2. Festlegung von Client-Caching-Headern
Eine ebenfalls einfache Funktion zur Beschleunigung: Setzen Sie Header fĂŒr das Caching von Inhalten durch den Client (Browser). Die relevanteste Header ist cache-control, und der veraltete â expires. AuĂerdem kann Etag verwendet werden. Wichtig ist, dass max-age bei cache-control ausreichend groĂ ist (mindestens einen Monat oder mehr). Wenn Sie die Ressource maximales Caching auferlegen wollen, können Sie die Option immutable hinzufĂŒgen.
CDN können den max-age-Wert herabsetzen, was dazu fĂŒhrt, dass der Benutzer statische Inhalte hĂ€ufiger erneut laden muss. Unklar ist, ob dies mit dem Wunsch zusammenhĂ€ngt, den Datenverkehr im Netzwerk zu erhöhen oder die KompatibilitĂ€t mit Websites zu verbessern, die den Cache nicht zurĂŒcksetzen können. Zum Beispiel betrĂ€gt der Standardwert fĂŒr die Cache-Zeit in den Cloudflare-Headern 1 Stunde, was fĂŒr unverĂ€nderliche statische Inhalte sehr wenig ist.
3. Bilderoptimierung
Da CDN die Funktionen der Caching und Bereitstellung von Bildern ĂŒbernehmen, ist es logisch, sie auf der Seite des CDN zu optimieren und in dieser Form den Nutzern bereitzustellen. Vorab sei gesagt, dass diese Möglichkeit nur fĂŒr die CDN-Typen 2, 3 und 5 verfĂŒgbar ist.
Bilder können auf verschiedene Weise optimiert werden: durch die Verwendung fortschrittlicher Komprimierungsformate (zum Beispiel WebP), effizientere Encoder (MozJPEG) oder einfach durch das Entfernen ĂŒberflĂŒssiger Metadaten.
Im Allgemeinen gibt es zwei Arten solcher Optimierungen: mit QualitĂ€tsverlust und ohne QualitĂ€tsverlust. CDN streben normalerweise an, die verlustfreie Optimierung zu verwenden, um mögliche Kundenbeschwerden ĂŒber die VerĂ€nderung der BildqualitĂ€t zu vermeiden. Unter diesen Bedingungen wird der Gewinn minimal sein. In der RealitĂ€t liegt das QualitĂ€tsniveau von JPEG oft weit ĂŒber dem erforderlichen, und man kann ruhig eine Rekodierung mit einem niedrigeren QualitĂ€tswert durchfĂŒhren, ohne die Wahrnehmung durch die Nutzer zu beeintrĂ€chtigen. Andererseits ist es schwierig, das QualitĂ€tsniveau und die Einstellungen universell fĂŒr alle möglichen Webanwendungen festzulegen, daher verwenden CDN konservativere Einstellungen im Vergleich zu denen, die im Kontext anwendbar sind (Verwendung der Bilder, Art der Webanwendung usw.).
4. Optimierung der TLS-Verbindung
Der GroĂteil des Datenverkehrs wird heute ĂŒber TLS-Verbindungen ĂŒbertragen, was bedeutet, dass wir zusĂ€tzliche Zeit fĂŒr die TLS-Aushandlung aufwenden. In letzter Zeit wurden neue Technologien entwickelt, um diesen Prozess zu beschleunigen. Dazu gehören EC-Kryptografie, TLS 1.3, Sitzungs-Caching und Sitzungs-Tickets, hardwarebeschleunigte VerschlĂŒsselung (AES-NI) usw. Eine korrekte TLS-Konfiguration kann die Verbindungszeit auf 0-1 RTT (ohne BerĂŒcksichtigung von DNS und TCP) reduzieren.
Mit moderner Software ist es nicht schwer, solche Praktiken in den eigenen Einrichtungen zu implementieren.
Nicht alle CDNs setzen die besten Praktiken fĂŒr TLS um; dies kann durch die Messung der TLS-Verbindungszeit (zum Beispiel mit Webpagetest) ĂŒberprĂŒft werden. Idealerweise sollte eine neue Verbindung 1 RTT haben, 2 RTT sind ein mittleres Niveau, 3 RTT und mehr sind schlecht.
Es muss auch beachtet werden, dass selbst bei der Verwendung von TLS auf der Ebene des CDN der Server mit unserer Webanwendung ebenfalls TLS verarbeiten muss, und zwar vom CDN aus, da der Verkehr zwischen dem Server und dem CDN ĂŒber ein öffentliches Netzwerk lĂ€uft. Im schlimmsten Fall erhalten wir doppelte TLS-Verbindungslatenzen (die erste zum CDN-Host, die zweite zwischen diesem und unserem Server).
FĂŒr einige Anwendungen sollten Sicherheitsfragen berĂŒcksichtigt werden: Normalerweise wird der Verkehr an den Knotenpunkten des CDNs entschlĂŒsselt, was eine potenzielle Möglichkeit fĂŒr den Datenverkehrsabbau darstellt. Eine Option, die keinen Offenlegungsverkehr vorsieht, wird normalerweise in den besten Tarifen gegen eine zusĂ€tzliche GebĂŒhr angeboten.
5. Reduzierung der Verbindungslatenzen
Der Hauptvorteil eines CDNs, ĂŒber den alle reden: geringe Latenzen (geringere Entfernungen) zwischen dem CDN-Host und dem Benutzer. Dies wird durch den Aufbau einer geografisch verteilten Netzwerkarchitektur erreicht, in der die Hosts an Orten mit hoher Benutzerkonzentration (StĂ€dte, Internet-Austauschpunkte usw.) platziert sind.
In der Praxis können die PrioritĂ€ten fĂŒr verschiedene Netzwerke in bestimmten Regionen variieren. Zum Beispiel werden russische CDNs mehr PrĂ€senzpunkte in Russland haben. Amerikanische CDNs werden sich hauptsĂ€chlich darauf konzentrieren, ihr Netzwerk in den USA auszubauen. Zum Beispiel hat einer der gröĂten CDNs, Cloudflare, nur zwei Punkte in Russland â Moskau und St. Petersburg. Das bedeutet, dass wir maximal etwa 10 ms Latenz im Vergleich zum Direkt-Hosting in Moskau einsparen können.
Die meisten westlichen CDNs haben ĂŒberhaupt keine Punkte in Russland. Wenn Sie sich mit ihnen verbinden, können Sie die Latenz fĂŒr Ihr russisches Publikum nur erhöhen.
6. Optimierung des Inhalts (Minifizierung, strukturelle Ănderungen)
Der komplexeste und technologisch anspruchsvollste Punkt. Die Ănderung von Inhalten wĂ€hrend der Ăbertragung kann sehr riskant sein. Selbst wenn wir von Minifizierung sprechen: Die Reduzierung des Quellcodes (durch ĂŒberflĂŒssige Leerzeichen, unwichtige Strukturen usw.) kann dessen FunktionalitĂ€t beeintrĂ€chtigen. Bei ernsthafteren Ănderungen â wie dem Verschieben von JS-Code ans Ende des HTML, dem Zusammenfassen von Dateien und Ă€hnlichem â ist das Risiko, die FunktionalitĂ€t der Website zu beeintrĂ€chtigen, noch gröĂer.
Deshalb beschĂ€ftigen sich nur einige CDNs vom Typ 5 damit. NatĂŒrlich kann man nicht alle notwendigen Ănderungen zur Beschleunigung automatisieren â eine manuelle Analyse und Optimierung sind erforderlich. Zum Beispiel gehört das Entfernen von nicht verwendeten oder doppelten Code zu den manuellen Aufgaben.
In der Regel werden alle solchen Optimierungen ĂŒber Einstellungen gesteuert, und die gefĂ€hrlichsten sind standardmĂ€Ăig deaktiviert.
UnterstĂŒtzung fĂŒr Beschleunigungsfunktionen nach CDN-Typen
Schauen wir uns also an, welche potenziellen Beschleunigungsmöglichkeiten verschiedene CDN-Typen bieten.
Zur Ăbersicht wiederholen wir die Klassifikation.
- Kostenlose CDNs fĂŒr die Bereitstellung von JS-Bibliotheken (MaxCDN, Google, Yandex).
- CDNs von Dienstanbietern zur Client-Optimierung (zum Beispiel Google Fonts fĂŒr Schriftarten, Cloudinary, Cloudimage fĂŒr Bilder).
- CDNs fĂŒr statische Inhalte und Ressourcenoptimierung in CMS (verfĂŒgbar in Bitrix, WordPress und anderen).
- Allzweck-CDNs (StackPath, CDNVideo, NGENIX, Megafon).
- CDNs zur Beschleunigung von Websites (Cloudflare, Imperva, Airi).
Jetzt vergleichen wir die Features und Typen von CDNs.
Die Möglichkeit
Typ 1
Typ 2
Typ 3
Typ 4
Typ 5
Textkompression
+â
â
+â
+â
+
Cache-Header
+
+
+
+
+
Bilder
â
+â
+â
â
+
TLS
â
â
â
+â
+
Latenzen
â
â
â
+
+
Inhalt
â
â
â
â
+
In dieser Tabelle wird â+â verwendet, um volle UnterstĂŒtzung anzuzeigen, âââ bedeutet keine UnterstĂŒtzung, â+ââ steht fĂŒr TeilunterstĂŒtzung. NatĂŒrlich sind Abweichungen von dieser Tabelle in der RealitĂ€t möglich (zum Beispiel kann ein universelles CDN Funktionen zur Bildoptimierung implementieren), aber sie ist fĂŒr einen allgemeinen Ăberblick nĂŒtzlich.
Ergebnisse
Ich hoffe, dass Sie nach dem Lesen dieses Artikels ein klareres Bild von der Empfehlung âverwenden Sie CDNâ zur Beschleunigung von Websites haben.
Wie bei allem darf man den Marketingversprechen eines Dienstes nicht glauben. Die Effekte mĂŒssen gemessen und unter realen Bedingungen ĂŒberprĂŒft werden. Wenn Sie bereits ein CDN verwenden, ĂŒberprĂŒfen Sie dessen Effizienz anhand der im Artikel beschriebenen Kriterien.
Es ist möglich, dass die Verwendung eines CDNs derzeit das Laden Ihrer Website verlangsamt.
Als allgemeine Empfehlung kann Folgendes festgehalten werden: Analysieren Sie Ihr Publikum und definieren Sie dessen geografische Rahmen. Wenn Ihr Hauptpublikum in einem Radius von 1.000 bis 2.000 Kilometern konzentriert ist, benötigen Sie kein CDN fĂŒr den ursprĂŒnglichen Zweck â die Verringerung der Latenzen. Stattdessen können Sie Ihren Server nĂ€her an den Nutzern platzieren und ihn entsprechend konfigurieren, wobei Sie die meisten in diesem Artikel beschriebenen Optimierungen (kostenlos und dauerhaft) erhalten.
Falls Ihr Publikum tatsĂ€chlich geografisch verteilt ist (Radius von mehr als 3000 Kilometern), wird die Verwendung eines hochwertigen CDN tatsĂ€chlich von Vorteil sein. Es ist jedoch wichtig, im Voraus zu verstehen, was genau Ihr CDN beschleunigen kann (siehe Tabelle mit Möglichkeiten und deren Beschreibung). Die Beschleunigung der Website bleibt trotzdem eine komplexe Aufgabe, die nicht allein durch die Anbindung an ein CDN gelöst werden kann. Abgesehen von den genannten Optimierungen bleiben die effektivsten BeschleunigungsmaĂnahmen auĂerhalb des CDNs: Optimierung der Serverseite, fortschrittliche Ănderungen an der Clientseite (Entfernung ungenutzten Codes, Optimierung des Renderprozesses, Arbeiten mit Inhalten, Schriftarten, ResponsivitĂ€t usw.)
Quelle: habr.com
