Etiquetas

Con la escala elástica proporcionada por la plataforma Azure, la curva de oferta puede asemejarse mucho a la curva de demanda (en lugar de tener una gran cantidad de capacidad adicional para responder a la carga máxima).

Con la escala elástica, el costo de bienes se controla mediante:

  • El número de unidades de escala empleadas en una solución; máquinas virtuales, cuentas de almacenamiento, etc.

 

  • La eficiencia del trabajo se logra eficazmente con estas unidades de escala.

Nos referimos al volumen de trabajo que se puede realizar para una determinada cantidad de capacidad como, por ejemplo, la densidad de la aplicación. Los servicios y frameworks más densos permiten que se realice un mayor volumen de trabajo para una determinada implementación de los recursos; es decir, la mejora de la densidad habilita la reducción de la capacidad implementada (y del costo), o la capacidad de absorber la carga adicional con la misma capacidad implementada. La densidad se controla mediante dos factores clave:

  • La eficiencia con la que se realiza el trabajo dentro de una unidad de escala. Esta es la forma tradicional de optimización del rendimiento: administrar la contención y los bloqueos de subprocesos, optimizar los algoritmos, ajustar las consultas SQL, etc.

 

  • La eficiencia con la que se coordina el trabajo entre las unidades de escala. En una situación donde los sistemas se componen de grandes números de unidades menores, estas se deben de combinar eficazmente para proporcionar eficiencia. Esto implica a los frameworks y las herramientas que se comunican a través de los componentes, como las pilas de mensajes SOAP (por ejemplo, WCF), las ORM (como Entity Framework), las llamadas TDS (código de cliente de SQL) y la serialización de objetos (por ejemplo, los contratos de datos o JSON).

Además de las técnicas de optimización tradicionales usadas en un único equipo (o base de datos), la optimización de la comunicación y de las operaciones distribuidas es crítico para la entrega de un servicio escalable y eficaz de Azure, por ejemplo:

Llamadas en bloque, no locuaces. Para cada operación distribuida (es decir, una que tiene como resultado una llamada de red) hay cierta sobrecarga  serialización, procesamiento, etc. del paquete. Para minimizar la cantidad de sobrecarga, intente procesar los lotes en un número menor de operaciones “en bloque”, en lugar de usar un gran número de operaciones “locuaces”. Hay que tener presente que el proceso por lotes de operaciones al por menor aumenta la latencia y la exposición a la pérdida potencial de datos. Los ejemplos de comportamiento correcto del procesamiento por lotes son:

  • SQL. Ejecute varias operaciones en un único lote.

 

  • Servicios REST y SOAP (como WCF). Aproveche las interfaces de operaciones centradas en mensajes, en lugar de usar un estilo RPC locuaz, y considere un enfoque basado en REST si es posible.

 

  • Almacenamiento de Azure (blobs, tablas, colas). Publique varias actualizaciones en un lote en vez de hacerlo individualmente.

Impacto de la serialización. Mover datos entre equipos (así como dentro y fuera del almacenamiento duradero) requiere normalmente que los datos se serialicen en un formato de conexión. La eficacia (es decir, el tiempo que se tarda y el espacio usado) de esta operación domina rápidamente el rendimiento global de la aplicación en los sistemas grandes.

  • Aproveche los frameworks de serialización, que son muy eficaces.

 

  • Utilice JSON para la comunicación con los dispositivos o para aplicaciones interoperables.

 

  • Utilice la serialización binaria eficaz (por ejemplo, protobuf o Avro) para la comunicación entre servicios cuando pueda controlar ambos extremos.

Utilice frameworks eficaces. Hay muchos frameworks enriquecidos disponibles para el desarrollo, con grandes conjuntos sofisticados de características. El inconveniente de muchos de estos frameworks consiste en que a menudo se incurre en un costo de rendimiento por características soportadas.

  • Aísle los servicios y las API de cliente detrás de interfaces genéricas para permitir el reemplazo o la ejecución en paralelo, por ejemplo, proporcione una capa de almacenamiento en caché acoplable trabajando con una interfaz genérica, en lugar de usar una implementación concreta (como Caching de Azure).