Статьи

PHP, Memcache и Windows Azure Caching

Вчера мой коллега написал о кэшировании Windows Azure (Preview) и облачных сервисах Ruby . Как он отмечает, большая часть его поста относится к любому приложению, использующему кэширование Windows Azure , а не только к приложениям Ruby. Он также отметил, что Windows Azure Caching поддерживает проводной протокол Memcache. Итак, соединив 2 и 2 (в данном случае это не сложно), я решил, что должен иметь возможность взять приложение PHP, использующее расширение Memcache , развернуть его как веб-роль Windows Azure, и оно должно «просто работать». , И это так, но с сервисом Caching, который является «предварительным просмотром», пользовательский интерфейс не так гладок, как хотелось бы, поэтому я надеюсь получить ваш отзыв.

Я настоятельно рекомендую вам прочитать пост Ларри, особенно информацию о совмещенных и выделенных опциях. Я буду следовать примеру Ларри, используя совмещенный кеш. И, для простоты, мое «приложение» будет одним файлом, который использует код из примера № 1 документации по базовому использованию расширения Memcache

Установите Windows Azure SDK для .NET

К сожалению, установка Windows Azure SDK для PHP (в настоящее время) не дает вам все, что нужно для использования службы кэширования. Однако, получение бит по — прежнему довольно легко: запустить WindowsAzureLibsForNet-x64.msi или WindowsAzureLibsForNet-x86.msi ( в зависимости от архитектуры) с Windows Azure SDK для .NET — июнь 2012 страница загрузки . ( Примечание : я предполагаю, что у вас также установлен Windows Azure SDK для PHP .)

Создание веб-роли Windows Azure PHP

Вместо того, чтобы повторять шаги по созданию веб-роли PHP, я отсылаю вас к публикации, которую я написал пару недель назад: Создание веб-роли PHP в Windows Azure (вы, вероятно, можете начать с раздела « Импорт параметров публикации »). Однако, когда вы перейдете в раздел « Настройка конфигурации PHP », вам нужно будет добавить файл php_memcache.dll в папку ext (не файл php_mongo.dll, как показано в моем примере), и расширение Memcache должно быть включено в php.ini файл.

Примечание . Если у вас нет файла php_memcache.dll , я рекомендую получить правильную версию из архива расширений Pierre Joye здесь: http://downloads.php.net/pierre/ .

Отредактируйте определение сервиса и файлы конфигурации сервиса

Для включения службы кэширования (в настоящее время) необходимо вручную отредактировать файлы определения службы ( .csdef ) и конфигурации службы ( .cscfg ). Итак, после того, как вы создали свою веб-роль PHP, откройте файлы ServiceDefinition.csdef и ServiceConfiguration.Cloud.cscfg в вашем любимом текстовом редакторе и сделайте следующие дополнения:

В файле ServiceDefinition


1. Импортируйте модуль кэширования, добавив следующий элемент в качестве дочернего
элемента элемента
<Imports> :
<Import moduleName="Caching" />

2. Добавьте локальное хранилище, добавив следующий элемент в качестве дочернего элемента элемента <WebRole>:
<LocalResources> 

   <LocalStorage cleanOnRoleRecycle="false"  name="Microsoft.WindowsAzure.Plugins.Caching.FileStore" sizeInMB="1000"/> 

</LocalResources>

3. Добавьте конечную точку, которую клиент будет использовать для доступа к кешу по протоколу Memcache, добавив следующий элемент в качестве дочернего элемента элемента <Endpoints> :

<InternalEndpoint name="memcache_default" protocol="tcp" port="11211" />

В файле конфигурации сервиса

Добавьте следующие элементы в качестве дочерних элементов элемента <ConfiguratinSettings> (заменив « your_storage_account_name » и « your_storage_account_key » на соответствующие значения):

<Setting name="Microsoft.WindowsAzure.Plugins.Caching.NamedCaches" value=""/>

<Setting name="Microsoft.WindowsAzure.Plugins.Caching.Loglevel" value=""/>

<Setting name="Microsoft.WindowsAzure.Plugins.Caching.CacheSizePercentage" value="30"/>

<Setting name="Microsoft.WindowsAzure.Plugins.Caching.ConfigStoreConnectionString" value="DefaultEndpointsProtocol=https;AccountName=your-storage_account_name;AccountKey=your_storage_account_key"/>

Измените код подключения Memcache

Имя сервера в вашем коде подключения Memcache имеет вид localhost_webRoleName , где webRoleName — это имя вашей веб-роли. В примере из моего предыдущего поста я использовал myWebRole в качестве имени веб-роли, поэтому код подключения к Memcache выглядит следующим образом:

$memcache = new Memcache;

$memcache->connect('localhost_myWebRole', 11211) or die ("Could not connect");

Как я упоминал ранее, остальная часть моего «приложения» — это код из примера № 1 документации базового использования расширения Memcache .

Опубликуйте свою заявку

Теперь вы можете опубликовать свое приложение (или протестировать его в эмуляторе ). Если вы следуете моему простому примеру, вы должны увидеть что-то вроде этого:

Снимок экрана 2012-07-02 в 12.17.19 вечера

Это оно! Я знаю, что команда Windows Azure ищет способы упростить включение службы кэширования. Мы хотели бы услышать ваши отзывы об этом, а также любые ваши отзывы о самом сервисе.

Спасибо.