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.
fuente
Fallback.js
sin mantenimiento porque ya funciona perfectamente? El software no tiene que cambiarse cada 5 minutos si ya funciona.Respuestas:
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.
fuente
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.
fuente
Veo 3 razones muy importantes para usar CDN:
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.
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.
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,
fuente