2015-11-10 1 views
0

Я использую Amazon ElastiCache для хранения сессии и дорогостоящего кеширования операций в многоузловом веб-приложении. Один из них - я не смог учесть сетевую задержку узлов ElastiCache по сравнению с локальным сервером Memcached.Если порог «дорогой» операции меняется с инфраструктурой?

Мои тесты показывают время отклика 1-2 мс для вызовов ElastiCache в VPC AWS (как рекламируется), довольно хорошо, но явно значительно медленнее, чем что-либо локальное. С точки зрения фактических циклов вычисления 1-2ms - это время жизни. Это резко меняет то, что я могу считать «дорогой» операцией, заслуживающей кэширования.

Моя неопытность, которая привела меня по этому пути, но я бы предположил, что другие люди должны иметь подобные проблемы при переходе в «облако».

Вопрос: ли лучше пересмотреть (и переписать), что квалифицируется как «дорогой» операции, или если инфраструктура сделать лучшую работу по поддержке кода (например, я мог бы использовать локальный Memcached сервер на каждый узел и только пропускает пропуски кэша к узлу ElastiCache).

+0

Сколько звонков в ElasticCache вы делаете в среднем для подачи одного запроса? Кроме того, по моему мнению, 1-2 мс ничего не значит, и вы не должны волноваться из-за этого в идеале. – skbly7

+0

, вероятно, 15-20 экскавальных звонков в среднем. который может составлять около 50 мс (мое целевое время составляет 150 мс). Не имеет смысла «кэшировать» что-то, что требуется .5ms для генерации, если он собирается взять 1-2 мс, чтобы вытащить его из кеша. Но, как правило, я бы рассмотрел операцию .5ms (например, рекурсивную проверку каталога) довольно дорогостоящую операцию, достойную кэширования. Таким образом, это бросает это на бит цикла, и мой вопрос: что должно измениться, код или инфраструктура. Что делают другие люди? – jpschroeder

+0

добавил ответ, с несколькими открытыми вопросами, мы можем обсудить это и найти лучшее решение .. :) – skbly7

ответ

0

Некоторые открытые вопросы:

  • Как вы протестированные?
    1-2 мс был от открытия соединения, чтобы закрыть или просто получить время.
  • Зачем вам 15-20 средних звонков, их можно уменьшить?
    Если да, это может быть лучше.
  • Является ли Amazon ElasticCache на том же регионе, что и ваши серверы?

Сейчас подходит к решениям (будет обновляться в соответствии с ответом на поставленные выше вопросы):

Возможное решение
Разделить вещи, которые вы прекрасно отображать устаревшие ценности и вещи, которые должны быть не-staled и общий для всех серверов (например, деньги в кошельке и т. д.). Теперь настройте двухуровневое кэширование, один уровень, то есть только на сервере, и сохраните все значения, которые могут быть установлены отдельно на разных серверах, и поддерживайте общий кеш AmazonElastic для стабильных значений. Это может быть одной из рабочих стратегий.

+0

- Контролируйте серию операций «memcached_get», усредненных по времени. - Вопрос 15-20 - это вопрос. Как и мой комментарий выше, это имеет большое значение для этого с локальной установкой memcached, потому что это может действительно сэкономить время и циклы вычислений. Но в облачной среде изменяется исчисление. - Да, в той же области, az и vpc. – jpschroeder

+0

Я думаю, что решение состоит в том, что (как вы предлагаете, и я упомянул в исходном сообщении) есть 2 слоя кеширования. Одна локальная установка на каждом сервере, а затем «мастер», живущая в «удаленном» узле (-ях) эластичности. Удаленный узел будет хранить глобальный ключ для пространства имен всех локальных вызовов.Это позволит вам «очистить кеш» на всех удаленных и локальных узлах одновременно, просто изменив ключ кеша. Пропуски локального кэша пройдут до узла эластичной бумаги, а затем сохраните это значение локально - что-то вроде этого в любом случае. Является ли двухэтапное кэширование обычным? – jpschroeder

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