Недостатки кеш-стойки против лака в кедровом стеке Heroku?

Предыдущие 2 стека приложений Heroku поставлялись со слоем Varnish, который автоматически обратный прокси-кешировал контент на основе заголовков http.

Новый кедровый стек Heroku не имеет этого слоя лака. Heroku предлагает вместо этого использовать rack-cache и memcache.

Есть ли у этого недостатки по сравнению с предыдущими стеками со слоем лака? С кэшированием в стойке, неужели меньше серверов, обслуживающих уровень кэширования, и менее оптимизированным способом?

4 ответа

Решение

Нет никаких сомнений в том, что удаление слоя лака значительно снижает производительность кеша - как по задержке, так и по пропускной способности - от бамбука Heroku до стека кедра. С одной стороны, ваши запросы приложений конкурируют и могут быть поставлены в очередь из-за попаданий в кэш на время динамометрии.

Недостатками, чтобы назвать несколько, являются: интерпретируемый уровень приложения ruby ​​(по сравнению с скомпилированным C) (по сравнению с уровнем прокси), основанный на memcached (по сравнению с базой в памяти процесса), основанный на блокировании ввода / вывода (по сравнению с неблокирующим вводом / выводом), Любое предположение, что две стратегии кэширования могут конкурировать в масштабе, просто смешно. Вы не увидите большой разницы в маленьком масштабе. Но если у вас есть сотни или даже тысячи попаданий в кеш в секунду, лак существенно не ухудшится, в то время как стек кедра потребует много динамо только для того, чтобы обслуживать статические активы в производительном режиме. (Я вижу ~ 5-10мс время динамометрии для попаданий в кеш на кедре).

Cedar был сконструирован таким образом, чтобы не повышать производительность, а обеспечить новый уровень гибкости вашего приложения. Хотя он позволяет вам выполнять неблокирующие операции ввода-вывода, такие как длительный опрос и точный контроль над параметрами кэширования статических ресурсов, ясно, что heroku хочет, чтобы вы использовали свою собственную скорость кэширования / пропускную способность, если ваша цель - масштабирование в Интернете.

Я не знаю, как производительность кэша стойки сравнивается с Varnish с точки зрения необработанных запросов. Лучше всего было бы создать простое приложение для тестирования и переключать стеки.

Стоит помнить, что поскольку стек heroku.com был Nginx->Varnish->App, если вы установили правильные заголовки HTTP, то уровень приложения будет выполнять гораздо меньше работы. Поскольку большая часть доставки будет обрабатываться Varnish, а Varnish будет довольно быстрым, это освобождает ваш Dyno для актуальных запросов на обработку приложений.

Так как стек herokuapp.com ранее был доступен для вашего приложения, вы и ваше приложение должны эффективно обрабатывать кеширование, это может означать, что вы решите использовать кеш-стойку для кэширования вывода всей страницы, или вы можете использовать memcached для обработки запросов к базе данных. или оба.

В конце концов, это зависит от того, что делает ваше приложение: если оно предоставляет один и тот же статический контент большому количеству пользователей, вы получите выгоду от Varnish, но если у вас есть приложение, в котором пользователи входят в систему и взаимодействуют с контентом, вы выиграли не вижу пользы от Varnish, поэтому кэширование частичного содержимого или необработанных запросов к базе данных может быть более эффективным. Установив аддон New Relic, вы сможете заглянуть под капот и посмотреть, что замедляет работу вашего приложения.

Есть также сторонние варианты для размещенного Varnish. Я написал быстрый пост о настройке с помощью Fastly / Varnish.

Fastly - это решение для Varnish, которое будет размещено перед вашим приложением Heroku и будет обслуживать кэшированные ответы.

Ссылка для обновления: https://medium.com/@harlow/scale-rails-with-varnish-http-caching-layer-6c963ad144c6

Я видел действительно отличное время отклика. Если вы можете получить хороший коэффициент попадания в кэш с помощью Varnish, вы сможете уменьшить значительный процент ваших динамовцев.

Более современный ответ с 20/20 задним числом:

Чтобы приблизить производительность кеширования к кедру-14 к бамбуку, это обычная схема:

  1. Сконфигурируйте Rails для генерации соответствующих заголовков кэширования (например, Etags, Cache-Control, Last-Modified и т. Д.)
  2. Придерживайтесь быстро (лак как услуга) или облачный свет перед вашим приложением. Если заголовки приложений были установлены правильно, профильные страницы, которые должны быть свежими, не будут кэшироваться, в отличие от статических ресурсов.

Я бы порекомендовал redis-rails в качестве бэкэнда кэша стойки, если вы выполняете кэширование на нескольких уровнях (FE (CF/FY), страница, действие, фрагмент и т. Д.).

Другие вопросы по тегам