Fourniture de ressources JS et CSS locales pour les solutions de secours CDN


13

Étant donné que

  • Les CDN sont une bonne chose car ils peuvent servir des ressources plus proches du client, le client peut les mettre en cache et vous pouvez réduire la charge sur votre propre serveur.
  • Dans les navigateurs récents, le chargement de ressources à partir de serveurs tiers ne diminue pas la sécurité grâce à Subresource Integrity (SRI) .
  • Les CDN peuvent être en panne ou bloqués dans certains pays et ne sont pas disponibles lors du développement hors ligne 1 .

Je pense qu'il est convaincant d'utiliser des CDN, mais aussi d'être préparé pour qu'ils ne soient pas disponibles. Ce billet de blog donne une belle introduction aux différentes approches pour fournir des solutions de rechange. Si vous regardez l' exemple de base , vous pouvez voir qu'il contient déjà un peu de code passe-partout pour fournir des solutions de secours uniquement pour jQuery et Bootstrap, tandis que la solution préférée suggère d'utiliser Fallback.js , qui semble être en grande partie non entretenu au cours de la dernière année. . De même, la question SO la plus pertinente pour le sujet concerne uniquement la fourniture d'une solution de secours pour jQuery.

Cependant, dans la plupart des projets du monde réel, je m'attendrais à avoir 5 ressources js / css ou plus, donc je pense que vous ne devriez pas avoir à répéter un passe-partout désordonné pour fournir des solutions de rechange pour chacun d'eux. De plus, chaque fois que vous ajoutez ou mettez à jour une ressource, vous devez maintenant

  • Mettre à jour le lien CDN
  • Mettre à jour la copie de secours locale par téléchargement manuel ou changement de version dans npm / bower config
  • Mettre à jour le lien vers le repli
  • Mettre à jour le hachage SRI

Alors que dans le monde idéal , je m'attendrais à ajouter / mettre à jour la ressource dans un fichier de configuration et à exécuter automatiquement toutes les autres étapes (puis à exécuter des tests pour voir si la mise à jour a cassé quelque chose).

Existe-t-il déjà un workflow établi pour y parvenir?

Ou les CDN, et notamment l'ISR, sont-ils encore trop récents?

Ou la plupart des gens ne se soucient-ils tout simplement pas de fournir des solutions de secours pour les ressources CDN?


1. Bien que vous puissiez avoir une version de développement qui ne dépend pas des CDN, mais je considère également que c'est une forme de secours, car elle doit également être maintenue.


Je n'ai pas moi-même joué avec les CDN, mais il semble qu'il devrait être possible d'automatiser toutes les étapes sauf une dans le cadre du processus de déploiement standard.
Ixrec

n'est pas Fallback.jsentretenu car il fonctionne déjà parfaitement? Le logiciel ne doit pas être changé toutes les 5 minutes s'il fonctionne déjà.
Robert Harvey

1
Non, je dirais que cela ne fonctionne pas parfaitement, sinon je ne vois pas pourquoi l'auteur aurait commencé à travailler sur une nouvelle version 2. Je dirais également qu'une bibliothèque qui est si essentielle au bon fonctionnement d'un site Web a être testé et amélioré en continu. D'après ce que je comprends, l'ajout de tests et de CI sur différents navigateurs est en fait l'un des principaux objectifs de la version 2. Il manque également actuellement le support du SRI.
ValarDohaeris

Réponses:


1

Je pense que vous vous méprenez peut-être sur la façon dont les grands sites qui pourraient avoir besoin de ce type de résilience utilisent les CDN.

il ne s'agit pas seulement d'héberger jQuery ou quelques images. La majorité du site sera hébergé sur le CDN, seules les choses générées dynamiquement comme les pages de paiement ou les paniers d'achat étant hébergées sur les `` fermes Web principales ''

Même ceux-ci se déplacent de plus en plus vers un traitement local avec JS et des cookies pour afficher des éléments spécifiques à l'utilisateur sans toucher au traitement côté serveur.

Si un CDN échoue et que vous commencez à faire passer tout le trafic vers votre serveur Web, il est probable qu'il tombe, sinon vous n'avez pas vraiment besoin du CDN.


Vous pouvez avoir une sauvegarde CDN qui évolue automatiquement. Et avec CDN, il ne s'agit pas de trafic mais aussi de confort et de réduction des coûts. Je pense que CDN a également un sens sur un site Web à faible trafic, pourquoi ne le devrait-il pas?
Sjoerd222888

1

Le site sur lequel je travaille sur notre CDN est devenu de plus en plus important pour le site. Au début, nous l'avons simplement utilisé pour mettre en cache Images / CSS / JS. À ce stade, nous avions une propriété de configuration qui réécrivait le nom d'hôte de ces ressources de www.mysite.com/ à www.cdn.com/ donc si le CDN tombait en panne, nous pouvions simplement changer cette valeur d'hôte ou le désactiver complètement et quitter les URL pointant vers notre serveur web.

Cependant, nous sommes maintenant passés à la mise en cache de pages essentiellement entières avec un contenu personnalisé chargé via AJAX. Notre CDN est devenu essentiel pour notre site et nous pourrions tout autant nous en passer que nos propres serveurs HTTP. Nous payons notre bon CDN en partie à cause de leur résilience et des promesses de disponibilité du SLA, donc consacrer du temps et des efforts aux solutions de rechange semble une perte de temps. Nous avons un plan de reprise après sinistre en place au cas où il y aurait un problème majeur avec notre fournisseur, mais ce n'est pas un processus automatisé simple et nous verrions une période d'indisponibilité lors de la migration vers notre CDN de secours.

Donc, en réponse à votre question, cela dépend de la façon dont le CDN fait partie intégrante de votre site. Si ce ne sont que vos actifs que vous mettez dans le CDN et en supposant que vos serveurs http peuvent gérer la charge de diffusion de ce contenu, vous pouvez utiliser un commutateur de configuration pour essentiellement activer ou désactiver le CDN. Associé à un outil de surveillance, vous pouvez automatiser l'activation ou la désactivation de cet interrupteur.


0

Je vois 3 raisons très importantes d'utiliser des CDN:

  1. Réduisez la latence du réseau pour les utilisateurs des régions éloignées. Lorsque vous avez un site Web pour un public mondial, votre hébergement en Amérique du Nord ne semble pas rapide pour les utilisateurs en Asie du Sud, en particulier en Chine. La différence dans l'expérience utilisateur peut être si énorme qu'elle découragera les utilisateurs d'utiliser votre site. Dans ce cas, le CDN multirégional sera essentiel pour votre entreprise.

  2. Servez autant que possible à partir de ressources hautement disponibles. La fiabilité est l'une des principales raisons d'utiliser des CDN cloud - le trafic est automatiquement redirigé vers les nœuds disponibles et vous pouvez ajouter des mesures supplémentaires pour réacheminer le trafic si toute la région cloud est en panne.

  3. Le CDN est plus facile à entretenir et moins cher que les serveurs d'applications qui servent du contenu dynamique. Lorsque vous devez faire face aux problèmes mentionnés ci-dessus, c'est un moyen naturel d'économiser de l'argent.

Tout cela signifie que l'objectif de CDN est d'augmenter la disponibilité de votre contenu pour les utilisateurs finaux. Si CDN échoue ou devient lent pour une raison quelconque, le repli côté client augmentera considérablement la charge de pages, car il essaiera d'abord d'obtenir la ressource qui n'est pas accessible. La meilleure solution est d'avoir la conception côté serveur qui fera une substitution de l'URL de base dans des liens comme "{CDN} /js/jquery-version-min.js". Cela permettra de réacheminer le trafic vers le serveur d'applications au lieu de CDN si le contrôle de santé CDN échoue - les clients n'effectueront pas de requêtes inutiles et iront directement au serveur d'applications, ce qui serait votre solution de rechange avec la solution côté client. Cela résoudra également le problème des déploiements locaux et intermédiaires,

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.