Cómo Azure.com opera en Azure: Principios de Diseño, Mejores Prácticas, Tecnología y Arquitectura

Cómo Azure.com opera en Azure

Hace poco Aaron Hogue, Senior Software Engineer en Microsoft, publicó dos artículos sobre cómo Azure.com (sitio web de la plataforma) se opera todos los días. Desde Azure en Español nos pareció interesante acercarte ese contenido técnico con principios, prácticas, y lineamientos de arquitectura, en tu idioma.

Las publicaciones originales son las siguientes: parte 1 y parte 2. No hemos hecho una traducción literal, dado que para eso existen métodos automatizados como traducción de Bing y Google que pueden hacerlo. Lo que hemos realizado es el análisis, adaptación y personalización del contenido + experiencias volcadas en los artículos originales para que cualquier persona, independientemente de su nivel técnico en Azure, pueda sacarle provecho.

Esperamos que te sea de utilidad y te invitamos a sumarte con tus comentarios, consultas y aportes para que el conocimiento esté al alcance de todos.

Azure.com: más que un sitio web

Azure.com es más que un sitio web: es la cara visible de la plataforma que Microsoft intenta posicionar en todo momento: nada más y nada menos que Azure.

Imaginen lo siguiente: son dueños de una compañía que ofrece servicios en la nube y construye frameworks de desarrollo. Seguramente vamos a querer que nuestro propio contenido se aloje allí, funcione rápido, no falle, y sea de calidad. Quedaríamos muy mal parados si algo falla, cuando son esos mismos servicios los que vendemos al exterior. Este es el caso de azure.com en vistas del fabricante: Microsoft.

Teniendo en cuenta esto, los profesionales responsables de su diseño, mantenimiento, actualización y operación tienen un gran peso sobre sus hombros. En esta publicación, originalmente extraída del blog de Microsoft Azure, te vamos a contar detalles sobre el diseño, tecnología y arquitectura de esta gran aplicación web (nos referimos a Azure.com), para que podamos entender y extraer las mejoras prácticas y quizás tenerlos en cuenta en nuestros proyectos.

De hecho, según Microsoft, en Azure.com “se practica lo que se predica”: siguiendo los principios y consejos que el gigante de Redmond propone a sus clientes en relación a ingeniería de software sostenible.

Historia de Azure.com

Azure.com es el sitio web de la plataforma Azure, que recibe millones de visitas diarias, está disponible en 27 idiomas y brinda información sobre soluciones Azure, experiencias a través de demos online, y diversas calculadoras de precios y retornos de inversión. Todo su contenido está disponbible para todo el mundo, en varias monedas, y diferentes públicos.

Para conocer su historia (al menos en alto nivel) te mostramos 3 grandes hitos del sitio:

  • Año 2013: Azure.com comienza su vida en el popular CMS Umbraco de código abierto. En ese moento Azure comercializaba siete servicios divididos en cuatro categorías: informática, servicios de datos, servicios de aplicaciones y red.
  • Año 2015: Azure.com pasa a una aplicación ASP.NET Model View Controller (MVC), construida por Microsoft y alojada en Azure. Ahora la plataforma tiene 16 servicios en las cuatro categorías antes mencionadas.
  • Año 2020: Azure.com continúa ampliando su compatibilidad con más categorías de contenido. Hoy, el sitio web describe más de 200 ofertas de Azure, incluidos los servicios, capacidades y características de Azure.
Azure.com timeline of supported products and services.

Contenidos de Azure.com

Como plataforma de contenido, Azure.com se conforma de contenido estático y contenido dinámico:

  • Contenido estático: fundamentalmente descripciones de productos y características que son consultados por millones de usuarios en todo momento.
  • Contenido dinámico: como componentes interactivos que permiten a los visitantes personalizar los detalles, comodisponibilidad del servicio en 61 regiones (la cual cambia dinámicamente), la página de actualizaciones de Azure que mantiene a las personas informadas sobre los cambios de la plataforma, búsquedas dinámicas, y una sección de precios que permite calcular y compartir estimaciones de costos complejos abarcando todas las regiones, más de 200 servicios en múltiples mercados, y 24 monedas distintas.

Pensemos, por unos segundos, la complejidad que (fundamentalmente) el contenido dinámico representa: Azure.com necesita comunicarse con sistemas externos a su ámbito de control, en pos de poder extraer, analizar y mostrar toda esta información en tiempo real para cualquier usuario que querrá accederla en forma rápida, consistente y segura. Y, además, con el agregado que si algo falla, no solo impacta en la experiencia del visitante, sino que también podría incrementar la confianza de los usuarios a los propios servicios de Azure. ¡Qué gran desafío!

Como canal de marketing, Azure.com también alberga demostraciones. Por ejemplo, experiencias interactivas en el navegador para mostrar los beneficios de Azure Cognitive Services, transmisión de medios para contar historias, y una compleja calculadora de costo total de propiedad (TCO) para estimar los ahorros de migración en la nube en 27 idiomas y 12 regiones.

¿Qué servicios de Azure se utilizan para facilitar que todo esto funcione, de manera global, y altamente disponible? ¿Cómo se operan las actualizaciones, correcciones y cambios de contenido? A partir de aquí, vamos a contarte un poco más sobre esto, un tanto más “techie”. ¿Seguimos?

Arquitectura General

Azure.com está alojada en el método de entrega PaaS, que significa “Plataforma como Servicio”. Cuenta con balanceo de tráfico en todo el mundo y una disponibilidad del 99,99%, con tiempos de respuesta menores a los 100 milisegundos por cada solicitud.

¿Cómo es esto posible? ¿Cómo podemos asegurar que realmente es así? Vamos a repasar algunos principios de diseño y conceptos de arquitectura aplicados a esta aplicación web:

  • Azure.com es una aplicación web compleja, que está organizada en varios niveles y que utiliza PaaS tanto como es posible. PaaS ahorra tiempo y esfuerzos de administración, y menos inversión dedicada a la infraestructura y operaciones significa más tiempo para crear una experiencia superadora para el usuario final. La plataforma se ocupará de actualizaciones a nivel sistema operativo, aprovisionamiento de capacidad según demanda, equilibrio de carga, etc.
  • Azure.com utiliza y combina, para llegar a las métricas antes mencionadas, más de 25 servicios de Azure entre los cuales se destacan: Azure Front Door, que enruta las solicitudes HTTP al front-end, y Azure App Service, una plataforma de alojamiento de aplicaciones web totalmente administrada (por Microsoft 🤣).

A continuación, te mostramos un esquema lógico en alto nivel de los principales componentes de la aplicación web y su interacción:

Diagram of a high-level view of the global Azure.com architecture.
  • Nótese que a la izquierda se pueden observar servicios de red, que proporcionan los puntos finales de acceso seguro y conectividad para los usuarios, sin importar en qué parte del mundo se encuentren. Estos servicios ayudan a que el contenido esté disponible más rápido, evitando errores, para todos.
  • A la derecha se encuentran los servicios DevOps, que facilitan la tarea de desarrolladores de software, la integración continua de código (CI) y el despliegue continuo (CD)y automatizado para poder subir actualizaciones periódicas de la aplicación minimizando errores humanos.
  • Por último, en el medio existen uan variedad de servicios PaaS para cómputo, almacenamiento, seguridad y monitoreo, que juntos garantizan que los contenidos sean entregados a los servicios de red de la manera más sana, optimizada y eficiente posible.

Como podemos comprobar, la arquitectura de Azure.com combina varios servicios (preferentemente PaaS) de Azure. La interacción de estos servicios permite bajar tiempos de respuesta locales, garantizar entrega rápida según zona geográfica, disponibliidad local y zonal del servicio, balanceo de carga entre regiones ante eventuales errores en centros de datos, y además adaptarse a las demandas de tráfico cambiantes según promociones, campañas de marketing u otro evento que pueda haber generado mayor (o menor) tráfico hacia el sitio.

Una vez presentado el mapa general, vamos a analizar ahora los principales componentes de red, cómputo, almacenamiento, monitoreo y seguridad con un poco más de detalle. En caso que seas nuevo en Azure, este análisis te ayudará a comenzar a reconocer los componentes y su responsabilidad. ¡Sigamos!

Análisis de Principales Componentes

Vamos a hacer un corte detallado y veremos un diagrama lógico específico de la arquitectura regional y la interacción, justamente, de Azure App Service con otros componentes clave:

Diagram of the regional architecture hosted in App Service.

En forma sintética:

  • Se utilizan Slots para generar entornos aislados que pueden representar ambientes como desarrollo, staging y producción. Un Slot nos proporciona un ambiente con sus propias URLs y configuraciones, y si bien están aislados también nos facilitan el intercambio de contenido rápido entre ellos para así mantener la disponibilidad de la aplicación. Se suelen utilizar para despliegues, donde una vez que estamos seguros que la aplicación funciona bien en el ambiente de staging podemos generar un intercambio casi inmediato dicho slot con el de producción.
  • Se utiliza una infraestructura regional de almacenamiento, para facilitar el alojamiento de archivos estáticos, la distribución en caché, y la indexación rápida de contenido, en pos de facilitar que el usuario final encuentre lo que busca.
  • Por ultimo, y alojado en forma global, la seguridad del acceso a APIs externas está garantizado con Azure Key Vault, de modo tal que las configuraciones no tienen que responsabilizarse por las credenciales a utilizar, ni los certificados a presentar.

Ahora bien, estos no son los únicos componentes específicos que hacen posible que Azure.com esté disponible para todos. Vamos a hacer una recorrida un poco más detallada sobre otros servicios de Azure utilizados y qué función cumplen en la arquitectura general.

Azure DNS

Azure DNS permite tener una disponibilidad del 100% de servidores de nombres (NS, o “Name Servers”), y tiempos de respuesta rápidos ante solicitudes de resolución de nombres y registros específicos. Se utilizan alias de DNS en Azure.com para los tipos de registro CNAME y ANAME. Azure DNS proporciona todos estos servicios a un valor muy bajo, y disponibile para cualquier cliente del mundo.

Azure Front Door

El servicio Azure Front Door permite la divisón TCP de baja latencia, compatibilidad con HTTP/2, y equilibrio de carga global. Su utilización en Azure.com permitió tener una reducción de RTT (round-trip delay time), es decir el tiempo de ida y vuelta, menor a los 100 milisegundos por solicitud, dado que los clientes sólo necesitan conectarse a nodos de borde (edge), y no directamente al origen.

Para la continuidad del negocio, Azure Front Door admite el sondeo de estado, un patrón de resiliencia que remueve las regiones poco saludables en la respuesta al cliente. Además, en caso de una eventualidad, Azure.com tiene sitios de respaldo, a los cuales se accede mediante enrutamiento basado en prioridad. De esta manera, se implementa una topología basada en “activo/pasivo”, permitiendo a los administradores un patrón de conmutación por error controlado.

Web Application Proxy

WAF, conocido como Web Application Firewall, nos ayuda en reforzar las medidas de seguridad de la plataforma gracias al conjunto de reglas de protección contra bots y protección contra los 10 ataques principales de OWASP para la capa de aplicación. OWASP significa “Open Web Application Security Project”, y es una comunidad online que proporciona artículos, metodologías, documentación, herramientas y tecnologías que contribuyen en forma gratuita a hacer una internet más segura.

Además, Azure.com utiliza reglas personalizadas de WAF para bloquear el tráfico de ciertas geografías, IPs y URLs que son consideradas maliciosas. La idea de esto es que el tráfico no llegue al origen, y se bloquee antes.

Content Delivery Network

Un punto crítico en Azure.com es reducir los tiempos de carga en el cliente, los costos asociados a la transferencia y facilitar la seguridad global de la aplicación ante ataques. Para ello el equipo de Microsoft utiliza CDNs, o también conocido como “Content Deliver Netowork”:

  • De esta manera, se ayuda a reducir el ancho de banda consumido y a mantener bajos los costos de Azure (si, costos en forma interna de Microsoft, ¡pero costos al fin!).
  • Además, la utilización de CDNs mejora el rendimiento al utilizar almacenamiento en cache de los archivos estáticos. Si no se utilizaría CDN, los nodos de origen (de los App Services) deberían de manejar cada solicitud de archivos estáticos para servirlos al cliente.
  • Como plus, CDN es también compatible con la protección contra el ataque distribuido de denegación de servicio, lo que mejora sustancialmente la seguridad de toda la aplicación.

Azure App Service

Un servicio destacado es App Service de Azure, y actualmente es el servicio seleccionado para alojar las cargas de cómputo de Azure.com. Son muchas las funcionalidades que provee Azure App Service en formato PaaS, lo que significa que no debemos invertir tiempos de gestión de infraestructuras ni máquinas vrituales, como así tampoco actualizaciones de sistemas operativos, marcos de aplicación, etc.

Como dijimos antes, Azure App Service proporciona muchas características clave, y Azure.com utiliza las siguientes:

  • AlwaysOn (siempre activo), lo que garantiza que el application pool no tiene tiempos de inactividad y siempre está preparado para recibir nuevas solicitudes aunque pase un fragmento de tiempo entre una y otra.
  • Application Initialization facilita la ejecución de acciones de preparación personalizadas de la aplicación, previos al intercambio de datos con el cliente. De esta manera, se pueden brindar experiencias consistentes en cualquier lugar del sitio web.
  • Patrones de implementación existentes como “blue-green deployments” reducen el riesgo de no disponibilidad cuando se ejecutan dos ambientes idénticos, que justamente son llamados “blue” y “green”, y se requiere implementar en producción sin pérdida de servicio.
  • Con técnicas de redundancia geográfica, Azure.com está distribuido con Azure App Service en 12 geografías distintas, es decir centros de datos distintos. De esta manera, si un centro de datos sufre un problema, el resto seguirá atendiendo las solicitudes.
  • En el caso de desastres en una iplmementación, y en pos de mejorar el MTTR (mean time to recovery, o “tiempo medio de recuperación”), se utilizan Slots de App Service. De esta manera, si una app falla, se intercambia al estado anterior en forma inmediata (rollback).
  • Por último, pero no menos importante, Azure.com utiliza el de escalado horizontal que permite manejar picos de tráfico específicos. Este escalado horizontal (es decir agregar nodos uno al lado del otro para soportar más tráfico) utiliza la función de escalado automático en base a métricas de Azure Monitor para solicitudes por segundo por nodo. Utilizar cargas de trabajo mínimas (es decir, evitar el escalado vertical) y en caso que necesitemos simplemente agregar nodos adicionales (es decir, escalado horizontal) también contribuye a contaminar menos el planeta.

Azure Monitor

Azure Monitor permite la supervisión pasiva sobre Application Insights, Log Analytics y Azure Data Explorer. Azure.com confía en las alertas creadas con este servicio para genear modelos de salud basados en configuraciones, de modo tal que los ingenieros que mantienen la aplicación se enteren cuando la misma se esteá portando mal antes que los clientes se lo digan.

CPU consumption by datacenter.
Azure Monitor

Por ejemplo, y como vemos en la imagen anterior, se puede monitorear el uso de CPU e identificar picos no frecuentes en nodos, de modo tal que se genere una alerta y un equipo específico de trabajo de Azure.com revise la anomalía antes que los usuarios finales noten una baja de servicio.

Application Insights

Application Insights es una característica de Azure Monitor, y es usada para registros de telemetría del lado cliente y servidor. De esta manera, Azure.com la utiliza para supervisar el rendimiento de las páginas, las excepciones, dependencias lentas, generando perfiles dinámicos y multi-plataforma.

Application Insights también proporciona compatibilidad con OpenTelemetry para el rastreo distribuido a través de los límites y dependencias del dominio de la aplicación. Esta característica permite la trazabilidad desde el lado del cliente hasta el nivel de servicio o los datos de back-end, facilitando una experiencia lo logueo completa.

Azure.com, desde el desarrollo, utiliza activamente los SDKs de Application Insights para lograr un monitoreo de punta a punta, como hemos comentado antes, sobre cada página y funcionalidad.

Integración y Entrega Continua

Pero no todo es tecnología y servicios. Azure.com tiene detrás a un equipo grande que trabaja en el proyecto y, en el mejor de los casos, busca tener las mejores prácticas y acuerdos metodológicos para llegar a los objetivos que se propone en cada uno de los sprints. Este equipo utiliza Azure DevOps Services para coordinar sus esfuerzos:

  • Los documentos técnicos internos se alojan en Azure Wikis.
  • El trabajo se trackea y sigue en Azure Boards, para identificar la velocidad de los sprints.
  • Se utilizan Pipelines de Build (compilación) y Deploy (despliegue) con Azure Pipelines.
  • Y se gestionan los paquetes de la aplicación con Azure Artifacts.

El equipo de Azure.com envía, según indican, cientos de solicitudes (pull requests) diarios como parte del proceso de construcción, y los pipelines de CI / CD implementan múltiples actualizaciones, todos los días, en los entornos de producción alrededor del mundo. De esta manera, y utilizando una única herramienta para administrar todo el ciclo de vida de desarrollo de software simplifica la curva de aprendizaje para el equipo de ingeniería y los (muchos) clientes internos que tiene la plataforma.

Conclusiones

Como hemos visto, Azure.com es el resultado de una arquitectura que combine servicios de nube en Azure, con desarrollo de software y prácticas ágiles de desarrollo de soluciones. En este recorrido técnico hemos conocido varios servicios de Microsoft Azure, y como entre ellos se potencian para lograr los mejores tiempos de respuesta, en una infraestructura global y altamente disponible, que podemos probar cada vez que ingresamos al sitio web de Microsoft Azure y utilizamos sus funciones.

En forma particular, el proceso de lectura de las publicaciones originales, su análisis, y creación de esta publicación adaptada fue una actividad muy divertida, donde aprendí y disfruté de conocer algunos detalles de un gran proyecto de software.

Espero que te haya resultado de utilidad. Me encantaría leer comentarios y tener feedback sobre qué te pareció, y por supuesto conocer cómo utilizas Microsoft Azure en tus proyectos.

¡Nos estamos leyendo!

Pablo Ariel Di Loreto

Pablo Ariel Di Loreto

View all posts
5 4 votes
Valora la Publicación
Subscribe
Notify of
guest
3 Comentarios
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Alfredo
Alfredo
3 months ago

Muy buena publicación para conocer cómo aprovechar los servicios de Azure. Gracias!

yeison__oc
yeison__oc
2 months ago

Gracias por el artículo, muy agradable de leer.

Angeles Soriano
Angeles Soriano
Editor
Reply to  yeison__oc
2 months ago

Hola yeison__oc! Nos alegra mucho que te haya gustado el artículo.
¡Te esperamos online! ¡Saludos!

3
0
Would love your thoughts, please comment.x
()
x