Какие страtagsи кэширования можно реализовать между моим балансировщиком веб-нагрузки и моей веб-фермой?

У меня есть веб-ферма машин IIS7. прекрасно работает. Мы собираемся выпустить API в дикую природу. Это довольно просто, но мы знаем, что с первого дня он сильно ударит (у нас есть хотя бы один подписанный клиент).

Поэтому мы рассматриваем возможность добавления слоя кеширования МЕЖДУ нашими веб-serverами и сетями. Во-первых, я понятия не имею, является ли это хорошим решением, поэтому я открыт для идей. Во-вторых, что мы ставим перед фермой? Выделенный ящик для Windows или Linux? Наш балансировщик сети – это F5 BIG IP.

Я открыт для предложений 🙂

Любые идеи, ребята?

Я не уверен, что понимаю этот вопрос. Обратное кэширование proxy – обычная практика, и для этого есть много инструментов. Лак и кальмар популярны в мире с открытым исходным кодом для этого. Как правило, вы помещаете несколько пакетов RPC за свой балансировщик нагрузки, а затем либо отправляетесь напрямую из ящиков RPC на ваши веб-serverы, либо возвращаетесь через балансировщик нагрузки к веб-serverам.

Тем не менее, если вы говорите об API, обычно большая часть контента, который вы будете обслуживать, будет динамическим, что делает caching в основном бесполезным.

Я опаздываю на вечеринку здесь; но мне есть что предложить …

Кэл Хендерсон говорит (кратко) о проблемах, с которыми вы сталкиваетесь в своей книге «Строительство масштабируемых веб-websiteов» . Вы должны прочитать главу о API-interfaceах веб-сервисов.

Как правильно указывает мольберт, обратное proxy-кэширование обычно не приносит большой пользы API.

Две вещи, которые принесут вам пользу:

  1. Распределенный кеш-key для данных, с которыми вы работаете. То есть вы можете кэшировать свои горячие данные в formatе собственных objectов платформ или как простые сериализованные arrays, так и все, что еще для вашей платforms. Это ограничивает количество обращений к вашей базе данных, где у вас будут самые худшие проблемы масштабирования. Вашим serverам API по-прежнему нужно будет получать любые не кэшированные наборы данных и сериализовать ответ, но, по крайней мере, сериализационная часть только привязана к processору и может легко масштабироваться.
  2. Какая-то система ограничения скорости, т. Е. Способность дросселировать или отрицать клиентов, которые делают слишком много requestов. Обычно вызовы API обычно требуют довольно большой обработки на ваших serverах (поскольку они читают или обрабатывают необработанные данные), поэтому защита себя от плохо написанных клиентов имеет смысл.

В дополнение к вышесказанному, Cal Henderson предлагает создавать клиентские библиотеки с открытым исходным кодом на популярных языках и внедрять в них лучшие практики (например, кэширование на стороне клиента, ограничение скорости). Таким образом, сторонние разработчики будут иметь легкую, совместимую кодовую платформу для повторного использования и использования. Идея звучит отлично ИМХО, но и несколько дорогостоящая.

Уровень кэширования помог бы с статическим контентом, но я не вижу, как это будет полезно для динамических API. Однако это может быть полезно.

Например, вы можете использовать CDN, чтобы помочь кэшировать и распространять статические вещи, чтобы уменьшить нагрузку на ваш server, чтобы он мог тратить больше времени на динамические вещи.

Для вашего динамичного материала вы можете использовать что-то вроде того, о чем здесь упоминалось, если вы используете CDN для динамических материалов.

CDN, такие как Akamai, могут быть полезны даже для динамического контента, такого как API и SSL. Они делают это, сохраняя открытые sessionы TCP между их пограничными узлами и serverами. Это уменьшает количество открытых подkeyений на ваших serverах и экономит массу времени и пакетов при создании новых sessionов TCP.

Балансировщик нагрузки, такой как HAProxy, также может помочь в оптимизации и оптимизации sessionов TCP. Он может даже запускать 1500 MTU-пакетов на стороне «World» и Jumbo на стороне serverа, чтобы сократить time обработки на ваших реальных serverах. Он имеет ряд трюков для разгрузки соединения с реальных serverов на LB. Наличие streamов и TCP-сокетов на ваших serverах API, привязанных только к некоему медленному клиенту TCP, является пустой тратой resources.

  • Nginx Stale Cache и proxy_cache_path
  • Кэширование больших fileов прозрачно через HTTP
  • веб-website показывает неправильный server в некоторых browserах после изменения DNS
  • IIS кэширует вещи, даже когда я отkeyу кэширование вывода
  • Формат журнала serverа
  • Лакировка отладки
  • Nginx: «less памяти в зоне кеш-keyей», несмотря на много места
  • Принудительно requestить пропустить кеш, но save ответ
  • Не работает caching nginx proxy
  • Nginx proxy_cache / Varnish - параллельные requestы запускают несколько requestов на бэкэнд?
  • Заголовки кеширования HTTP: как следует переоценить работу?
  • Давайте будем гением компьютера.