доступ к Memcached через mcrouter из Rails в Кубенете - PullRequest
0 голосов
/ 08 января 2020

У меня есть приложение Rails 6, работающее в Google Kubernetes Engine, и я пытаюсь включить распределенное кэширование с помощью Memcached.

Я строго следовал этим инструкциям для развертывания Memcached в Kubernetes кластер с mcrouter. Ничего не пошло не так, и окончательный тест с использованием сценария Python работает нормально.

Тогда в моем приложении на Rails я думаю, что мне просто нужно добавить гем "dalli" и использовать MemCacheStore следующим образом:

cache = ActiveSupport::Cache::MemCacheStore.new("#{ENV['NODE_NAME']}:5000")
cache.write('key', 'value')

Этот код должен подключаться к mcrouter на локальном узле через порт 5000 и выполнять запись в кэш (переменная окружения NODE_NAME содержит имя локального узла).

Команда cache.write возвращает false и выводит ее в журнал:

D, [2020-01-08T18:02:30.233119 #215] DEBUG -- : Dalli::Server#connect gke-rev79-cluster-phat-pool-41a53de4-rfz3:5000
W, [2020-01-08T18:02:30.258514 #215]  WARN -- : gke-rev79-cluster-phat-pool-41a53de4-rfz3:5000 failed (count: 0) EOFError: end of file reached

"gke-rev79-cluster-phat-pool-41a53de4-rfz3" - это имя локального узла

Вот что я получаю от cache.inspect:

"#<ActiveSupport::Cache::MemCacheStore:0x0000000004087cb8 @options={}, @data=#<Dalli::Client:0x0000000004087498 @servers=[\"gke-rev79-cluster-phat-pool-41a53de4-rfz3:5000\"], @options={}, @ring=nil>>"

Как я могу подключиться к кешу? Возможно, мне нужно поместить некоторые вещи в опции кеш-хранилища Rails?

1 Ответ

0 голосов
/ 12 февраля 2020

Похоже, что Далли не поддерживает Mcrouter, поскольку он использует двоичный протокол Memcached, который не поддерживает Mcrouter.

https://github.com/facebook/mcrouter/issues/56

...