2014-02-03 3 views
9

Нам нужно решение для кеширования Rails, которое работает с многодисковым формированием на Heroku. В частности, нам нужно, чтобы рабочие-диноды обрабатывали длительные задачи для записи в кеш, который могут читать наши веб-диноды.Rails 4 + Memcached на Heroku

По-видимому, единственный способ реализовать общий кэш на всех динамиках - by using Memcached. Однако мне трудно найти объективные инструкции о том, как это сделать. (The Heroku docs написаны Memcached дополнение производителей, как MemCachier, которые продвигают свой продукт.)

Моих вопросов:

  • Является третий участник дополнение необходимо, или может Memcached быть реализован непосредственно на дино внутри пласта?
  • Использует Memcached через внешнюю службу даже практично? Если вся точка Memcached - это высокопроизводительный доступ в памяти, разве это не означает, что сетевая латентность внешней службы отрицает это?
  • При использовании дополнительных дополнений, есть причины для выбора MemCachier vs Memcached Cloud?

ответ

5

Due diligence - Я работаю в Redis Labs, компании, которая предоставляет аддон Memcached Cloud.

  • Я не знаком ни с кем, работающим с каким-либо хранилищем данных/базой данных непосредственно у динамо - для этого доступны только сторонники Helloku и сторонних разработчиков.
  • Да, использование удаленного Memcached - это общий способ работы с веб-приложением, которое необходимо масштабировать до нескольких динамиков. Несмотря на то, что вы не размещены на одном сервере, вы все равно получите ответы от вас Memcached в < 1 мс.
  • Выберите аддон, который дает вам наибольшую ценность за ваши деньги - не только с точки зрения ОЗУ за $, но и в отношении надежности и функциональности - обратитесь к this comparison за дополнительной информацией.
+0

Благодарим за это: мы просто установили надстройка memcached cloud, реализация оказалась без проблем - мы просто немного изменили инструкции для Rails 3 ([См. Мой ответ] (http://stackoverflow.com/) а/21665167/165673)). Хорошо выглядеть! – Yarin

+1

Как использовать RedisClound для обоих без исчерпания памяти? Я хочу, чтобы мои задания Sidekiq сохранялись, но я хочу, чтобы мои фрагменты автоматически истекали после достижения порога памяти. – Mohamad

+0

Я не уверен, что следую за вами - пожалуйста, откройте новый вопрос. –

5

(. @ItamarHaber ответил на вопрос и продал меня на Memcached облаке Просто хотел показать, как именно мы реализовали)

Использование Memcached Облако надстройку с Rails 4: (производный от instructions for Rails 3)

Добавить Далли на свой Gemfile:

gem 'dalli' 

Установите переключатель с ache_store в конфигурации/среда/production.rb:

# NOTE: ENV vars aren't available during slug comiplation, so must check if they exist: 
    if ENV["MEMCACHEDCLOUD_SERVERS"] 
    config.cache_store = :mem_cache_store, ENV["MEMCACHEDCLOUD_SERVERS"].split(','), { :username => ENV["MEMCACHEDCLOUD_USERNAME"], :password => ENV["MEMCACHEDCLOUD_PASSWORD"] } 
    end 

UPDATE:

После немного больше исследований мы поняли, что Redis может обеспечить нас всеми преимуществами Кэш-память Memcached плюс множество других функций.Redis Labs, создатели Memcached Облако приплюсовать, также предлагают Redis Cloud добавить на, который так же прост в использовании:

Использование Redis Облако надстройку с Rails 4:

Добавить Redis к вашему Gemfile:

gem 'redis-rails' 

Установите cache_store в конфигурации/сред/production.rb:

# NOTE: ENV vars aren't available during slug comiplation, so must check if they exist: 
    if ENV["REDISCLOUD_URL"] 
    config.cache_store = :redis_store, ENV["REDISCLOUD_URL"], { expires_in: 90.minutes } 
    end 
+0

Yep - мы действительно получили этот вклад недавно от другого пользователя (условный инициализатор)), и мы внутренне обсуждаем, что лучше всего подходит для этого - ваше решение в основном связано с тем, что мы вскоре обновим соответствующие документы. Кстати, еще один подход, который можно было бы рассмотреть, - это использовать https://devcenter.heroku.com/articles/labs-user-env-compile Heroku, но это только лаборатории и против их собственных лучших практик: :) –

+0

Точно, я поднял это здесь: http://stackoverflow.com/q/21662946/165673 – Yarin

+0

Удалить лишнее '=' в config.cache_store ... – blushrt

Смежные вопросы