Экспорт (0) Печать
Развернуть все

Практическое руководство. Использование Azure In-Role Cache

Обновлено: Август 2014 г.

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

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

Кэширование можно настроить в файлах CSCFG и CSDEF приложения Windows Azure, и самый простой способ выполнения этой настройки — с помощью параметров на странице свойств Кэширование роли. Для использования кэша в определенной роли необходимо добавить информацию в XML-файлы конфигурации для этой роли. В веб-роли ASP.NET этим файлом конфигурации является файл web.config. Для других ролей файлом конфигурации является файл app.config. Информацию можно добавлять в файл конфигурации вручную или с помощью пакета NuGet. Дополнительные сведения о кэше роли см. в разделе Кэш роли Windows Azure.

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

В этом разделе содержатся следующие подразделы:

Можно добавить кэширование к существующей роли либо создать рабочую роль кэша, которую затем использовать из других ролей.

  1. Откройте контекстное меню проекта Windows Azure и выберите Создать проект рабочей роли.

  2. В списке шаблонов проекта выберите шаблон Рабочая роль кэша и укажите имя проекта, например CacheWorkerRole1.

    Будет создан проект рабочей роли.

  3. В проекте Windows Azure разверните узел Роли, откройте контекстное меню для только что созданной рабочей роли кэша, а затем выберите Свойства.

    Откроется конструктор ролей для этого проекта.

  4. На вкладке Конфигурация установите соответствующий размер виртуальной машины и число экземпляров для этой роли.

  5. На вкладке Кэширование обратите внимание, что в разделе Параметры кластера кэша выбран параметр Выделенный кэш.

  6. Настройте необходимое поведение кэширования по умолчанию или создайте именованные кэши с настраиваемыми свойствами.

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

  1. В проекте Windows Azure разверните узел "Роли", откройте контекстное меню для роли, в которую требуется добавить кэширование, и выберите Свойства.

  2. На вкладке кэширования установите флаг Включить кэширование.

  3. Выберите параметр Совместно размещенная, а затем выберите процент ресурсов памяти виртуальный машины, где размещена роль, который будет выделен для кэша. Обычно это число должно быть в диапазоне от 30 до 55 процентов для мелких виртуальных машин и до 80 процентов для очень крупных виртуальных машин. Этот число можно оптимизировать, войдя на виртуальную машину с удаленного рабочего стола, когда облачная служба работает с обычной нагрузкой, и просмотрев процент физической памяти с помощью диспетчера задач. Оставшуюся память можно использовать для совместно размещенного кэша.

  4. Настройте необходимое поведение кэширования по умолчанию или создайте именованные кэши с настраиваемыми свойствами.

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

  1. В контекстном меню узла Ссылки проекта, содержащего роль для использования кэша, выберите Добавить ссылку.

  2. В диалоговом окне Добавление ссылки установите соответствующие флаги, чтобы добавить ссылки на следующие сборки, и нажмите кнопку ОК:

    • Microsoft.ApplicationServer.Caching.AzureClientHelper

    • Microsoft.ApplicationServer.Caching.Client

    • Microsoft.ApplicationServer.Caching.Core

    • Microsoft.Web.DistributedCache

  3. В проекте, содержащем роль, в которую требуется добавить кэширование, откройте файл web.config для проекта веб-роли или файл app.config для других типов проектов.

  4. Если раздел configSections не существует, добавьте его. В этом разделе добавьте объявление раздела кэширования, как показано в следующем коде.

    <configSections>     <section name="dataCacheClients" type="Microsoft.ApplicationServer.Caching.DataCacheClientsSection, Microsoft.ApplicationServer.Caching.Core" allowLocation="true" allowDefinition="Everywhere"/>   </configSections> 
    
  5. Добавьте XML-код, идентифицирующий именованный кэш для использования.

    <dataCacheClients>     <tracing sinkType="DiagnosticSink" traceLevel="Verbose"/>     <dataCacheClient name="default">       <autoDiscover isEnabled="true" identifier="WebRole1"/>     </dataCacheClient>   </dataCacheClients> 
    

    Если объявляется только один кэш, имя может быть default, как показано в предыдущем примере. Если объявляется нескольких кэшей, добавьте отдельный раздел dataCacheClient и введите уникальное имя для каждого кэша. Кэш с именем default возвращается после вызова в коде метода GetDefaultCache для объекта DataCacheFactory. Атрибут identifier задает имя веб-роли проекта, в который добавлена поддержка кэширования или рабочая роль кэша.

    После настройки распределенного кэша в этой роли можно обращаться к нему из кода путем создания объекта DataCacheFactory и DataCache object.

  6. В файле с фоновым кодом добавьте объявления класса Page и генератор случайных чисел, чтобы иметь некоторые данные для проверки кэша.

            static DataCacheFactory myFactory;         static DataCache myCache;         static Random randomizer = new Random(); 
    
  7. Чтобы создать веб-приложение, которое использует кэш, замените код веб-страницы Default.aspx следующим кодом.

    <%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"     CodeBehind="Default.aspx.cs" Inherits="WebRole1._Default" %>  <asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> </asp:Content> <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">        <p style="font-size:large; height: 283px;">         <asp:Label ID="Label0" runat="server" Text="Text for the cache:   " />         <asp:TextBox runat="server" ID="TextBox1" Width="125" /> <br /> <br />          <asp:Button runat="server" onclick="OnPutInCache" Text="Put in Cache" id="AddCachedItemsButton" /> &nbsp;&nbsp;&nbsp;         <asp:Button runat="server" onclick="OnGetFromCache" Text="Get from Cache" id="GetCachedItemsButton" /> &nbsp;&nbsp;&nbsp;         <asp:Label ID="Label1" runat="server" Width="500" />          <br /> <br />  <br />               Cached Datestamp: <%= DateTime.Now.ToString() %><br />         Fresh Datestamp: <asp:Substitution runat="server" methodname="GetFreshDateTime" id="UnCachedArea" /><br /><br />     </p>  </asp:Content>  
    
  8. Добавьте код для инициализации кэша.

            protected void Page_Load(object sender, EventArgs e)         {             try             {                 //Get a named cache (or default cache)                 if (myCache == null)                 {                     // You should initialize the data cache factory                     // once and keep reusing the same object.                     myFactory = new DataCacheFactory();                     myCache = myFactory.GetDefaultCache();                     // If you want to get a handle to a named cache                     // that is not the default cache, supply the                     // cache's name from the configuration file:                     // myCache = myFactory.GetCache("anotherNamedCache");                 }             }             catch (DataCacheException dce)             {                 Label1.Text = dce.ToString();             }         } 
    

    Этот код инициализации должен быть вызван до попытки использования кэша, например можно добавить этот код в обработчик событий Page_Load. В противном случае создается дескриптор кэша с использованием фабричного метода кэшей GetDefaultCache(). Если имя кэша не указано, используется кэш с именем default. При работе с методами кэша может быть вызвано исключение DataCacheException. Предыдущий код перехватывает исключение и отображает его пользователю в элементе управления Label.

  9. Добавьте код, чтобы использовать кэш.

            /// <summary>         /// Adds the value of the TextBox to the cache         /// </summary>         protected void OnPutInCache(object sender, EventArgs e)         {             try             {                 myCache.Put("MyKey", TextBox1.Text);                 Label1.Text = " \" " + TextBox1.Text + "\" has been added to the cache.";             }             catch (DataCacheException dce)             {                 Label1.Text = dce.ToString();             }         } 
    

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

  10. Извлечение данных из кэша производится с помощью метода Get с указанием ключа.

            /// <summary>         /// Gets the cached item (that was added from the TextBox)         /// </summary>         protected void OnGetFromCache(object sender, EventArgs e)         {             try             {                 string outputFromCache = myCache.Get("MyKey") as string;                 Label1.Text = "\"" + outputFromCache + "\" has been retrieved from the cache.";             }             catch (DataCacheException dce)             {                 Label1.Text = dce.ToString();             }         } 
    

Кэширование выходных данных повышает производительность веб-сайта, уменьшая необходимость в повторном создании уже полученных данных. Путем редактирования файла конфигурации приложения можно задействовать распределенный кэш для кэширования вывода приложения ASP.NET без изменения кода программы.

  1. Откройте файл web.config приложения ASP.NET, для которого нужно настроить кэширование вывода.

  2. Добавьте следующие строки для настройки кэширования вывода для использования распределенного кэша.

        <caching>       <outputCache defaultProvider="defaultProvider" >         <providers>           <add cacheName="default"                name="defaultProvider"                dataCacheClientName="nameOfDataCacheClient"                applicationName="<unique-appId>"                type= "Microsoft.Web.DistributedCache.DistributedCacheOutputCacheProvider, Microsoft.Web.DistributedCache" />         </providers>       </outputCache>     </caching> 
    

    Для cacheName укажите имя соответствующего именованного кэша, который расположен у указанного клиента dataCacheClient. Атрибут dataCacheClient задает роль, в которой размещен кэш.

  3. Добавьте директиву OutputCache на страницы, для которых требуется кэшировать вывод.

    <%@ OutputCache Duration="60" VaryByParam="*" %>
    

    Duration — время, в секундах, в течение которого данные должны оставаться в кэше. VaryByParam показывает, что для каждого сочетания параметров должна кэшироваться другая версия страницы. Звездочка (*) в данном контексте означает различие по всем параметрам. Параметры также можно задавать по имени. Полное описание доступных параметров см. в разделе Директива OutputCache.

    Кэш вывода настроен.

В этом разделе показано, как кэшировать данные состояния сеанса для веб-приложения ASP.NET без изменения его кода.

  1. Откройте файл web.config веб-приложения ASP.NET, для которого нужно настроить кэширование состояния сеанса.

  2. Добавьте следующие строки и укажите имя кэша, который необходимо использовать (в данном случае «default»), имя поставщика, имя dataCacheClient и код appId приложения.

        <!--Set up custom session state provider -->     <sessionState mode="Custom" customProvider="defaultProvider">       <providers>         <add cacheName="default"              name="defaultProvider"              dataCacheClientName="nameOfDataCacheClient"              applicationName="<unique-appId>"              type= "Microsoft.Web.DistributedCache.DistributedCacheSessionStateStoreProvider, Microsoft.Web.DistributedCache"/>       </providers>     </sessionState> 
    

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

  1. Откройте вкладку Кэширование конструктора ролей для роли.

  2. В разделе Именованные кэши добавьте именованный кэш для вывода и еще один кэш для информации о состоянии сеанса.

  3. В таблице Именованные кэши задайте свойства именованных кэшей.

    Например, установите для политики вытеснения значение TTL для кэша вывода и значение Нет для кэша состояния сеанса.

  4. Откройте файл web.config и измените атрибуты cacheName в разделах outputCache и sessionState на новые значения.

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

  1. Убедитесь, что установлена последняя версия NuGet.

    Дополнительные сведения и инструкции по установке см. в разделе NuGet.

  2. В обозревателе решений откройте контекстное меню узла проекта для роли, в которую требуется добавить кэширование, а затем выберите Управление пакетами NuGet.

    Появится диалоговое окно Управление пакетами NuGet.

  3. В интерактивной коллекции выберите Кэш роли Windows Azure и нажмите кнопку Установить.

    Проект изменен, ссылки на сборки кэширования добавлены, а файл конфигурации обновлен для настройки кэша.

  4. В файле конфигурации проекта найдите элемент dataCacheClient, который имеет дочерний элемент autoDiscover.

  5. В этом дочернем элементе измените значение атрибута identifier на имя роли, которая предоставляет кэш.

        <dataCacheClient name="default">       <autoDiscover isEnabled="true" identifier="CacheWorkerRole1"/>     </dataCacheClient> 
    
  6. Чтобы начать использование кэша, измените код, как описано ранее в этом разделе.

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

  7. (Необязательно) Чтобы управлять пакетами NuGet для всего решения и добавить поддержку кэширования для нескольких проектов одновременно, откройте контекстное меню для узла решения и выберите Управление пакетами NuGet.

См. также

Показ:
© 2014 Microsoft