[Ne pas] utiliser CDN

Dans presque tous les articles ou outils pour optimiser la vitesse des sites, il y a un Ă©lĂ©ment modeste «utiliser CDN». En gĂ©nĂ©ral, un CDN est un rĂ©seau de diffusion de contenu. Chez Method Lab, nous rĂ©pondons souvent aux questions des clients sur ce sujet, dont certaines incluent des CDN par eux-mĂȘmes. Le but de cet article est de comprendre ce que le CDN peut donner en termes de vitesse de chargement du site, quels problĂšmes peuvent survenir et dans quels cas l'utilisation du CDN est justifiĂ©e.

image

Les retards dans l'image sont causés par l'utilisation de CDN.

Un peu d'histoire


Comme de nombreuses technologies, les CDN ont émergé au besoin. Avec le développement des canaux Internet pour les internautes, des services de vidéo en ligne sont apparus. Naturellement, le contenu vidéo nécessite une bande passante supérieure de plusieurs ordres de grandeur par rapport au contenu classique d'un site Web (images, texte et code CSS ou JS).

Si vous essayez de diffuser un flux vidĂ©o en parallĂšle sur plusieurs clients Ă  partir d'un mĂȘme serveur, le canal Internet du serveur deviendra trĂšs probablement un goulot d'Ă©tranglement. En rĂšgle gĂ©nĂ©rale, plusieurs milliers de flux sont suffisants pour obstruer un canal de serveur typique. Bien sĂ»r, il peut y avoir d'autres restrictions de ressources, mais maintenant elles ne sont plus importantes. Il est Ă©galement important que l'extension du canal du serveur soit trop coĂ»teuse (et parfois impossible), voire impossible. La charge sur la chaĂźne lors des diffusions sera cyclique.

Le problĂšme de limitation de canal d'un serveur sĂ©parĂ© est parfaitement rĂ©solu par CDN. Les clients ne se connectent pas directement au serveur, mais aux nƓuds du rĂ©seau CDN. Dans une situation idĂ©ale, le serveur donne un flux au CDN, puis le rĂ©seau utilise ses propres ressources pour fournir ce flux Ă  de nombreux utilisateurs. D'un point de vue Ă©conomique, nous ne payons que pour les ressources rĂ©ellement consommĂ©es (cela peut ĂȘtre de la bande passante ou du trafic) et nous obtenons une excellente Ă©volutivitĂ© de notre service. L'utilisation de CDN pour fournir du contenu lourd est parfaitement justifiĂ©e et logique. Bien qu'il soit intĂ©ressant de noter que les plus grands acteurs dans ce domaine (par exemple, Netflix) construisent leurs CDN au lieu d'utiliser de gros CDN commerciaux (Akamai, Cloudflare, Fastly, etc.)

À mesure que le Web Ă©volue, les applications Web elles-mĂȘmes deviennent plus complexes et plus lourdes. Le problĂšme de la vitesse de tĂ©lĂ©chargement est venu au premier plan. Les amateurs de vitesse du site ont rapidement repĂ©rĂ© plusieurs problĂšmes majeurs qui ont conduit Ă  un chargement lent du site. L'un d'eux Ă©tait la latence du rĂ©seau (RTT - temps aller-retour ou temps ping). Les retards affectent de nombreux processus de chargement d'un site: Ă©tablissement d'une connexion TCP, dĂ©marrage d'une session TLS, chargement de chaque ressource sĂ©parĂ©ment (images, fichier JS, document HTML, etc.)

Le problÚme était aggravé par le fait que lors de l'utilisation de la perforation HTTP / 1.1 (avant SPDY, QUIC et HTTP / 2 c'était la seule option), les navigateurs n'ouvraient pas plus de 6 connexions TCP à un hÎte. Tout cela a conduit à une connexion simple et à une utilisation inefficace de la bande passante du canal. Le problÚme a été partiellement résolu par le partage de domaine - la création d'hÎtes supplémentaires pour surmonter la limite du nombre de connexions.

Voici la deuxiĂšme capacitĂ© de rĂ©duction du dĂ©lai CDN (RTT) en raison du grand nombre de points et de la proximitĂ© des nƓuds Ă  l'utilisateur. La distance joue ici un rĂŽle dĂ©terminant: la vitesse de la lumiĂšre est limitĂ©e (environ 200 000 km / s en fibre optique). Cela signifie que chaque 1000 km de trajet ajoute 5 ms de retard ou 10 ms Ă  RTT. Il s'agit du temps de transmission minimum, car il y a encore des retards sur l'Ă©quipement intermĂ©diaire. Puisqu'un CDN peut gĂ©nĂ©ralement mettre en cache des objets sur ses serveurs, nous pouvons bĂ©nĂ©ficier du chargement de ces objets via un CDN. PrĂ©requis pour cela: la prĂ©sence d'un objet dans le cache, la proximitĂ© du point CDN Ă  l'utilisateur par rapport au serveur d'applications Web (serveur d'origine). Il est important de comprendre que la proximitĂ© gĂ©ographique du CDN ne garantit pas une faible latence. Le routage entre le client et le CDN peut ĂȘtre conçu de telle sorte que le client se connecte Ă  un hĂŽte dans un autre pays, et Ă©ventuellement sur un autre continent. Ici, les relations entre les opĂ©rateurs de tĂ©lĂ©communications et le service CDN (peering, prĂ©sence d'interfaces, participation Ă  IX, etc.) et la politique d'acheminement du trafic du CDN lui-mĂȘme entrent en vigueur. Par exemple, lors de l'utilisation de deux plans initiaux (gratuits et bon marchĂ©), Cloudflare ne garantit pas la livraison de contenu Ă  partir du site le plus proche - l'hĂŽte sera sĂ©lectionnĂ© pour atteindre le coĂ»t minimum.

De nombreuses sociĂ©tĂ©s Internet de premier plan ont suscitĂ© l'intĂ©rĂȘt du public (dĂ©veloppeurs Web et propriĂ©taires de services) en ce qui concerne la vitesse de tĂ©lĂ©chargement et les performances du site Web. Parmi ces entreprises, on compte Yahoo (outil Yslow), AOL (WebPageTest) et Google (service Page Speed ​​Insights), qui dĂ©veloppent leurs recommandations sur l'accĂ©lĂ©ration du site Web (principalement, elles concernent l'optimisation client). Plus rĂ©cemment, de nouveaux outils de test de vitesse de site arrivent, qui fournissent Ă©galement des conseils pour augmenter la vitesse du site. Dans chacun de ces services ou plugins, il existe une recommandation inchangĂ©e «Utiliser CDN». Pour expliquer l'effet du CDN, une rĂ©duction des retards rĂ©seau est gĂ©nĂ©ralement indiquĂ©e. Malheureusement, tout le monde n'est pas prĂȘt Ă  comprendre comment l'effet de l'accĂ©lĂ©ration du CDN est atteint et comment il peut ĂȘtre mesurĂ©.La recommandation est donc prise sur la foi et utilisĂ©e comme postulat. En fait, tous les CDN ne sont pas Ă©galement utiles.

Utiliser CDN aujourd'hui


Pour Ă©valuer l'utilitĂ© de l'utilisation des CDN, ils doivent ĂȘtre classĂ©s. Ce que l'on peut trouver maintenant dans la pratique (les exemples entre parenthĂšses ne sont certainement pas exhaustifs):

  1. CDN gratuits pour la distribution des bibliothĂšques JS (MaxCDN, Google. Yandex).
  2. Services CDN pour l'optimisation client (par exemple, Google Fonts pour les polices, Cloudinary, Cloudimage pour les images).
  3. CDN pour la statique et l'optimisation des ressources dans CMS (disponible dans Bitrix, Wordpress et autres).
  4. CDN à usage général (StackPath, CDNVideo, NGENIX, Megaphone).
  5. DNS pour l'accélération de sites Web (Cloudflare, Imperva, Airi).

La principale différence entre ces types est la suivante: quelle partie du trafic passe par le CDN. Les types 1 à 3 sont la livraison d'une partie seulement du contenu: d'une demande à plusieurs dizaines (généralement des images). Les types 4 et 5 sont un trafic proxy complet via le CDN.

En pratique, cela signifie le nombre de connexions utilisées pour télécharger le site. Lorsque vous utilisez HTTP / 2, nous utilisons une connexion TCP à l'hÎte pour traiter n'importe quel nombre de demandes. Si nous partageons des ressources sur l'hÎte principal (origine) et CDN, il est alors nécessaire de répartir les demandes sur plusieurs domaines et de créer plusieurs connexions TCP. Dans le pire des cas, c'est: DNS (1 RTT) + TCP (1 RTT) + TLS (2-3 RTT) = 6-7 RTT. Cette formule ne prend pas en compte les retards dans les réseaux mobiles lors de l'activation du canal radio de l'appareil (s'il n'était pas actif) et les retards sur la tour cellulaire.

Voici Ă  quoi cela ressemble sur le chargement en cascade du site (les retards sont mis en Ă©vidence pour la connexion Ă  un CDN avec RTT 150 ms):

image

Si le CDN couvre tout le trafic du site (à l'exception des services tiers), nous pouvons utiliser une seule connexion TCP, ce qui réduit les délais de connexion à des hÎtes supplémentaires. Bien sûr, cela s'applique aux connexions HTTP / 2.

D'autres différences sont déterminées par la fonctionnalité d'un CDN particulier - pour le premier type, il s'agit simplement d'héberger un fichier statique, pour le cinquiÚme, il modifie plusieurs types de contenu de site afin de l'optimiser.

Fonctionnalités d'accélération du site Web CDN


DĂ©crivons la gamme complĂšte des capacitĂ©s d'accĂ©lĂ©ration du site Web de CDN, sans tenir compte de la fonctionnalitĂ© des types individuels de CDN, puis voyons ce qui est mis en Ɠuvre dans chacun d'eux.

1. Compression des ressources textuelles


Cependant, la fonctionnalité la plus élémentaire et la plus compréhensible sont souvent mal implémentées. La présence de compression déclare tous les CDN comme leurs caractéristiques d'accélération. Mais si vous regardez plus en détail, les défauts sont clarifiés:

  • de faibles degrĂ©s peuvent ĂȘtre utilisĂ©s pour la compression dynamique - 5-6 (par exemple, pour gzip maximum - 9);
  • en compression statique (fichiers dans le cache) les fonctionnalitĂ©s supplĂ©mentaires ne sont pas utilisĂ©es (par exemple, zopfi ou brotli avec une puissance de 11)
  • aucun support pour la compression efficace de brotli (Ă©conomie d'environ 20% par rapport Ă  gzip).

Si vous utilisez CDN, vous devez vérifier ces quelques points: prenez le fichier provenant du CDN, corrigez sa taille compressée et compressez-le manuellement pour comparaison (vous pouvez utiliser un service en ligne avec le support de brotli, par exemple, compress.rf ).

2. DĂ©finition des en-tĂȘtes de mise en cache client


Aussi une fonctionnalitĂ© simple pour accĂ©lĂ©rer: mettre des en-tĂȘtes pour la mise en cache du contenu par le client (navigateur). L'en-tĂȘte de contrĂŽle de cache le plus rĂ©cent, expirĂ© est expirĂ©. De plus, Etag peut ĂȘtre utilisĂ©. L'essentiel est que l'Ăąge maximum du contrĂŽle du cache soit suffisamment grand (Ă  partir d'un mois ou plus), si vous ĂȘtes prĂȘt Ă  mettre en cache la ressource aussi dur que possible, vous pouvez ajouter l'option immuable.

Les CDN peuvent sous-estimer la valeur max-age, forçant l'utilisateur Ă  recharger la statique plus souvent. Quelle est la raison: avec le dĂ©sir d'augmenter le trafic sur le rĂ©seau ou d'augmenter la compatibilitĂ© avec les sites qui ne savent pas vider le cache - ce n'est pas clair. Par exemple, le temps de mise en cache par dĂ©faut pour les en-tĂȘtes Cloudflare est de 1 heure, ce qui est trĂšs petit pour les statiques immuables.

3. Optimisation d'image


Étant donnĂ© que le CDN prend en charge les fonctions de mise en cache et de tĂ©lĂ©chargement d'images, il serait logique de les optimiser du cĂŽtĂ© du CDN et de les donner aux utilisateurs sous cette forme. Faisons une rĂ©servation tout de suite, cette fonctionnalitĂ© n'est disponible que pour les types CDN 2, 3 et 5.

Vous pouvez optimiser les images de différentes maniÚres: en utilisant des formats de compression avancés (par exemple, WebP), des encodeurs plus efficaces (MozJPEG) ou simplement en nettoyant les métadonnées inutiles.

En gĂ©nĂ©ral, il existe deux types d'optimisations de ce type: avec perte de qualitĂ© et sans perte de qualitĂ©. Les CDN cherchent gĂ©nĂ©ralement Ă  utiliser l'optimisation sans perte afin d'Ă©viter les plaintes potentielles des clients concernant les changements de qualitĂ© d'image. Dans de telles conditions, le gain sera minime. En rĂ©alitĂ©, le niveau de qualitĂ© du JPEG est souvent bien plus Ă©levĂ© que nĂ©cessaire et vous pouvez effectuer une recompression en toute sĂ©curitĂ© avec un indicateur de qualitĂ© infĂ©rieure, sans compromettre la perception des utilisateurs. En revanche, il est difficile de dĂ©terminer le niveau de qualitĂ© et les paramĂštres universellement pour toutes les applications Web possibles, de sorte que les CDN utilisent des paramĂštres plus conservateurs par rapport Ă  ceux qui peuvent ĂȘtre appliquĂ©s en tenant compte du contexte (affectation d'image, type d'application Web, etc.)

4. Optimisation de la connexion TLS


Aujourd'hui, la plupart du trafic est transmis via des connexions TLS, ce qui signifie que nous consacrons plus de temps à la négociation TLS. Récemment, de nouvelles technologies ont été développées pour accélérer ce processus. Par exemple, il s'agit de la cryptographie EC, de TLS 1.3, du cache de session et des tickets (tickets de session), de l'accélération du chiffrement matériel (AES-NI), etc. Une configuration appropriée de TLS peut réduire le temps de connexion à 0-1 RTT (sans DNS ni TCP) )

En prĂ©sence de logiciels modernes, il n'est pas difficile de mettre en Ɠuvre de telles pratiques dans nos propres installations.

Tous les CDN n'implĂ©mentent pas les meilleures pratiques TLS; cela peut ĂȘtre vĂ©rifiĂ© en mesurant l'heure de la connexion TLS (par exemple, dans Webpagetest). IdĂ©al pour une nouvelle connexion - 1RTT, 2RTT - niveau moyen, 3RTT et plus - mauvais.

Il convient Ă©galement de noter que mĂȘme lors de l'utilisation de TLS au niveau CDN, le serveur avec notre application Web doit Ă©galement gĂ©rer TLS, mais du cĂŽtĂ© CDN, car le trafic entre le serveur et le CDN passe sur le rĂ©seau public. Dans le pire des cas, nous obtenons un double retard de la connexion TLS (le premier vers l'hĂŽte CDN, le second entre lui et notre serveur).

Pour certaines applications, vous devez faire attention aux problĂšmes de sĂ©curitĂ©: gĂ©nĂ©ralement, le trafic est dĂ©chiffrĂ© sur les nƓuds CDN, et c'est une opportunitĂ© potentielle d'intercepter le trafic. La possibilitĂ© de travailler sans divulguer le trafic est gĂ©nĂ©ralement offerte dans les plans tarifaires haut de gamme moyennant des frais.

5. Réduction des délais de connexion


Le principal avantage du CDN dont tout le monde parle: faible latence (moins de distance) entre l'hÎte CDN et l'utilisateur. Ceci est réalisé en créant une architecture de réseau géographiquement répartie dans laquelle les hÎtes sont situés aux points de concentration des utilisateurs (villes, points d'échange de trafic, etc.)

Dans la pratique, les prioritĂ©s pour diffĂ©rents rĂ©seaux peuvent se situer dans des rĂ©gions spĂ©cifiques. Par exemple, les CDN russes auront plus de points de prĂ©sence en Russie. American dĂ©veloppera principalement un rĂ©seau aux États-Unis. Par exemple, l'un des plus grands CDN Cloudflare n'a que 2 points en Russie - Moscou et Saint-PĂ©tersbourg. Autrement dit, nous pouvons Ă©conomiser environ 10 ms de retard par rapport Ă  l'hĂ©bergement direct Ă  Moscou.

La plupart des CDN occidentaux n'ont aucun point en Russie. En vous connectant Ă  eux, vous ne pouvez qu'augmenter les retards pour votre public russe.

6. Optimisation du contenu (minification, changements structurels)


L'Ă©lĂ©ment le plus complexe et technologique. Changer le contenu Ă  la livraison peut ĂȘtre trĂšs risquĂ©. MĂȘme si nous prenons la minification: rĂ©duire le code source (en raison d'espaces supplĂ©mentaires, de constructions sans importance, etc.) peut affecter ses performances. Si nous parlons de changements plus sĂ©rieux - dĂ©placer le code JS Ă  la fin du HTML, fusionner des fichiers et autres - le risque de perturber la fonctionnalitĂ© du site est encore plus Ă©levĂ©.

Par conséquent, seuls certains CDN de type 5 le font. Bien sûr, cela ne fonctionnera pas pour automatiser tous les changements nécessaires pour accélérer - une analyse et une optimisation manuelles sont nécessaires. Par exemple, la suppression du code inutilisé ou en double se réfÚre spécifiquement aux tùches manuelles.

En rÚgle générale, toutes ces optimisations sont contrÎlées par des paramÚtres et les plus dangereuses sont désactivées par défaut.

Prise en charge de l'accélération par type CDN


Voyons donc quelles options d'accélération potentielles offrent différents types de CDN.

Pour plus de commodité, nous répétons la classification.

  1. CDN gratuits pour la distribution des bibliothĂšques JS (MaxCDN, Google. Yandex).
  2. Services CDN pour l'optimisation client (par exemple, Google Fonts pour les polices, Cloudinary, Cloudimage pour les images).
  3. CDN pour la statique et l'optimisation des ressources dans CMS (disponible dans Bitrix, Wordpress et autres).
  4. CDN à usage général (StackPath, CDNVideo, NGENIX, Megaphone).
  5. DNS pour l'accélération de sites Web (Cloudflare, Imperva, Airi).

Comparez maintenant les fonctionnalités et les types de CDN.

OpportunitéType 1Type 2Type 3Type 4Type 5
Compression de texte+ --+ -+ -+
En-tĂȘtes de cache+++++
Les photos-+ -+ --+
TLS---+ -+
Retards---++
Le contenu----+


Dans ce tableau, «+» est utilisé pour indiquer un support complet, «-» indique un manque, «+ -» indique un support partiel. Bien sûr, des écarts par rapport à ce tableau sont possibles dans la réalité (par exemple, certains CDN à usage général introduiront des fonctionnalités d'optimisation des images), mais il est utile pour une idée générale.

Résumé


J'espÚre qu'aprÚs avoir lu cet article, vous aurez une idée plus claire de la recommandation «utiliser CDN» pour accélérer les sites.

Comme dans toute entreprise, on ne peut pas croire aux promesses marketing d'un service. L'effet doit ĂȘtre mesurĂ© et vĂ©rifiĂ© en conditions rĂ©elles. Si vous utilisez dĂ©jĂ  une sorte de CDN, vĂ©rifiez son efficacitĂ© selon les critĂšres dĂ©crits dans l'article.

Peut-ĂȘtre que l'utilisation de CDN ralentit le chargement de votre site en ce moment.

En tant que recommandation générale, vous pouvez vous concentrer sur les points suivants: étudier votre public, déterminer sa portée géographique. Si votre public principal est concentré dans un rayon de 1 à 2 000 kilomÚtres, vous n'avez pas besoin de CDN dans le but principal - pour réduire les retards. Au lieu de cela, vous pouvez rapprocher votre serveur des utilisateurs et le configurer correctement, en obtenant la plupart des optimisations décrites dans l'article (gratuites et permanentes).

Si votre audience est vraiment gĂ©ographiquement rĂ©partie (rayon de plus de 3 000 kilomĂštres), l'utilisation d'un CDN de qualitĂ© sera vraiment utile. Cependant, vous devez comprendre Ă  l'avance ce que votre CDN peut accĂ©lĂ©rer (voir le tableau des fonctionnalitĂ©s et leur description). Dans le mĂȘme temps, l'accĂ©lĂ©ration du site Web reste une tĂąche complexe qui ne peut pas ĂȘtre rĂ©solue en connectant un CDN. En plus des optimisations indiquĂ©es, les outils d'accĂ©lĂ©ration les plus efficaces restent par dessus bord CDN: optimisation de la partie serveur, modifications avancĂ©es de la partie client (suppression du code inutilisĂ©, optimisation du processus de rendu, travail avec le contenu, les polices, l'adaptabilitĂ©, etc.)

Source: https://habr.com/ru/post/fr471090/


All Articles