Мы запустили сайт с относительно большим объемом контента. Как и большинство контентных сайтов, большая часть каждой страницы является относительно статичной. Статьи редко меняются, что делает их хорошими кандидатами на статическое / краевое кэширование. Однако есть две большие проблемы. Элементы вторичной страницы (навигация, недавние списки содержимого и т. Д.) Изменяются довольно часто, быстро аннулируя «полные» кэшированные страницы. Также довольно часто мы добавляем на страницу больше динамических битов, таких как пользовательская информация и т. Д.
Было бы неплохо иметь обратный прокси-сервер / балансировщик нагрузки, который пост-обрабатывал контент и позволял нам обрабатывать включения на прокси / грани. Первоначальный запрос к бэкэнду возвращает грубый шаблон, затем прокси-сервер может обработать этот шаблон для его завершения. Разметка может выглядеть примерно так:
<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>
В этом примере вы увидите небольшой кусочек Ruby, который определяет включаемый файл на основе значения cookie, а затем возвращает хэш с URL-адресом для извлечения, тайм-аут и некоторый текст по умолчанию для отображения в событие ошибки. Теоретически все включения могут быть запрошены также асинхронно.
Насколько я понимаю, Amazon делает что-то подобное. Бэкэнд-сервисы генерируют различные компоненты страницы со строгим ограничением времени ожидания для обеспечения общей скорости страницы. Я надеялся, что их сервис CDN будет включать что-то вроде этого, но это не так!
Существует спецификация W3 для Edge Side Includes (ESI) - почти то, что я хочу. Однако там очень мало поддержки. Он доступен через Akamai, есть программное обеспечение Oracle, которое делает это, и кэш Varnish с открытым исходным кодом имеет очень простую реализацию. Это также действительно уродливый формат XML.
Итак, вопрос в том, что мне позволят делать то, что я хочу? Кто-нибудь еще так поступает?