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

Инструкции Использование кэша роли Azure в облачной службе Azure

Обновлено: Февраль 2015 г.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. В проекте облачной службы 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 без изменения кода программы. Дополнительные сведения см. в разделе Руководство: Настройка кэша роли Azure.

  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, представляющего собой диспетчер пакетов. Когда установлены инструменты Azure, NuGet позволяет добавлять соответствующие ссылки и вносить необходимые изменения в файлы конфигурации.

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

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

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

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

  3. В коллекции в сети выберите Azure In-Role Cache и нажмите кнопку Установить.

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

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

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

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

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

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

См. также

Показ:
© 2015 Microsoft