Consideraciones a tener en cuenta sobre el rendimiento

Todas las entidades de mensajería de Service Bus para Windows Server (colas, temas, suscripciones) se almacenan en contenedores. Cada contenedor solo está asociado con una base de datos que almacena físicamente la entidad y todos sus mensajes. Una base de datos puede servir a un contenedor. Si se crea un nuevo contenedor, también se crea una nueva base de datos. Cuando se crea una cola o un tema, Service Bus para Windows Server asigna esa entidad a un contenedor. Todos los mensajes se almacenan en la base de datos de ese contenedor. Todas las suscripciones a un tema se almacenan en el mismo contenedor que el tema.

Una granja de servidores de Service Bus para Windows Server consta de uno o de tres nodos. Cada nodo ejecuta un servicio de puerta de enlace de Service Bus para Windows Server y un servicio de agente de mensajería de Service Bus para Windows Server. Cada uno de los contenedores es localizado por uno de los agentes de mensajería. Service Bus para Windows Server intenta distribuir los contenedores de la forma más equitativa posible entre todos los agentes de mensajería disponibles. Si un agente de mensajería falla, todos los contenedores que se cargaron por el agente fallido se mueven a los agentes restantes. Todas las operaciones en las que esté implicada una entidad determinada son procesadas por el agente que haya cargado el contenedor que contiene dicha entidad. Para obtener más información, vea el Service Bus para Windows Server Información general sobre la arquitectura.

Directrices de rendimiento

En esta sección se discuten las optimizaciones que se pueden adoptar para mejorar el rendimiento.

Consideraciones a tener en cuenta sobre el hardware

El rendimiento total de una granja de servidores de Service Bus para Windows Server está limitado por tres factores:

  1. La capacidad de cálculo de los nodos de la granja de servidores.

  2. La capacidad de proceso y la configuración del disco duro de los equipos de SQL Server.

  3. El ancho de banda de la conexión de red entre los nodos de la granja de servidores y los equipos de SQL Server.

Sugerencia

Para lograr un alto rendimiento, utilice un equipo dedicado para las bases de datos de SQL Server, no para uno de los nodos de la granja.

Si pretende implementar un gran número de colas y temas, deberá prever la ejecución de varios contenedores de mensajes en varios servidores de SQL. Mientras que Service Bus para Windows Server asignará de manera dinámica los contenedores de mensajes (bases de datos) a los nodos de la granja, la colocación de colas y temas de Service Bus para Windows Server (con sus mensajes) en las bases de datos tiene lugar durante la creación de la entidad.

Sugerencia

Para obtener un rendimiento óptimo, utilice al menos tantos contenedores como nodos en la granja.

Sugerencia

Para un número elevado de colas y temas, prevea la creación de tres veces más contenedores de mensajes que los nodos existentes en la granja (por ejemplo, cree 9 contenedores de mensajes para una granja con tres nodos).

Sugerencia

Cree sus contenedores de mensajes antes de crear las colas y los temas de Service Bus para Windows Server.

Optimizaciones de SQL Server

El rendimiento de la mayoría de escenarios de mensajería está vinculado a la entrada y salida del servidor de SQL. Tenga en cuenta los siguientes puntos para optimizar el servidor de SQL que aloja las bases de datos de contenedores de Service Bus para Windows Server.

  • Configure SQL Server de tal modo que los registros y los datos se almacenen en discos distintos.

  • Optimice los discos duros de SQL Server para un mejor rendimiento de escritura. Si el servidor está equipado con memoria suficiente, SQL Server apenas lee los datos del disco. Si el servidor está equipado con más de dos discos, liste los discos que contienen los almacenes de registros y datos.

  • Reserve espacio para los archivos de registros y datos y desactive el crecimiento automático.

  • Configure SQL Server de tal modo que haya un archivo TempDB por cada núcleo de procesador.

  • Cambie el tamaño de la unidad de asignación NTFS a 64 KB.

Active el redireccionamiento

Por defecto, un cliente envía su solicitud a una de las puertas de enlace de Service Bus para Windows Server. La puerta de enlace envía la solicitud al agente que ha cargado el contenedor que contiene esa entidad. Si la función de redireccionamiento está activada, el cliente envía una solicitud de redireccionamiento a la puerta de enlace de Service Bus para Windows Server. La puerta de enlace responde con la dirección del agente. El cliente envía todas las solicitudes directamente al agente. Para activar la función de redireccionamiento, establezca la propiedad EnableRedirect del generador como true. Por ejemplo:

MessagingFactorySettings factorySettings = new MessagingFactorySettings();
factorySettings.NetMessagingTransportSettings.EnableRedirect = true;
MessagingFactory factory = MessagingFactory.Create("address", factorySettings);

Tenga en cuenta que el mecanismo de redireccionamiento está disponible solo para las solicitudes que se envían mediante TCP. Las solicitudes de HTTP siempre pasan a través de una puerta de enlace. Además, tenga en cuenta que la función de redireccionamiento no es compatible con algunos equilibradores de carga.

Aumento del tamaño de la caché interna

El aumento del tamaño de la caché permite que los procesos del agente de Service Bus para Windows Server almacenen más datos en la memoria. Por ejemplo, para aumentar el tamaño de la caché por defecto de 500 MB a 1 GB, ejecute los siguientes cmdlets de PowerShell en uno de los nodos de la granja de Service Bus para Windows Server:

Set-SBRuntimeSetting  -Name messagecachesizeperentity -Value 1048576000
Stop-SBFarm
Start-SBFarm

Desactivación de los pedidos de mensajería

Los mensajes enviados a un tema se deben mover a todas las suscripciones. Este proceso se puede acelerar si Service Bus para Windows Server tiene permiso para mover los mensajes a suscripciones improcedentes. Las mejoras del rendimiento de un factor tres se observan si los pedidos de mensajería están desactivados.

Para desactivar los pedidos de mensajería para un tema, establezca la propiedad SupportOrdering de la clase TopicDescription en false. Por ejemplo:

TopicDescription topicDescription = new TopicDescription(topicName)
{
    SupportOrdering = False
};
namespaceManager.CreateTopic(topicDescription);

Escenario

En esta sección se discuten las recomendaciones sobre cómo lograr un mejor rendimiento para varios escenarios clave. Tenga en cuenta que los números del rendimiento exacto varían en función del escenario exacto y de las características específicas usadas.

Optimización de entidades individuales (o varias) con alta capacidad

Una cola o un tema único se almacena en un único contenedor, el cual está basado en una única base de datos y gestionado por un único agente. Si se utiliza el protocolo TCP, solo uno de los nodos de la granja estará activo; los otros nodos de la granja sirven como nodos de reserva para que la granja pueda recuperarse del fallo de un nodo. Get-WFServiceVersion y la Add-SBHost

Las pruebas comparativas indican los siguientes resultados:

  Rendimiento de los mensajes Número de operaciones (envío + recepción)

Cola única

20.000 mensajes/segundo

40.000 mensajes/segundo

Tema único con 1 suscripción

14.200 mensajes/segundo

28.400 mensajes/segundo

Tema único con 1000 suscripciones

26 mensajes/segundo

26.000 mensajes/segundo

Las pruebas comparativas se realizaron con una granja de servidores de tres nodos y un nodo de SQL Server dedicado. Se midió el envío y recepción de mensajes simultáneos con un tamaño de 1 KB. Todos los nodos estaban equipados con una CPU de cuatro núcleos (2.3 GHz), 24 GB de RAM y Ethernet de 1 GBit/s.

Optimización de varias entidades con alta capacidad

Una granja de tres nodos debería tener al menos tres contenedores. En una situación ideal habría nueve (o más) contenedores, de modo que los nodos de la granja se mantuvieran igualmente cargados si uno de los nodos de la granja fallara.

Nuestro sistema de prueba se encargó de 1500 colas, cada una de las cuales tenía un rendimiento de mensajes (envío + recepción) equivalente a 1 mensaje por segundo.

Vea también

Otros recursos

Best Practices for Performance Improvements Using Service Bus Brokered Messaging

Fecha de compilación:

2013-07-25