Proporcionar recursos locales JS y CSS para CDN Fallbacks

13

Dado que

  • Las CDN son buenas porque pueden servir recursos más cerca del cliente, el cliente puede almacenarlos en caché y puede reducir la carga en su propio servidor.
  • En los navegadores recientes, cargar recursos de servidores de terceros no disminuye la seguridad gracias a Subresource Integrity (SRI) .
  • Las CDN pueden estar inactivas o bloqueadas en algunos países, y no están disponibles cuando se desarrolla fuera de línea 1 .

Creo que es convincente usar CDN, pero también estar preparado para que no estén disponibles. Esta publicación de blog ofrece una buena introducción a los diferentes enfoques para proporcionar retrocesos. Si observa el ejemplo básico , puede ver que ya contiene un poco de código repetitivo para proporcionar retrocesos solo para jQuery y Bootstrap, mientras que la solución preferida sugiere usar Fallback.js , que parece estar en gran medida sin mantenimiento durante el año pasado . Del mismo modo, la pregunta SO más relevante para el tema se trata solo de proporcionar un respaldo para jQuery.

Sin embargo, en la mayoría de los proyectos del mundo real, esperaría tener 5 o más recursos js / css, por lo que siento que no debería tener que repetir algunas repeticiones complicadas para proporcionar retrocesos para todos ellos. Además, cada vez que agrega o actualiza un recurso, ahora tiene que

  • Actualice el enlace de CDN
  • Actualice la copia de respaldo local mediante descarga manual o cambiando la versión en npm / bower config
  • Actualice el enlace a la reserva
  • Actualizar el hash SRI

Mientras que en el mundo ideal , esperaría agregar / actualizar el recurso en un archivo de configuración, y hacer que todos los demás pasos se ejecuten automáticamente (y luego ejecutar pruebas para ver si la actualización rompió algo).

¿Existe ya un flujo de trabajo establecido para lograr esto?

¿O los CDN, y especialmente el SRI, son todavía demasiado recientes?

¿O a la mayoría de las personas simplemente no les importa proporcionar retrocesos para los recursos de CDN?


1. Aunque podría tener una compilación de desarrollo que no dependa de CDN, también considero que es una forma de respaldo, ya que también debe mantenerse.

ValarDohaeris
fuente
Yo mismo no he jugado con CDN, pero parece que debería ser posible automatizar todos menos uno de esos pasos como parte del proceso de implementación estándar.
Ixrec
está Fallback.jssin mantenimiento porque ya funciona perfectamente? El software no tiene que cambiarse cada 5 minutos si ya funciona.
Robert Harvey
1
No, diría que no funciona perfectamente, de lo contrario no veo por qué el autor habría comenzado a trabajar en una nueva versión 2. También afirmaría que una biblioteca que es tan esencial para que un sitio web funcione correctamente tiene para ser continuamente probado y mejorado. Por lo que entiendo, agregar más pruebas y CI en diferentes navegadores es en realidad uno de los principales objetivos de la versión 2. Actualmente también carece de soporte para SRI.
ValarDohaeris

Respuestas:

1

Creo que quizás malinterpretes cómo los sitios más grandes que podrían necesitar este tipo de resiliencia usan CDN.

no se trata solo de alojar jQuery o algunas imágenes. La mayoría del sitio estará alojado en el CDN, y solo las cosas generadas dinámicamente, como páginas de pago o cestas de compras, estarán alojadas en los 'granjeros web principales'.

Incluso estos se están moviendo cada vez más para ser procesados ​​localmente con JS y cookies para mostrar cosas específicas del usuario sin afectar el procesamiento del lado del servidor.

Si un CDN falla y comienza a pasar todo el tráfico a su servidor web, es probable que se caiga, de lo contrario, realmente no necesitaba el CDN.

Ewan
fuente
Puede tener una copia de seguridad de CDN que se amplíe automáticamente. Y con CDN no se trata del tráfico sino también de sentirse más cómodo y reducir costos. Creo que CDN también tiene sentido en el sitio web de bajo tráfico, ¿por qué no debería?
Sjoerd222888
1

El sitio donde trabajo en nuestro CDN se ha vuelto cada vez más importante para el sitio. Al principio, simplemente lo usamos para almacenar en caché las imágenes / CSS / JS. En esta etapa, teníamos una propiedad de configuración que reescribía el nombre de host de estos recursos de www.mysite.com/ a www.cdn.com/, por lo que si el CDN caía, simplemente podríamos cambiar este valor de host o apagarlo por completo y dejarlo las URL que apuntan a nuestro servidor web.

Sin embargo, ahora pasamos al almacenamiento en caché de páginas básicamente enteras con contenido personalizado que se carga a través de AJAX. Nuestro CDN se ha vuelto esencial para nuestro sitio y podríamos ejecutarlo sin él tanto como podríamos con nuestros propios servidores HTTP. Pagamos a nuestro CDN un buen dinero en parte debido a la resistencia y las promesas de SLA de tiempo de actividad, por lo tanto, poner tiempo y esfuerzo en retrocesos parece una pérdida de tiempo. Tenemos un plan de recuperación ante desastres solo en caso de que haya un problema importante con nuestro proveedor, pero no es un simple proceso automatizado y veríamos un período de interrupción a medida que migramos a nuestra CDN alternativa.

Entonces, en respuesta a su pregunta, depende de cuán integral sea su CDN en su sitio. Si solo son sus activos los que está poniendo en el CDN y suponiendo que sus servidores http puedan manejar la carga de servir este contenido, entonces puede usar un interruptor de configuración para esencialmente encender o apagar el CDN. Junto con una herramienta de monitoreo, puede automatizar el encendido y apagado de ese interruptor.

Sutty1000
fuente
0

Veo 3 razones muy importantes para usar CDN:

  1. Reduzca la latencia de red para usuarios en regiones distantes. Cuando tiene un sitio web para una audiencia global, su alojamiento en Norteamérica no parece rápido para los usuarios del sur de Asia, especialmente en China. La diferencia en la experiencia del usuario puede ser tan grande que desanime a los usuarios a usar su sitio. En este caso, la CDN multirregional será esencial para su negocio.

  2. Servir lo más posible de recursos altamente disponibles. La confiabilidad es una de las razones principales para usar CDN en la nube: el tráfico se redirige automáticamente a los nodos disponibles y puede agregar algunas medidas adicionales para redirigir el tráfico si toda la región de la nube está inactiva.

  3. CDN es más fácil de mantener y más barato que los servidores de aplicaciones que sirven contenido dinámico. Cuando tiene que lidiar con los problemas mencionados anteriormente, es una forma natural de ahorrar dinero.

Todo esto significa que el objetivo de CDN es aumentar la disponibilidad de su contenido para los usuarios finales. Si la CDN falla o se vuelve lenta por alguna razón, el respaldo del lado del cliente aumentará significativamente la carga de la página, porque primero intentará obtener el recurso que no es accesible. La mejor solución es tener el diseño del lado del servidor que haga una sustitución de la URL base en enlaces como "{CDN} /js/jquery-version-min.js". Esto permitirá redirigir el tráfico al servidor de aplicaciones en lugar de CDN si falla la comprobación de estado de CDN: los clientes no realizarán solicitudes innecesarias e irán directamente al servidor de aplicaciones, que sería su alternativa con la solución del lado del cliente. Esto también resolverá el problema de las implementaciones locales y por etapas,

Ivan Gammel
fuente