Archivo de Diciembre de 2017 Azure Load Balancer es un Balanceador de Carga de nivel 4 (Transporte: TCP y UDP) capaz de distribuir el tráfico entrante entre un conjunto de VMs disponibles/saludables de Azure, en base a un algoritmo de distribución de carga basado en hashes. De este modo conseguimos una interesante solución de Alta Disponibilidad y Rendimiento para nuestras Aplicaciones en Azure, tanto para el balanceo del tráfico externo (ej: tráfico de Internet hacia Frontales Web) como interno (tráfico de Frontales Web a Servidores de Aplicaciones), soportando también NAT (Network Address Translation) para enrutar tráfico entre direcciones IP públicas y privadas. Microsoft Azure ofrece la solución Cloud Services, como una forma de desplegar Aplicaciones en Azure en formato PaaS (Platform as a Service), escalable, económica, y de confianza, bajo un modelo que distingue entre dos tipos de Roles: Web Roles y Worker Roles. Tiene las ventajas de permitir la conexión remota a las máquinas, la instalación de SW, y la posibilidad de conexión directa a una Virtual Network (VNet) de Azure, pero sin la complejidad de un modelo IaaS (Infrastructure as a Service) en el que tenemos que administrar completamente toda la infraestructura. Una solución intermedia entre el servicio de Web Apps y las Azure VMs. Azure ofrece múltiples soluciones de conectividad, desde conexiones privadas con alto ancho de banda y baja latencia para conectar redes On-Premise a Azure (ExpressRoute), pasando por conexiones VPN desde redes On-Premise o desde equipos individuares a Virtual Network (VNets) de Azure, hasta la creación de túneles VPN contra las VPC de Amazon AWS. Todo completo abanico de posibilidades de interconexión, para satisfacer todas nuestras necesidades de una forma fácil y segura, entre las que podremos elegir (o las podemos complementar entre sí) en función de nuestro caso concreto y de nuestro presupuesto. Azure Active Directory (Azure AD) es la solución de Directorio y el Sistema de Gestión de Identidades de Microsoft en Azure, a través del cual, se puede gestionar la identidad y acceso de usuarios a las Aplicaciones, sean On-Premise on en Azure, independientemente del tipo de dispositivo (iOS, Android, Windows, MacOS, etc.). Permite tanto la Sincronización de Usuarios (Same Sign-On) como la Federación de Usuarios (Single Sign-On: SSO), así como la integración con Proveedores de Identidad externos (ej: Facebook, Google, Linkedin, Amazon, etc.). Todo esto lo convierte en una solución flexible e ideal para facilitar la autenticación en nuestras Aplicaciones. Azure Service Bus es el principal servicio de entrega de mensajes en Azure, que garantiza la entrega de mensajes entre dos extremos aunque no estén conectados simultáneamente, soportando transacciones, detección de duplicados, expiración basada en tiempo, etc. Una solución ideal para la comunicación entre diferentes Aplicaciones (Service Bus Queues, Topics, & Relays) y el consiguiente desacoplamiento de las mismas, así como también sirve de mecanismo de comunicación entre Aplicaciones y Dispositivos/Usuarios (Notification Hubs), o bien entre Dispositivos/Usuarios y las Aplicaciones (Event Hubs), en todos los casos de una forma fácil y rápida, tanto para entornos Cloud como On-Premise. Azure CosmosDB es la evolución de DocumentDB, una base de datos NoSQL de Clave-Valor orientada a Documentos (datos no-estructurados), que ha sido diseñada, construida, y optimizada para JSON. Es una base de datos altamente escalable, elástica, segura (cifrada por defecto), consistente y altamente disponible, con un mínimo esfuerzo de mantenimiento y de desarrollo, y con soporte para replicación geográfica entre diferentes regiones Azure. Es la base de datos Mundial, la alternativa a Amazon DynamoDB. Se ofrece en formato DBaaS (Database as a Service) dentro de Azure, en modalidad de pago por uso. Ofrece soporte nativo para JavaScript (en lugar de T-SQL), SQL, transacciones sobre documentos JSON sin esquema, y programación de Procedimientos Almacenados, Triggers, y UDFs (Funciones Definidas por el Usuario). Además soporta múltiples APIs de acceso, como SQL, MongoDB, Cassandra, Azure Table, y Gremlin (Graph), facilitando la migración a Azure de aplicaciones existentes. Azure Storage es la solución de almacenamiento de Microsoft en Azure, masivamente escalable (podemos almacenar terabytes de información y satisfacer las más ambiciosas necesidades de Big Data), de pago por uso (no por capacidad), accesible desde REST API y desde los lenguajes de programación más comunes, replicado siempre al menos en tres sitios y con opciones adicionales de replicación geográfica, con soporte nativo de Tablas NoSQL y Colas (Queues), y con diferentes opciones de seguridad para compartir el acceso con terceras personas y aplicaciones (ej: Shared Access Signatures - SAS, Stored Access Policy, etc). Una solución muy completa, y uno de los principales pilares de Azure. Azure Resource Manager (ARM) es la nueva forma de desplegar y gestionar los recursos en Azure, definiendo Recursos, Grupos de Recursos, y Plantillas. En lugar de gestionar los Recursos de una forma individual y plana, con ARM podemos definir un Grupo de Recursos (una agrupación lógica o contenedor de Recursos) que puede representar un servicio completo (ej: un Blog, una aplicación de gestión, una granja de SharePoint, etc.) del cuál contendrá todos los Recursos necesarios, y sobre el que podremos delegar la administración. Además, podremos definir una Plantilla (Resource Group Template o ARM Template) utilizando una descripción JSON, que define un modelo de recursos del servicio, que podremos desplegar como una unidad lógica, de forma fácil y rápida. Azure Traffic Manager es un balanceador de tráfico de red integrado como un servicio de Azure, que permite distribuir el tráfico de red entre distintos destinos (end-points), los cuales pueden estar dentro o fuera de Azure, sean Web Apps, Azure VMs, o cualquier otro tipo de destino tcp. Es una solución basada en DNS y en la monitorización de la salud/disponibilidad de los destinos (end-points), que nos permite elegir entre diferentes algoritmos de gestión de tráfico, permitiendo enrutar el tráfico al destino más cercano (ej: distribución geográfica), repartir el tráfico entre varios destinos (distribution: según los pesos asignados), o enrutado en caso de fallos (failover). Las Web Apps de Microsoft Azure, son la principal solución del Cloud de Microsoft para la publicación de Aplicaciones Web en formato PaaS (Platform as a Service) en un entorno compartido, fácilmente escalable, tanto en Horizontal como en Vertical. Sus funciones de Auto-Scale nos permitirán definir un número mínimo y máximo de Instancias, así como un conjunto de reglas con condiciones para aumentar y disminuir el número de Instancias de forma automática y garantizar un nivel de servicio apropiado con un uso mínimo y racional de recursos, que en un segundo nivel podríamos exponenciar con Azure Traffic Manager. ¿Y si aún así se me queda pequeño y/o necesito un mayor control de la seguridad? Entonces el App Service Environment (ASE) es para tí. Ta to pensao. Azure CLI 2.0 (conocida también como X-Plat CLI en su primera versión Azure CLI 1.0) es una interfaz de comandos Open Source y multi-plataforma (Windows, Linux y MacOS) para gestionar los recursos de Microsoft Azure. De este modo, podemos realizar acciones sobre Microsoft Azure (crear, modificar, consultar, o eliminar objetos de Microsoft Azure), de una forma fácil y rápida, directamente desde la Línea de Comandos de Linux/MacOS (Bash) o desde el Comand Prompt de Windows (incluso desde el bash de Windows 10), sin tener que utilizar PowerShell. Además, también lo tenemos disponible directamente desde el Portal de Azure, a través del Azure Cloud Shell, y por lo tanto disponible en cualquier momento y desde cualquier lugar. El Cacheo (Caching) ayuda a mejorar el rendimiento y escalabilidad de las Aplicaciones, creando una copia temporal de los datos que son accedidos más frecuentemente, sobre un almacenamiento rápido y cercano a la Aplicación. El patron Cache-Aside propone una solución al problema de refresco de la Caché, utilizando una Caché inteligente de Lectura y Escritura (Read/Write-Through Caching), de tal modo que las Aplicaciones puedan acceder directamente a la Caché, si el dato solicitado no estuviese en caché lo recuperaría de su almacenamiento original de forma transparente, y además, se permitiría modificar el contenido de la Caché, lo cual realizaría la correspondiente actualización sobre el almacenamiento original para su persistencia. Una técnica común en el Desarrollo de Aplicaciones (por ejemplo para la realización de trabajos pesados) es la utilización de una Cola de Mensajes Asíncrona, de tal modo, que ciertos trabajos puedan ser solicitados asíncronamente a través de dicha Cola, asegurando así que el Front-End o la Lógica de Negocio, no se quedan bloqueados hasta la finalización de tal trabajo, favoreciendo una mejor experiencia de usuario. Una aproximación correcta, pero en la que un único Consumidor (Receiver) podría actuar como un cuello de botella. Por ello, el patrón Competing Consumers define múltiples Consumidores coordinados entre sí, especialmente útil en entornos con cantidades muy variables de peticiones por su escalabilidad. Un Patrón de Diseño que podemos aplicar para gestionar el acceso a recursos que puedan estar fuera de servicio temporalmente (por picos de carga, red, etc.) es el Circuit Breaker, que simula el funcionamiento de un interruptor eléctrico (switch) inteligente, que permite anticiparse a ciertos errores (al contrario que el patrón Retry, que actúa siempre a posteriori) para intentar gestionarlos de una forma más efectiva. Para ello, necesitamos implementar un Proxy, con una lógica basada en una Máquina de Estados, capaz de prever si un recurso no va a estar disponible, para directamente ni siquiera intentar su acceso, con el objetivo de facilitar la recuperación rápida de dicho recurso al evitar reintentos que podrían sobrecargarlo incluso más. Internet es un entorno susceptible a fallos transitorios (ej: indisponibilidad temporal y timeouts por picos de carga de trabajo y por las comunicaciones de red), motivo por el cual, debemos garantizar que nuestras aplicaciones son capaces de anticiparse a esta situación, y manejar de una forma elegante y transparente para los usuarios, los intentos de conexión a los servicios y recursos de red que necesite (y encuentre temporalmente indisponible), mejorando así la estabilidad de nuestra Aplicación y la experiencia de usuario. En muchos casos son fallos que se corrigen solos automáticamente, y nuestra Aplicación sólo tiene que reintentar una o dos veces, para conseguir acceder con éxito, dependiendo del tipo de error. |