Aplicación web escalable

Front Door
Functions
Service Bus
Web Apps

Este ejemplo de arquitectura muestra procedimientos de demostrada eficacia para mejorar la escalabilidad y el rendimiento en una aplicación web de Azure App Service.

GitHub logoHay disponible una implementación de referencia de esta arquitectura en GitHub.

Architecture

Aplicación web en Azure con escalabilidad mejorada

Descargue un archivo Visio de esta arquitectura.

Flujo de trabajo

Esta arquitectura se basa en la que se muestra en Aplicación web básica. Incluye los siguientes componentes:

  • Aplicación web . Una aplicación moderna típica podría incluir un sitio web y una o varias web API web de RESTful. Los clientes del explorador podrían consumir una API web mediante AJAX, y también las aplicaciones nativas o las aplicaciones del lado servidor podrían consumirla. Para conocer las consideraciones sobre el diseño de las API web, consulte la guía de diseño de API.
  • Front Door. Front Door es un equilibrador de carga de nivel 7. En esta arquitectura, enruta las solicitudes HTTP al front-end web. Front Door proporciona también un firewall de aplicaciones web (WAF) que protege la aplicación contra puntos vulnerables de la seguridad comunes. Front Door también se usa con una solución Content Delivery Network (CDN) en este diseño.
  • Aplicación de función. Use Function Apps para ejecutar tareas en segundo plano. Las funciones se invocan mediante un desencadenador como, por ejemplo, un evento del temporizador o un mensaje que se coloca en cola. Para las tareas con estado de ejecución prolongada, use Durable Functions.
  • Cola. En la arquitectura que se muestra aquí, la aplicación pone en cola las tareas en segundo plano mediante la colocación de un mensaje en una cola de Azure Service Bus. El mensaje desencadena una función de aplicación. Como alternativa, puede usar colas de Azure Storage. Para ver una comparación, consulte Colas de Storage y de Service Bus: comparación y diferencias.
  • Caché. Almacene datos parcialmente estáticos en Azure Cache for Redis.
  • Almacenamiento de datos. Use Azure SQL Database con datos relacionales. Para datos no relacionales, considere la posibilidad de usar Azure Cosmos DB.
  • Azure Cognitive Search. Use Azure Cognitive Search para agregar funcionalidades de búsqueda, como sugerencias de búsqueda, búsqueda aproximada y búsqueda específica del idioma. Azure Search se usa normalmente en combinación con otro almacén de datos, en especial si el almacén de datos principal requiere una coherencia estricta. En este enfoque, almacene los datos acreditado en el otro almacén de datos y el índice de búsqueda en Azure Search. Azure Search también se puede usar para consolidar un índice de búsqueda sencillo desde varios almacenes de datos.
  • Azure DNS. Azure DNS es un servicio de hospedaje para dominios DNS que permite resolver nombres mediante la infraestructura de Microsoft Azure. Al hospedar dominios en Azure, puede administrar los registros DNS con las mismas credenciales, API, herramientas y facturación que con los demás servicios de Azure.

Recomendaciones

Los requisitos pueden diferir de los de la arquitectura que se describe aquí. Use las recomendaciones de esta sección como punto de partida.

Aplicaciones de App Service

Se recomienda crear la aplicación web y la API web como aplicaciones de App Service independientes. Este diseño permite ejecutarlas en planes de App Service diferentes, por lo que se pueden escalar de forma independiente. Si inicialmente no necesita ese nivel de escalabilidad, puede implementar las aplicaciones en el mismo plan y moverlas más tarde a planes diferentes si es necesario.

Nota

Los planes Básico, Estándar, Premium y Aislado se facturan por las instancias de máquina virtual, no por aplicación. Consulte Precios de App Service.

Cache

Puede mejorar el rendimiento y la escalabilidad mediante Azure Cache for Redis para almacenar en caché algunos datos. Considere la posibilidad de usar Azure Cache for Redis para:

  • Datos de transacción parcialmente estáticos
  • Estado de sesión
  • Salida HTML Esto puede ser útil en aplicaciones que representan la salida HTML compleja.

Para instrucciones detalladas sobre cómo diseñar una estrategia de almacenamiento en caché, consulte la guía de almacenamiento en caché.

CDN

Use la funcionalidad de red CDN nativa de Front Door para almacenar en caché el contenido estático. La principal ventaja de una red CDN es reducir la latencia de los usuarios, ya que el contenido se almacena en caché en un servidor perimetral que está geográficamente próximo al usuario. CDN también puede reducir la carga sobre la aplicación, ya que el la aplicación no administra el tráfico. Front Door también ofrece aceleración de sitios dinámicos, lo que le permite ofrecer una mejor experiencia de usuario general para la aplicación web de la que estaría disponible solo con el almacenamiento en caché de contenido estático.

Nota

La red CDN de Front Door no está diseñada para proporcionar contenido que requiera autenticación.

Storage

Las aplicaciones modernas suelen procesan grandes cantidades de datos. Para escalarlos a la nube, es importante elegir el tipo de almacenamiento correcto. Estas son algunas recomendaciones básicas.

Qué desea almacenar Ejemplo Almacenamiento recomendado
Archivos Imágenes, documentos, archivos PDF Azure Blob Storage
Pares clave-valor Datos de perfil de usuario consultados por identificador de usuario Almacenamiento de tablas de Azure
Mensajes cortos diseñados para desencadenar procesamiento adicional Solicitudes de pedido Azure Queue Storage, cola de Service Bus o tema de Service Bus
Datos no relacionales con un esquema flexible que requiere consulta básica Catálogo de productos Base de datos de documentos, como Azure Cosmos DB, MongoDB o Apache CouchDB
Datos relacionales que requieren compatibilidad más completa con consultas, un esquemas estricto o fuerte coherencia Inventario de productos Azure SQL Database

Consulte Elección del almacén de datos apropiado.

Consideraciones

Estas consideraciones implementan los pilares del marco de buena arquitectura de Azure, que es un conjunto de principios guía que se pueden usar para mejorar la calidad de una carga de trabajo. Para más información, consulte Marco de buena arquitectura de Microsoft Azure.

Seguridad

En esta sección se enumeran las consideraciones de seguridad que son específicas de los servicios de Azure descritos en este artículo. No es una lista completa de procedimientos de seguridad recomendados para aplicaciones web. Si desea conocer algunas otras consideraciones de seguridad, consulte Protección de una aplicación en Azure App Service.

Restricción del tráfico entrante

Configure la aplicación para que acepte tráfico solo de Front Door. Esto garantiza que todo el tráfico pase por el firewall de aplicaciones web antes de llegar a la aplicación. Para más información, consulte ¿Cómo puedo hacer que Azure Front Door sea el único que tenga acceso a mi back-end?

Uso compartido de recursos entre orígenes

Si crea un sitio web y una API web como aplicaciones independientes, el sitio web no podrá realizar llamadas AJAX a la API en el lado cliente a menos que habilite CORS.

Nota

La seguridad del explorador impide que una página web realice solicitudes AJAX a otro dominio. Esta restricción se conoce como la directiva de mismo origen y evita que un sitio malintencionado lea datos confidenciales de otro sitio. CORS es una norma de W3C que permite que un servidor "se relaje" con la directiva del mismo origen de forma que permite algunas solicitudes entre orígenes y rechaza otras.

App Services tiene compatibilidad integrada con CORS, sin necesidad de escribir ningún código de aplicación. Consulte Consumo de una aplicación de API desde JavaScript con CORS. Agregue el sitio web a la lista de orígenes permitidos para la API.

Cifrado de SQL Database

Use Cifrado de datos transparente si necesita cifrar los datos en reposo en la base de datos. Esta característica realiza el cifrado y el descifrado en tiempo real de una base de datos completa (incluidas las copias de seguridad y los archivos de registros de transacciones) y no requiere realizar ningún cambio en la aplicación. El cifrado agrega alguna latencia, así que es conveniente separar los datos que deben estar protegidos en su propia base de datos y habilitar el cifrado únicamente para esa base de datos.

Optimización de costos

Use el almacenamiento en caché para reducir la carga en los servidores que proporcionan contenido que no cambia con frecuencia. Cada ciclo de representación de una página puede afectar al costo, porque consume proceso, memoria y ancho de banda. Estos costos se pueden reducir significativamente mediante el uso del almacenamiento en caché, especialmente en el caso de los servicios de contenido estático, como las aplicaciones de página única de JavaScript y el contenido de streaming multimedia.

Si la aplicación tiene contenido estático, use CDN para reducir la carga en los servidores front-end. En el caso de los datos que no cambian con frecuencia, use Azure Cache for Redis.

Las aplicaciones sin estado que están configuradas para la escalabilidad automática son más rentables que las aplicaciones con estado. En el caso de una aplicación ASP.NET que usa estado de sesión, almacénela en la memoria con Azure Cache for Redis. Para más información, consulte Proveedor de estado de sesión de ASP.NET para Azure Cache for Redis. Otra opción es usar Azure Cosmos DB como un almacén de estado de back-end a través de un proveedor de estado de sesión. Consulte Uso de Azure Cosmos DB como un proveedor de almacenamiento en caché y estado de sesión de ASP.NET.

Para más información, consulte la sección sobre costos en Marco de buena arquitectura de Microsoft Azure.

Considere la posibilidad de colocar una aplicación de función en un plan de App Service dedicado, de modo que las tareas en segundo plano no se ejecuten en las mismas instancias que controlan las solicitudes HTTP. Si las tareas en segundo plano se ejecutan de forma intermitente, considere la posibilidad de usar un plan de consumo, que se facture según el número de ejecuciones y recursos en lugar de por horas.

Use la calculadora de precios para calcular los costos.

Excelencia operativa

La excelencia operativa abarca los procesos de las operaciones que implementan una aplicación y la mantienen en ejecución en producción. Para más información, consulte Introducción al pilar de excelencia operativa. Una red clave de excelencia operativa consiste en automatizar las actividades operativas, incluidas las modificaciones de infraestructura, mediante procedimientos de DevOps.

Las instrucciones proporcionadas en la sección de consideraciones básicas de DevOps de la aplicación web son aplicables aquí, ya que es la base de esta arquitectura.

Eficiencia del rendimiento

Una de las ventajas principales de Azure App Service es la posibilidad de escalar la aplicación en función de la carga. Estas son algunas consideraciones que se deben tener en cuenta al planear el escalado de la aplicación.

Aplicación de App Service

Si la solución incluye varias aplicaciones de App Service, podría implementarlas en planes de App Service diferentes. Este enfoque permite escalarlas por separado porque se ejecutan en instancias independientes.

SQL Database

Aumente la escalabilidad de una base de datos SQL mediante el particionamiento de la base de datos. El particionamiento hace referencia a la creación de particiones de la base de datos de manera horizontal. El particionamiento permite escalar la base de datos horizontalmente mediante las herramientas de Base de datos elástica. Entre las posibles ventajas del particionamiento se incluyen:

  • Mejor rendimiento de las transacciones.
  • Las consultas pueden ejecutarse con mayor rapidez sobre un subconjunto de los datos.

Azure Front Door

Front Door puede realizar la descarga SSL y también reduce el número total de conexiones TCP con la aplicación web de back-end. Esto mejora la escalabilidad porque la aplicación web administra un volumen menor de protocolos de enlace SSL y conexiones TCP. Estas mejoras de rendimiento se aplican aunque se reenvíen las solicitudes a la aplicación web como HTTPS, debido al alto nivel de reutilización de la conexión.

Azure Search quita la sobrecarga que supone realizar búsquedas de datos complejos desde el almacén de datos principal, y puede escalarse para administrar la carga. Consulte Escalado de niveles de recursos para cargas de trabajo de indexación y consulta en Azure Search.

Colaboradores

Microsoft mantiene este artículo. Originalmente lo escribieron los siguientes colaboradores.

Autor principal:

  • Chad Kittel | Director de ingeniería de desarrollo de software

Para ver los perfiles no públicos de LinkedIn, inicie sesión en LinkedIn.

Pasos siguientes