Ejercicio: Escalado manual de una aplicación web

Completado

Si espera un aumento en el tráfico, debería escalar horizontalmente el sistema. También podría realizar un escalado horizontal en respuesta a una disminución en el rendimiento.

En el ejemplo del sistema de reservas de hoteles, aumenta el número de instancias de la aplicación web cuando prevé tráfico adicional debido a un evento especial, una oferta especial o fluctuaciones estacionales. Después, cuando la demanda disminuía, volvía a escalar el sistema.

En este ejercicio, crea un plan de App Service e implementará una aplicación web con este plan. Después, supervisa el rendimiento de la aplicación web bajo carga. A continuación, escala horizontalmente la aplicación y comprueba que el plan ha mejorado el rendimiento de la aplicación.

En este ejercicio se usa una aplicación web de ejemplo que implementa una API web. La API web expone operaciones POST y GET de HTTP para crear y recuperar las reservas de los clientes en un sitio web de reservas de hotel. Las reservas no se guardan. La operación GET simplemente recupera datos ficticios.

En el ejercicio también se ejecuta una aplicación cliente que simula varios usuarios que emiten operaciones POST y GET de forma simultánea. Esta aplicación proporciona la carga de trabajo que usa para probar el rendimiento de la aplicación web antes y después del escalado.

Creación de un plan de App Service y de una aplicación web

Importante

Para realizar este ejercicio, se necesita una suscripción de Azure propia y puede que se apliquen cargos. Si aún no tiene una suscripción de Azure, cree una cuenta gratuita antes de comenzar.

  1. Inicie sesión en Azure Portal.

  2. En el menú de Azure Portal o en la página Inicio, seleccione Crear un recurso. Aparecerá el panel Crear un recurso.

  3. En el panel de menús de la izquierda, en Categorías, seleccione Web, busque y seleccione Aplicación web y luego seleccione Crear. Se abrirá el panel Crear aplicación web.

  4. En la pestaña Aspectos básicos, escriba los valores siguientes para cada opción.

    Nota:

    La aplicación web debe tener un nombre único. Se recomienda usar algo parecido a <nombre o iniciales>hotelsystem. Use este nombre siempre que vea <your-webapp-name> en este ejercicio.

    Setting Valor
    Detalles del proyecto
    Suscripción Seleccione la suscripción de Azure que quiera usar para este ejercicio.
    Grupo de recursos Seleccione el vínculo Crear nuevo y cree un grupo de recursos nuevo denominado mslearn-scale.
    Detalles de instancia
    Nombre Consulte la nota antes de la tabla. Escriba un nombre único que pueda recordar más adelante en este ejercicio.
    Publicar Código
    Pila en tiempo de ejecución .NET 6 (LTS)
    Sistema operativo Windows
    Region Acepte el valor predeterminado.
    Plan de App Service
    Plan de Windows Acepte el valor predeterminado.
    Plan de precios Acepte el valor predeterminado.
  5. Seleccione Revisar y crear>Crear. Espere a que la aplicación web se cree e implemente.

Compilación e implementación de la aplicación web

  1. En la barra de tareas de Azure, seleccione el icono de Cloud Shell para abrir Azure Cloud Shell y ejecute el siguiente comando para descargar el código fuente del sistema de reservas de hoteles.

    Captura de pantalla del icono de Cloud Shell en la barra de tareas.

    git clone https://github.com/MicrosoftDocs/mslearn-hotel-reservation-system.git
    
  2. Vaya a la carpeta mslearn-hotel-reservation-system/src.

    cd mslearn-hotel-reservation-system/src
    
  3. Compile las aplicaciones para el sistema del hotel. Hay dos aplicaciones: una aplicación web que implementa la API web para el sistema y una aplicación cliente que se usa para la prueba de carga de la aplicación web.

    dotnet build
    
  4. Prepare la aplicación web HotelReservationSystem para la publicación.

    cd HotelReservationSystem
    dotnet publish -o website
    
  5. Vaya a la carpeta website, que contiene los archivos publicados. Comprima los archivos e impleméntelos en la aplicación web que creó en la tarea anterior. Copie el código siguiente en el Bloc de notas y reemplace <your-webapp-name> por el nombre de la aplicación web, pegue el bloque de código editado en Cloud Shell y ejecútelo.

    cd website
    zip website.zip *
    az webapp deploy --src-path website.zip --name <your-webapp-name> --resource-group mslearn-scale
    
  6. Use el explorador web para ir a http://<your-webapp-name>.azurewebsites.net/api/reservations/1. Aparece un documento JSON que contiene los detalles del número de reserva 1.

    Captura de pantalla de la aplicación web en ejecución en la que se muestran los detalles del número de reserva 1 en formato JSON.

Supervisión del rendimiento de la aplicación web antes del escalado horizontal

  1. Vuelva a Cloud Shell y vaya a la carpeta ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient.

    cd ~/mslearn-hotel-reservation-system/src/HotelReservationSystemTestClient
    
  2. Edite el archivo App.config de esta carpeta mediante el editor de código.

    code App.config
    
  3. Quite la marca de comentario de la línea en la que se especifica ReservationsServiceURI y reemplace el valor NOMBRE DE SU SITIO WEB por el nombre de la aplicación web. El archivo debería tener un aspecto similar al de este ejemplo.

    <?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>
    

    Nota:

    El valor NumClients de este archivo especifica el número de clientes que pueden intentar conectarse simultáneamente a la aplicación web y realizar una operación. El trabajo consiste en crear una reserva y, después, ejecutar una consulta para capturar los detalles de la reserva. Todos los datos usados son falsos. No se conservan en ningún lugar. Deje este valor establecido en 100.

  4. Para guardar el archivo, seleccione Ctrl+S.

  5. Edite el archivo HotelReservationSystemTestClient.csproj en esta carpeta mediante el editor de código.

    code HotelReservationSystemTestClient.csproj
    
  6. Edite la línea que especifica el TargetFramework, de modo que coincida con la pila runtime que seleccionó para la aplicación web. Cambie el valor TargetFramework por netcoreapp7.0. El archivo debería tener un aspecto similar al de este ejemplo.

    <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. Para guardar el archivo, seleccione Ctrl+S y cierre el editor de código presionando Ctrl+Q.

  8. Recompile la aplicación cliente de prueba con la nueva configuración.

    dotnet build
    
  9. Ejecute la aplicación cliente. Ve que aparecen varios mensajes cuando los clientes empiezan a trabajar, realizan reservas y ejecutan consultas. Deje que el sistema se ejecute durante un par de minutos. Las respuestas son lentas y pronto las solicitudes de cliente comienzan a producir errores HTTP 408 (tiempo de espera).

    dotnet run
    

    Captura de pantalla de una aplicación cliente en ejecución en la que se muestran las respuestas y los mensajes de error que se producen.

  10. En Azure Portal, seleccione Ir al recurso para abrir la aplicación web.

  11. En el panel de menús, seleccione Supervisión y luego seleccione Métricas.

  12. En la parte derecha de la barra de menús del panel de la aplicación web, seleccione el intervalo de tiempo Hora local: Últimas 24 horas (Automático), luego seleccione Últimos 30 minutos y por último Aplicar.

  13. En el panel, bajo Título del gráfico, agregue las siguientes métricas al gráfico:

    • Seleccione Agregar métrica y, en la lista desplegable Métrica, Tiempo de CPU. Para Agregación, seleccioneSuma.
    • Seleccione Agregar métrica y, en la lista desplegable Métrica, Errores del servidor HTTP. Para Agregación, seleccioneSuma.
    • Seleccione Agregar métrica y, en la lista desplegable Métrica, Http 4xx. Para Agregación, seleccioneSuma.
    • Seleccione Agregar métrica y, en la lista desplegable Métrica, seleccione Tiempo de respuesta. En Agregación, seleccione Promedio.
  14. En la barra de menús de la derecha, seleccione Anclar al panel. Aparece el panel Anclar al panel; seleccione la pestaña Crear nuevo.

  15. En la lista desplegable Nombre del panel, escriba el nombre de la aplicación web y, después, seleccione Crear y anclar.

  16. Permita que el sistema se ejecute durante cinco minutos para que se estabilice y anote el tiempo de CPU, el número de errores HTTP 4xx y el tiempo medio de respuesta. Debería ver un número significativo de errores HTTP 4xx. Estos errores son errores de tiempo de espera HTTP 408. El tiempo medio de respuesta es de varios segundos. Es posible que vea algún error ocasional de servidor HTTP, en función de cómo el servidor web haga frente a la carga.

    Captura de pantalla en la que se muestran las métricas de rendimiento de la aplicación web antes del escalado horizontal.

  17. Deje la aplicación cliente en ejecución mientras realiza la tarea siguiente.

Escalado horizontal de la aplicación web y comprobación de la mejora del rendimiento

  1. En Azure Portal, seleccione el nombre de la aplicación web (App Service) y, en el panel de menús de la izquierda, en Configuración, seleccione Escalar horizontalmente (plan de App Service). Aparecerá el panel Escalabilidad horizontal (plan de App Service).

  2. En la pestaña Configurar, seleccione Escala manual y establezca el Recuento de instancias en 5. Seleccione Guardar.

    Captura de pantalla de la página Configurar del plan de App Service, en la que se muestra el escalado horizontal a cinco instancias.

  3. Cambie a la instancia de Cloud Shell en la que se ejecuta la aplicación cliente. Debería ver que se producen menos errores en las solicitudes, aunque todavía se agota el tiempo de espera.

  4. Ejecute la aplicación durante otros cinco minutos. A continuación, vaya al gráfico en el que se muestran las métricas de la aplicación en el panel de Azure Portal. Debería ver que el tiempo de CPU aumenta considerablemente, ya que ahora hay cinco veces más potencia de CPU disponible. El tiempo medio de respuesta debería disminuir, al igual que el número de errores HTTP 4xx. En este gráfico se muestra un conjunto típico de resultados. Se indica el punto en el que se ha producido el escalado horizontal.

    Captura de pantalla en la que se muestran las métricas de rendimiento de la aplicación web después del escalado horizontal a cinco instancias.

  5. Si quiere experimentar un poco más, pruebe a aumentar el recuento de instancias del plan de App Service a 10. El número máximo de instancias admitidas por el nivel S1 es 10. Debería observar un aumento adicional en el tiempo de CPU, así como una disminución en el tiempo de respuesta y los errores HTTP 4xx.

  6. Vuelva a la instancia de Cloud Shell en la que se ejecuta la aplicación cliente. Seleccione Entrar para detener la aplicación.

  7. En Azure Portal, vuelva a establecer el recuento de instancias en 1. Seleccione la aplicación web y, en el panel de menús, seleccione Escalar horizontalmente (plan de App Service). En la pestaña Configurar, establezca el recuento de instancias en 1 y seleccione Guardar.