Ejercicio: implementación de una arquitectura de n niveles

Completado

Recuerde el escenario de migración de una aplicación desde el entorno local a Azure. ¿Qué aspecto podría tener esta arquitectura? La organización tiene una aplicación no crítica que es una buena candidata para probarla. Es una aplicación escrita para solucionar el problema tan común de qué elegir para comer.

Piense en la última vez que salió a comer con un grupo de amigos o compañeros de trabajo. ¿Le resultó sencillo tomar una decisión o dedicó mucho tiempo a intentar averiguar lo que todos querían decir cuando afirmaron que les gusta todo? Vamos a implementar una aplicación basada en una arquitectura de tres niveles que puede ayudarle a solucionar este problema. Esta aplicación permite realizar sugerencias de comida y todos los usuarios pueden votar por su opción preferida.

Se ha creado una plantilla para esta aplicación que implementa cada nivel como recursos de Azure, y después implementa el código real. Se trata de una aplicación ASP.NET Core MVC implementada en servidores Linux, pero este estilo de arquitectura se puede usar independientemente de las plataformas de sistema operativo o SDK subyacentes.

Esta es una visualización general de lo que se implementa con esta plantilla.

Visualización de la arquitectura de n niveles que se va a implementar en esta unidad.

Implementación de una arquitectura de n niveles

  1. Ejecute el comando siguiente para iniciar la implementación. El comando az deployment group create inicia una implementación en el grupo de recursos de espacio aislado con el archivo de plantilla y los parámetros que se especifican. También se especifica una cadena aleatoria de 32 caracteres generada a partir del comando head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 como parámetro de contraseña.

    La implementación tarda aproximadamente cinco minutos en completarse.

    az deployment group create \
      --resource-group <rgn>[sandbox resource group name]</rgn> \
      --template-uri  https://raw.githubusercontent.com/MicrosoftDocs/mslearn-n-tier-architecture/master/Deployment/azuredeploy.json \
      --parameters password="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
    

Vista de los recursos implementados y prueba de la aplicación

Una vez completada la implementación, pruebe la aplicación. Ejecute el comando siguiente, que devolverá la dirección URL de la aplicación.

az deployment group show \
  --output table \
  --resource-group <rgn>[sandbox resource group name]</rgn> \
  --name azuredeploy \
  --query properties.outputs.webSiteUrl

Abra un explorador web y visite el sitio. Verá un cuadro al que puede agregar opciones de comida. Después de agregar una opción, al seleccionarla se añade un voto.

Captura de pantalla de la aplicación de votación de ejemplo.

Tres niveles de "¿Qué hay para comer?"

La complejidad de esta aplicación es deliberadamente mínima. Es una aplicación divertida, pero sirve para demostrar una arquitectura de tres niveles. La plantilla crea dos máquinas virtuales, una base de datos de Azure SQL y los recursos necesarios para admitir estos recursos, como discos, NIC y redes virtuales. También implementa el código para ejecutar la aplicación en cada nivel. La red virtual que se ha implementado tiene dos subredes, una para el nivel de presentación y otra para el nivel de aplicación, con un límite de seguridad para cada uno.

También se han aplicado etiquetas a los recursos como parte de la implementación para reflejar el nivel que admite el recurso (tier:presentation, tier:application, tier:data). Las etiquetas son un método de aplicar metadatos a los recursos de Azure y, en este caso, permiten filtrar fácilmente los recursos para cada nivel.

Veamos con más detalle cada nivel. Esta es una visualización detallada de los recursos que se acaban de implementar.

Visualización de la arquitectura de n niveles que se va a volver a implementar en esta unidad.

Nivel de presentación

Ejecute el comando siguiente para enumerar los recursos de nivel de presentación.

az resource list --tag tier=presentation --output table

En la arquitectura de tres niveles a la que se ha hecho referencia, esto representa el nivel de presentación. El código responsable de la interfaz web se ha implementado en este nivel, presenta la interfaz de usuario y controla directamente las solicitudes de usuario. Este nivel solo se ocupa de la presentación del sitio web al usuario. No tiene acceso directo a los datos y no incluye la lógica de negocios.

Se ha implementado un servidor web llamado demo-web-vm, en el que se ejecuta el sitio web al que se va a acceder. El servidor tiene una interfaz de red, demo-web-vm-nic, con una dirección IP pública, demo-web-vm-nic-pip asociada, la que se ha recuperado anteriormente. También tiene un grupo de seguridad de red demo-web-nsg, que solo permite el tráfico entrante desde Internet a través del puerto 80 (HTTP). Esto restringe el acceso al sitio web y evita el acceso por medio de puertos innecesarios que se podrían usar de forma malintencionada. Este nivel se comunica con el de presentación a través de HTTP para satisfacer la solicitud del usuario.

Nivel de aplicación

Ejecute el comando siguiente para enumerar los recursos de nivel de aplicación.

az resource list --tag tier=application --output table

El nivel de aplicación se ha implementado en una máquina virtual denominada demo-biz-vm que ejecuta la lógica de negocios. También tiene una interfaz de red, demo-biz-vm-nic, pero esta solo tiene una dirección IP privada, y no se proporciona ningún mecanismo para la conectividad de entrada directa al servidor. También tiene un grupo de seguridad de red, demo-biz-nsg, que solo permite el acceso desde la subred del nivel de presentación.

Este nivel es el conducto para que la aplicación acceda a los datos. En este servidor se implementa el código que expone la API que llama al nivel de presentación. Aquí no se almacena ningún dato y los usuarios no pueden acceder directamente a este servidor. Para acceder a los datos y responder a las solicitudes de usuario, este nivel se comunica con el nivel de datos a través de comandos de T-SQL.

En este nivel se incorpora un ejemplo sencillo de lógica de negocios a la aplicación. Las sugerencias de comida se validan en el lado servidor y se comparan con una lista de valores aceptables. Si intenta agregar algo que no está en esta lista, no se acepta, y se devuelve un mensaje con las opciones de comida válidas.

Nivel de datos

Ejecute el comando siguiente para enumerar los recursos del nivel de datos.

az resource list --tag tier=data --output table

El nivel de datos es un servidor de Azure SQL Database, demo-dbserver-abc123 (se agrega una cadena aleatoria al nombre del servidor para que sea único global). Este servidor almacena los datos para la aplicación en una base de datos denominada demo-sqldb. Este nivel de la aplicación se ocupa únicamente del almacenamiento de datos y proporciona un método para acceder a ellos, en este caso, a través de T-SQL, que la aplicación ejecuta en la base de datos. En este nivel no se controla ninguna lógica de negocios, ni se presentan datos al usuario.

Este nivel expone la conectividad a través del puerto 1433, mediante un punto de conexión de servicio de red virtual. Los puntos de conexión de servicio de red virtual son un mecanismo para conectar servicios PaaS (como Azure SQL Database) a una subred y restringen la conectividad únicamente a los recursos dentro de esa subred.

También es un ejemplo de uso de servicios PaaS en lugar de máquinas virtuales IaaS para ejecutar un nivel de una aplicación. Las aplicaciones de n niveles se suelen considerar aplicaciones basadas en máquinas virtuales, pero no es un requisito. Mediante el uso de servicios PaaS en lugar de máquinas virtuales, se reducen los costos, aumenta la seguridad y se reducen los requisitos de administración.