Подтвердить что ты не робот

Недостатки стеллажа в сравнении с лаком в кероке кедра Heroku?

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

В новом керочном кероке Героку этот слой лака не имеет. Heroku предлагает использовать rack-cache и memcache.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Обновить ссылку: https://medium.com/@harlow/scale-rails-with-varnish-http-caching-layer-6c963ad144c6

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

Ответ 4

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

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

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

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