Упражнение. Масштабирование веб-приложения вручную

Завершено

Следует расширять систему, если ожидается увеличение трафика. Горизонтальное масштабирование может также применяться в ответ на снижение производительности.

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

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

В этом упражнении используется пример веб-приложения, которое реализует веб-API. Этот веб-API предоставляет операции HTTP POST и GET, которые создают и извлекают данные о бронировании клиента на веб-сайте гостиницы. Резервирования не сохраняются. Операция GET просто извлекает фиктивные данные.

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

Создание плана службы приложений и веб-приложения

Важно!

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

  1. Войдите на портал Azure.

  2. В меню портала Azure или на странице Домашняя выберите Создать ресурс. Откроется панель Создание ресурса.

  3. В меню слева выберите Категории, затем выберите Интернет, после чего выберите Веб-приложение, а затем — Создать. Появится панель Создание веб-приложения.

  4. На вкладке Основные сведения введите указанные ниже значения для каждого параметра.

    Примечание.

    Веб-приложение должно иметь уникальное имя. Предлагаем использовать такой формат: <ваше имя или инициалы>hotelsystem. Используйте это имя везде, где указано <your-webapp-name>, в данном упражнении.

    Параметр Значение
    Сведения о проекте
    Отток подписок Выберите подписку Azure, которую вы хотите использовать для этого упражнения
    Группа ресурсов Нажмите ссылку Создать и введите новую группу ресурсов с именем mslearn-scale.
    Сведения об экземпляре
    Имя. См. примечание перед таблицей. Введите уникальное имя, которое вы сможете вспомнить во время упражнения.
    Публикация Код
    Стек среды выполнения .NET 6 (LTS)
    Операционная система Windows
    Регион Примите значение по умолчанию
    План службы приложений
    План Windows Примите значение по умолчанию
    Ценовой план Примите значение по умолчанию
  5. Выберите Просмотреть и создать>Создать. Подождите, пока веб-приложение будет создано и развернуто.

Создание и развертывание веб-приложения

  1. На панель задач Azure найдите значок Cloud Shell, чтобы открыть Azure Cloud Shell. Выполните следующую команду, чтобы скачать исходный код системы резервирования отеля.

    Screenshot of Cloud Shell icon in taskbar.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  2. Перейдите к папке mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  3. Выполните сборку приложений для гостиничной системы. Существует два приложения: веб-приложение, реализующее веб-API для системы и клиентское приложение, используемое для нагрузочного тестирования веб-приложения.

    dotnet build
    
  4. Подготовьте веб-приложение HotelReservationSystem для публикации.

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Перейдите к папке website, которая содержит опубликованные файлы. Запакуйте файлы в ZIP-папку и разверните их в веб-приложении, созданном в предыдущей задаче. Скопируйте следующий код в Блокнот и замените <your-webapp-name> именем вашего веб-приложения. Вставьте измененный блок кода в Cloud Shell и запустите его.

    cd website
    zip website.zip *
    az webapp deployment source config-zip --src website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. В веб-браузере перейдите по адресу http://<your-webapp-name>.azurewebsites.net/api/reservations/1. Откроется документ JSON с данными о бронировании номер 1.

    Screenshot of the running web app, showing the details for reservation number 1 in JSON format.

Отслеживание производительности веб-приложения до расширения

  1. Вернитесь в Cloud Shell и перейдите в папку ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Измените файл App.config в этой папке с помощью редактора кода.

    code App.config
    
  3. Раскомментируйте строку с элементом ReservationsServiceURI и замените значение YOUR WEBSITE NAME на название вашего веб-приложения. Файл должен выглядеть так, как показано в этом примере.

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <appSettings>
            <add key="NumClients" value="100" />
            <add key="ReservationsServiceURI" value="https://<your-webapp-name>.azurewebsites.net/" />
            <add key="ReservationsServiceCollection" value="api/reservations" />
        </appSettings>
    </configuration>
    

    Примечание.

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

  4. Сохраните файл, нажав клавиши CTRL+S.

  5. Измените файл HotelReservationSystemTestClient.csproj в этой папке с помощью редактора кода.

    code HotelReservationSystemTestClient.csproj
    
  6. Измените строку, указывающую TargetFramework, чтобы она соответствовала стеку среды выполнения, выбранному для веб-приложения. Измените значение TargetFramework на netcoreapp7.0. Файл должен выглядеть так, как показано в этом примере.

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp7.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
        <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
      </ItemGroup>
    
      <ItemGroup>
        <ProjectReference Include="..\HotelReservationSystemTypes\HotelReservationSystemTypes.csproj" />
      </ItemGroup>
    
    </Project>
    
  7. Сохраните файл, нажав клавиши CTRL+S и закройте редактор кода, нажав клавиши CTRL+Q.

  8. Повторно выполните сборку тестового клиентского приложения с новой конфигурацией.

    dotnet build
    
  9. Запустите клиентское приложение. Вы увидите несколько сообщений, как клиенты начинают работать, делать резервирования и выполнять запросы. Дайте системе поработать пару минут. Ответы медленные, и вскоре клиентские запросы начинают завершать ошибку с ошибками HTTP 408 (время ожидания).

    dotnet run
    

    Screenshot of a running client app, showing the responses and error messages that occur.

  10. На портале Azure выберите пункт Перейти к ресурсу, чтобы открыть веб-приложение.

  11. В области меню слева в разделе Мониторинг выберите Метрики.

  12. В правой части строки меню области веб-приложения выберите диапазон Local Time: Last 24 hours (Automatic) (Местное время. Последние 24 часа [автоматически]). Выберите Последние 30 минут, а затем — Применить.

  13. В разделе Название диаграммы добавьте следующие метрики для диаграммы.

    • Выберите Добавить метрику и в раскрывающемся списке Метрика выберите Время ЦП. Для параметра Агрегирование выберите Сумма.
    • Выберите Добавить метрику и в раскрывающемся списке Метрика выберите Ошибки сервера HTTP. Для параметра Агрегирование выберите Сумма.
    • Выберите Добавить метрику и в раскрывающемся списке Метрика выберите HTTP 4xx. Для параметра Агрегирование выберите Сумма.
    • Выберите Добавить метрику и в раскрывающемся списке Метрика выберите Время отклика. Для параметра Агрегирование выберите Среднее.
  14. В строке меню справа выберите Закрепить на панели мониторинга. Появится панель Закрепить на панели мониторинга. Выберите вкладку Создать.

  15. В раскрывающемся списке Имя панели мониторинга введите имя веб-приложения, а затем выберите Создать и закрепить.

  16. Подождите пять минут, пока работа системы стабилизируется, и запишите время ЦП, количество ошибок HTTP 4.xx и среднее время отклика. Вы увидите значительное количество ошибок HTTP 4xx. Эти ошибки являются ошибками времени ожидания HTTP 408. Среднее время отклика составляет несколько секунд. Могут встречаться ошибки HTTP-сервера в зависимости от того, как ваш веб-сервер справляется с нагрузкой.

    Screenshot showing the performance metrics for the web app before scaling out.

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

Расширение веб-приложения и проверка повышения производительности

  1. На портале Azure выберите название своего веб-приложения (Служба приложений). В области меню слева в разделе Параметры нажмите Горизонтально увеличить масштаб (план службы приложений). Отобразится панель Горизонтально увеличить масштаб (план службы приложений).

  2. На вкладке Настройка выберите Масштабирование вручную и установите для параметра Число экземпляров значение 5. Выберите Сохранить.

    Screenshot of the Configure page for the App Service plan, scaling out to five instances.

  3. Вернитесь к Cloud Shell, где выполняется клиентское приложение. Вы должны увидеть меньше запросов с ошибками, хотя некоторое время ожидания по-прежнему истекает.

  4. Пусть приложение выполняется еще пять минут. Затем перейдите к диаграмме с метриками для приложения на панели мониторинга на портале Azure. Вы должны увидеть, что время ЦП значительно увеличивается, потому что теперь уже пять раз больше ресурсов ЦП, доступных. Среднее время отклика должно уменьшаться, а число ошибок HTTP 4xx также должно уменьшаться. Следующая диаграмма показывает типичный набор результатов. Выделены точки, в которых выполнено расширение.

    Screenshot showing the performance metrics for the web app after scaling out to five instances.

  5. Если хотите поэкспериментировать, попробуйте увеличить число экземпляров для плана службы приложений до 10. Максимальное количество экземпляров, поддерживаемых уровнем S1, равно 10. Вы должны заметить, что время ЦП продолжает увеличиваться, а время отклика и количество ошибок HTTP 4xx — сокращаться.

  6. Вернитесь к Cloud Shell, где выполняется клиентское приложение. Чтобы остановить приложение, нажмите клавишу ВВОД.

  7. На портале Azure задайте для параметра числа экземпляров значение 1. Найдите веб-приложение и выберите в меню пункт Горизонтально увеличить масштаб (план службы приложений) На вкладке "Настройка" установите для счетчика экземпляров значение 1 и нажмите кнопку "Сохранить".