Продажи: 1-800-867-1389

Оболочка Memcached для кэша Azure

Обновлено: Сентябрь 2014 г.

noteПримечание
Руководство по выбору правильного предложения службы кэша Azure см. в разделе Какой кэш Azure подходит мне лучше всего?.

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

Azure поддерживает протокол Memcache, который позволяет использовать существующие реализации Memcache для быстрой миграции на Azure. Если какое-либо приложение уже использует Memcache, нет необходимости заменять код новым кодом.

Запуск кэша Azure вместе с Memcache является лучшим вариантом, чем, например, запуск в рабочей роли одного Memcache. Причина в том, что кэш Azure предлагает дополнительные функции, например корректное выключение, высокий уровень доступности, локальное кэширование (на прокладке клиента), уведомления (на прокладке клиента), согласованность данных и простое масштабирование вверх и вниз, прозрачное для клиентов. Например, схема хэширования сервера и управление разделами в кэше Azure вместе с Memcache помогают балансировать нагрузку и сохранять согласованность данных.

Кэш Azure поддерживает протокол коммутации Memcache. Существует две версии протокола, двоичная и текстовая.

Кэш Azure поддерживает данный протокол в дополнение к своему собственному протоколу коммутации. Клиент Memcache предположительно должен быть совместим с Azure. Кэш Azure поддерживает почти каждый API, поддерживаемые другими реализациями Memcache.

По этой причине в случае, если пользователь перенесет приложение Memcache на Azure и укажет ему на реализацию Azure Memcache, оно должно продолжать работать как есть, без дополнительных изменения приложения.

Memcache поддерживает две разные возможности разработки: использование "шлюза сервера" и использование "прокладки клиента".

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

При использовании шлюза сервера кластер кэша сервера прослушивает сокет Memcache. Другими словами, он открывает сокет и прослушивает пакеты в протоколе Memcache. Уровень перевода отсутствует (рассматривается ниже).

Для включения данной функции в вашем кластере кэша откройте дополнительную внутреннюю конечную точку, присвойте ей имя и сделайте ее вашим портом Memcache. Весь трафик данного порта будет проходить через протокол Memcache.

Однако шлюз сервера снижает производительность в сценариях, чувствительных к высокой производительности, при сравнении с использованием сценария прокладки клиента. Это связано с тем, что реализации Memcache применяют хэширование по-другому, нежели чем это делает кэш Azure. Реализации Memcache откладывают схему хэширования в клиент кэша. В Azure сервер кэша создает хэш. Поведение кэша Azure должно позволить серверу кэша определить поведение хэша. Это позволяет серверу распределять нагрузку, менять размеры, обеспечивать отсутствие потери данных и т.д.

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

Прокладка клиента Memcache устанавливается на клиент, который получает доступ к кэшу. Обычно это роль Azure, у которой есть приложение. Прокладка клиента поддерживает локальный кэш.

Прокладка является уровнем перевода. Она переводит вызовы клиента Memcache на API кэша Azure. Прокладка состоит из двух частей — обработчика протокола Memcache и клиента кэша Azure. Прокладка – уровень перевода – устанавливается на сам клиент, откуда бы не исходили вызовы Get и Put к API кэша Azure.

Когда клиент Memcache считает localhost сервером Memcache, операции Put будут изначально проводиться локальным экземпляром прокладки вместо сервера кэша в Azure. Затем прокладка определит правильный сервер назначения в кластере кэша и перенаправит операцию Put в Azure.

Это устранит дополнительный сетевой прыжок, который присутствует в сценарии шлюза сервера. Недостатком является то, что вы должны получить прокладку и поместить ее в ваше приложение.

Существует две топологии кэширования: совместное кэширование и выделенная роль кэша.

При развертывании кластера кэша на выделенной рабочей роли кэша используйте прокладку Memcache для клиента кэша. Это дает вам лучшую производительность и избегает кода автообнаружения.

При использовании совместного кэширования, когда клиент кэша располагается на той же роли, используйте шлюз сервера Memcache. Использование прокладки клиента влечет дополнительный уровень обработки и перенаправления, в чем нет необходимости при доступе к кэшу из той же роли. Дополнительное перенаправление добавит ненужные временные затраты.

Не существует модели программирования для использования шлюза сервера или прокладки клиента. Все, что необходимо, — это изменения в параметрах конфигурации. Прокладке клиента также необходима установка.

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

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

  1. На роли, на которой будет размещен сервер кэша, перейдите к свойствам роли, затем на вкладку "Кэширование".

  2. Установите флажок "Включить кэширование".  Это добавит конечные точки ввода в csdef, элемент importModule и другие настройки csdef/cscfg. Следующий шаг развертывания — ручное добавление конечной точки ввода под именем "memcache_default" на вкладке "Конечные точки".

  3. Теперь клиент должен быть настроен с указанием на данный кластер. При использовании шлюза сервера с совместным кэшированием или прокладки клиента с выделенным кэшированием просто укажите приложению на "localhost_thisrolename" – в автообнаружении нет необходимости

  1. На роли, у которой есть клиент Memcache, щелкните правой кнопкой мыши имя роли и выберите "Добавление ссылки на пакет библиотеки" для запуска окна NuGet.

  2. Найдите "Azure Caching Memcache Shim". Установите данный пакет NuGet.

  3. Данный пакет создаст задачу запуска, добавит внутреннюю конечную точку для memcache_default и привяжет его к порту 11211, а также добавит соответствующие разделы dataCacheClients к App.config и web.config. Это можно изменить на вкладке "Внутренние конечные точки".

  4. Укажите имя роли в элементе autoDiscovery файла App.config или Web.config.

  5. Теперь клиент должен быть настроен на прокладку. Измените конфигурацию клиента memcache и установите сервер как "localhost". Также должны быть установлены правильные номера портов.

Была ли вам полезна эта информация?
(1500 символов осталось)
Спасибо за ваш отзыв
Корпорация Майкрософт проводит интернет-опрос, чтобы выяснить ваше мнение о веб-сайте MSDN. Если вы желаете принять участие в этом интернет-опросе, он будет отображен при закрытии веб-сайта MSDN.

Вы хотите принять участие?
Показ:
© 2015 Microsoft