Ejecutamos un sitio de contenido de volumen relativamente alto. Al igual que la mayoría de los sitios de contenido, la mayoría de cada página es relativamente estática. Los artículos rara vez cambian, lo que los convierte en buenos candidatos para alguna forma de almacenamiento en caché estático/borde. Sin embargo, hay dos grandes problemas. Los elementos secundarios de la página (navegación, listas de contenido reciente, etc.) cambian con bastante frecuencia, invalidando rápidamente las páginas "completas" almacenadas en caché. También es bastante común que incluyamos más bits dinámicos en una página, como información específica del usuario, etc.¿Procesamiento posterior de solicitudes HTTP con proxy inverso? (como el ESI de Akamai)
Sería realmente bueno tener un proxy inverso/equilibrador de carga que el contenido posprocesado y nos permita manejar incluya en el proxy/borde. La solicitud inicial al backend devolvería una plantilla aproximada, luego el software proxy podría procesar esa plantilla para completarla. El margen de beneficio podría ser algo como esto:
<html>
<body>
<div id="content">
Lorem ipsum whackem smackem.
<%
dynamic "http://related.content.service/this/story"
%>
</div>
<div id="sidebar">
<%
dynamic do |request|
url = "http://my.user.service/user-widget.html"
if request.cookies.contains?("user_token")
url = "http://my.user.service/" + request.cookies["user_token"] + "/user-widget.html"
end
error_text = "User service not available"
{ :url => url, :timeout => 500, :error => error_text }
end
%>
</div>
</body>
</html>
Lo que verá en ese ejemplo es un pequeño fragmento de Ruby que determina el archivo incluido en base a un valor de cookie, a continuación, devuelve un hash con la URL para tirar en , un tiempo de espera y algo de texto predeterminado para mostrar en caso de error. En teoría, todas las inclusiones podrían solicitarse de forma asíncrona también.
Según tengo entendido, Amazon hace algo como esto. Los servicios de back-end generan varios componentes de página, con límites estrictos de tiempo de espera para garantizar la velocidad general de la página. Esperaba que su servicio CDN incluyera algo como esto, ¡pero no es así!
Hay una especificación W3 para Edge Side Includes (ESI) es casi lo que quiero. Sin embargo, hay muy poco apoyo para eso. Está disponible a través de Akamai, hay algún software de Oracle que lo hace, y el caché de Varnish de código abierto tiene una implementación muy básica. También es un formato XML realmente feo.
Entonces la pregunta es: ¿qué me dejará hacer lo que quiero? ¿Alguien más está haciendo las cosas de esta manera?
¿Puede ampliar esta respuesta en absoluto? No parece que me da mucho de lo que quiero, pero es posible que me esté perdiendo algo. – MrKurt
Ah, eso es un poco más útil. Sin embargo, realmente no me ayudaría a incluir las cosas condicionalmente, lo que lo hace menos útil para los tipos de escenarios en los que estoy interesado. – MrKurt
recuerde que las 'cosas' que SSI puede insertar en toda la página pueden generarse dinámicamente por cualquier servidor back-end. – Javier