Поделиться через


Развертывание и масштабирование Orleans приложения в Azure

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

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

  • Шаблон командной строки разработчика Azure
  • Развертывание приложения в Orleans Azure
  • Масштабирование приложения до нескольких экземпляров

Необходимые компоненты

Получение и развертывание примера приложения

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

  1. Откройте терминал в пустом каталоге.

  2. Проверка подлинности в интерфейсе командной строки разработчика Azure с помощью azd auth login. Выполните действия, указанные средством для проверки подлинности в CLI с помощью предпочитаемых учетных данных Azure.

    azd auth login
    
  3. Получите пример приложения с помощью шаблона orleans-url-shortener AZD и azd init команды.

    azd init --template orleans-url-shortener
    
  4. Во время инициализации настройте уникальное имя среды.

    Совет

    Имя среды также будет использоваться в качестве имени целевой группы ресурсов. В этом кратком руководстве рекомендуется использовать msdocs-orleans-url-shortener.

  5. Разверните учетную запись Azure Cosmos DB для NoSQL с помощью azd up. Шаблоны Bicep также развертывают пример веб-приложения.

    azd up
    
  6. В процессе подготовки выберите подписку и нужное расположение. Дождитесь завершения процесса подготовки и развертывания. Процесс может занять около пяти минут.

  7. После завершения подготовки ресурсов Azure в выходные данные будет включен URL-адрес работающего веб-приложения.

    Deploying services (azd deploy)
    
      (✓) Done: Deploying service web
    - Endpoint: <https://[container-app-sub-domain].azurecontainerapps.io>
    
    SUCCESS: Your application was provisioned and deployed to Azure in 5 minutes 0 seconds.
    
  8. Используйте URL-адрес консоли для перехода к веб-приложению в браузере.

    Снимок экрана: работающее веб-приложение с сокращенным URL-адресом.

  9. В адресной строке браузера проверьте конечную точку shorten , добавив путь URL-адреса, например /shorten?url=https://www.microsoft.com. Страница должна перезагрузить и указать новый URL-адрес с сокращенным путем в конце. Скопируйте новый URL-адрес в буфер обмена.

    {
      "original": "https://www.microsoft.com",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  10. Вставьте сокращенный URL-адрес в адресную строку и нажмите клавишу "ВВОД". Страница должна перезагрузить и перенаправить вас по указанному URL-адресу.

Развертывание дополнительных служб

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

  1. С помощью терминала выполните настройку azd env setDEPLOY_AZURE_TABLE_STORAGE переменной среды, чтобы включить развертывание Azure Cosmos DB для NoSQL.

    azd env set DEPLOY_AZURE_TABLE_STORAGE true
    
  1. С помощью терминала выполните настройку azd env setDEPLOY_AZURE_COSMOS_DB_NOSQL переменной среды, чтобы включить развертывание Azure Cosmos DB для NoSQL.

    azd env set DEPLOY_AZURE_COSMOS_DB_NOSQL true
    
  1. Запустите azd provision , чтобы повторно развернуть архитектуру приложения с новой конфигурацией. Дождитесь завершения процесса подготовки. Процесс может занять около двух минут.

    azd provision
    

    Совет

    Кроме того, можно запустить azd up еще раз, что подготовит архитектуру и повторно разверните приложение.

Установка пакетов Nuget

Перед использованием зерна необходимо установить соответствующие Microsoft.Orleans.Clustering.* пакеты и Microsoft.Orleans.Persistence.* пакеты NuGet. Эти службы используют управление доступом на основе ролей для проверки подлинности без пароля, поэтому необходимо также импортировать Azure.Identity пакет NuGet.

  1. Измените текущий рабочий каталог на ./src/web/.

    cd ./src/web
    
  2. Azure.Identity Импортируйте пакет из NuGet с помощью dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  3. Microsoft.Orleans.Clustering.AzureStorage Импортируйте и Microsoft.Orleans.Persistence.AzureStorage пакеты.

    Пакет NuGet
    Кластеризация Microsoft.Orleans.Clustering.AzureStorage
    Сохраняемость Microsoft.Orleans.Persistence.AzureStorage
    dotnet add package Microsoft.Orleans.Clustering.AzureStorage --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.AzureStorage --version 8.*
    
  1. Azure.Identity Импортируйте пакет из NuGet с помощью dotnet add package.

    dotnet add package Azure.Identity --version 1.*
    
  2. Microsoft.Orleans.Clustering.Cosmos Импортируйте и Microsoft.Orleans.Persistence.Cosmos пакеты.

    Пакет NuGet
    Кластеризация Microsoft.Orleans.Clustering.Cosmos
    Сохраняемость Microsoft.Orleans.Persistence.Cosmos
    dotnet add package Microsoft.Orleans.Clustering.Cosmos --version 8.*
    dotnet add package Microsoft.Orleans.Persistence.Cosmos --version 8.*
    

Настройка и повторное развертывание примера приложения

Пример приложения в настоящее время настроен для создания кластера localhost и сохранения зерн в памяти. При размещении в Azure Orleans можно настроить использование более масштабируемого централизованного состояния с помощью службы данных в Azure.

  1. Затем добавьте следующие using директивы:

    using Azure.Identity;
    using Orleans.Configuration;
    
  2. Найдите и удалите текущий builder код конфигурации в файле src/web/Program.cs .

    builder.Host.UseOrleans(static siloBuilder =>
    {
        siloBuilder
            .UseLocalhostClustering()
            .AddMemoryGrainStorage("urls");
    });
    
  1. Замените конфигурацию примером builder , который реализует следующие основные понятия:

    • Добавлена проверка условной среды, чтобы обеспечить правильность работы приложения как в локальных сценариях разработки, так и в размещенных в Azure сценариях.
    • Метод UseAzureStorageClustering настраивает Orleans кластер для использования хранилища таблиц Azure и выполняет проверку подлинности с помощью DefaultAzureCredential класса.
    • Configure Используйте метод, чтобы назначить идентификаторы для Orleans кластера.
      • Это ClusterID уникальный идентификатор кластера, который позволяет клиентам и силосам взаимодействовать друг с другом.
      • Это ClusterID может измениться в разных развертываниях.
      • Это ServiceID уникальный идентификатор приложения, который используется внутренне Orleans и должен оставаться согласованным в разных развертываниях.
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = new Uri(builder.Configuration["AZURE_TABLE_STORAGE_ENDPOINT"]!);
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseAzureStorageClustering(options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .AddAzureTableGrainStorage(name: "urls", options =>
                {
                    options.ConfigureTableServiceClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. Замените конфигурацию примером builder , который реализует следующие основные понятия:

    • Добавлена проверка условной среды, чтобы обеспечить правильность работы приложения как в локальных сценариях разработки, так и в размещенных в Azure сценариях.
    • Метод UseCosmosClustering настраивает Orleans кластер для использования Azure Cosmos DB для NoSQL и выполняет проверку подлинности с помощью DefaultAzureCredential класса.
    • Configure Используйте метод, чтобы назначить идентификаторы для Orleans кластера.
      • Это ClusterID уникальный идентификатор кластера, который позволяет клиентам и силосам взаимодействовать друг с другом.
      • Это ClusterID может измениться в разных развертываниях.
      • Это ServiceID уникальный идентификатор приложения, который используется внутренне Orleans и должен оставаться согласованным в разных развертываниях.
    if (builder.Environment.IsDevelopment())
    {
        builder.Host.UseOrleans(static siloBuilder =>
        {
            siloBuilder
                .UseLocalhostClustering()
                .AddMemoryGrainStorage("urls");
        });
    }
    else
    {
        builder.Host.UseOrleans(siloBuilder =>
        {
            var endpoint = builder.Configuration["AZURE_COSMOS_DB_NOSQL_ENDPOINT"]!;
            var credential = new DefaultAzureCredential();
    
            siloBuilder
                .UseCosmosClustering(options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .AddCosmosGrainStorage(name: "urls", options =>
                {
                    options.ConfigureCosmosClient(endpoint, credential);
                })
                .Configure<ClusterOptions>(options =>
                {
                    options.ClusterId = "url-shortener";
                    options.ServiceId = "urls";
                });
        });
    }
    
  1. Выполните повторное azd deploy развертывание кода приложения в качестве контейнера Docker. Дождитесь завершения процесса развертывания. Процесс может занять около одной минуты.

    azd deploy
    

    Совет

    Кроме того, можно запустить azd up еще раз, что подготовит архитектуру и повторно разверните приложение.

Проверка поведения приложения

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

  1. В адресной строке браузера проверьте shorten конечную точку еще раз, добавив путь URL-адреса, например /shorten?url=https://learn.microsoft.com/dotnet/orleans. Страница должна перезагрузить и указать новый URL-адрес с сокращенным путем в конце. Скопируйте новый URL-адрес в буфер обмена.

    {
      "original": "https://learn.microsoft.com/dotnet/orleans",
      "shortened": "http://<container-app-name>.<deployment-name>.<region>.azurecontainerapps.io:<port>/go/<generated-id>"
    }
    
  2. Вставьте сокращенный URL-адрес в адресную строку и нажмите клавишу "ВВОД". Страница должна перезагрузить и перенаправить вас по указанному URL-адресу.

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

  1. В портал Azure перейдите к группе ресурсов, развернутой в этом кратком руководстве.

    Внимание

    Имя среды, указанное ранее в этом кратком руководстве, также является именем целевой группы ресурсов.

  1. Перейдите на страницу обзора учетной записи служба хранилища Azure.

  2. В области навигации выберите браузер хранилища.

  3. Разверните элемент навигации "Таблицы", чтобы обнаружить две таблицы, созданные следующими способамиOrleans:

    • OrleansGrainState: в этой таблице хранятся данные о постоянном состоянии, используемые приложением для обработки перенаправлений URL-адресов.

    • OrleansSiloInstances: эта таблица отслеживает важные данные silo для Orleans кластера.

  4. Выберите таблицу OrleansGrainState . Таблица содержит запись строки для каждого перенаправления URL-адреса, сохраняемого приложением во время тестирования.

    Снимок экрана: Orleans данные в хранилище таблиц Azure.

  1. Перейдите на страницу обзора учетной записи Azure Cosmos DB для NoSQL.

  2. В области навигации выберите Обозреватель данных.

  3. Обратите внимание на следующие контейнеры, созданные ранее в этом руководстве:

    • OrleansХранилище: в этой таблице хранятся данные о постоянном состоянии, используемые приложением для обработки перенаправлений URL-адресов.

    • OrleansКластер: эта таблица отслеживает важные данные силона для Orleans кластера.

Масштабирование приложения

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

  1. Вернитесь к группе ресурсов, развернутой в этом кратком руководстве.

  2. Перейдите на страницу обзора приложения "Приложения контейнеров Azure".

  3. В области навигации выберите "Масштаб".

  4. Выберите "Изменить" и "Развернуть", а затем перейдите на вкладку "Масштаб ".

  5. Используйте ползунок, чтобы задать значения минимальной и максимальной реплики 4. Это значение гарантирует, что приложение работает на нескольких экземплярах.

  6. Выберите "Создать", чтобы развернуть новую редакцию.

    Снимок экрана, на котором показано, как масштабировать приложение

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

Следующий шаг