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