¿En qué consiste Service Broker?

Service Broker ayuda a los programadores a crear aplicaciones asincrónicas de acoplamiento flexible en las que los componentes independientes funcionan conjuntamente para llevar a cabo una tarea. Estos componentes de aplicación intercambian mensajes que contienen la información necesaria para finalizar la tarea. En este tema se describen los siguientes aspectos de Service Broker:

  • Conversaciones

  • Coordinación y ordenación de mensajes

  • Programación asincrónica transaccional

  • Compatibilidad con aplicaciones de acoplamiento flexible

  • Componentes de Service Broker

Conversaciones

Service Broker está diseñado según las funciones básicas de envío y recepción de mensajes. Cada mensaje forma parte de una conversación. Cada conversación es un canal de comunicación confiable y persistente. Cada mensaje y conversación tienen un tipo específico que impone Service Broker para ayudar a los programadores a escribir aplicaciones confiables.

Nuevas instrucciones Transact-SQL permiten a las aplicaciones enviar y recibir estos mensajes de manera confiable. Una aplicación envía mensajes a un servicio, que es un nombre para un conjunto de tareas relacionadas. Una aplicación recibe mensajes de una cola, que es una vista de una tabla interna.

Los mensajes para la misma tarea forman parte de la misma conversación. En cada conversación, Service Broker garantiza que una aplicación recibe cada mensaje exactamente una vez en el orden en el que se envió. El programa que implementa un servicio puede asociar conversaciones relacionadas para el mismo servicio en un grupo de conversación, como se describe en Ventajas de Service Broker.

La seguridad basada en certificados ayuda a proteger los mensajes confidenciales y controla el acceso a los servicios. Una analogía es pensar en Service Broker como un servicio postal. Para mantener una conversación con un colega que se encuentra lejos, puede comunicarse mediante cartas enviadas a través del servicio postal. El servicio postal ordena y entrega las letras. Ambos retiran las cartas de sus buzones, las leen, escriben respuestas y envían nuevas cartas, hasta que la conversación finaliza. La entrega de cartas se produce de forma asincrónica, mientras ambos llevan a cabo otras tareas.

Dos usuarios intercambian correo mediante un servicio postal.

Los programas pueden usar Service Broker como un servicio postal para admitir conversaciones asincrónicas con otros programas. Los mensajes Service Broker funcionan como las cartas. El servicio de Service Broker es la dirección donde la oficina postal entrega las cartas. Las colas son los buzones que guardan las cartas después de entregadas. Las aplicaciones reciben los mensajes, actúan sobre los mismos y envían respuestas.

Cuando una aplicación envía un mensaje a un servicio Service Broker, se aísla de los detalles de la implementación de la aplicación en el otro extremo de la conversación. La aplicación receptora puede estar reconfigurada dinámicamente o reemplazarse con nuevo código sin afectar a la aplicación emisora. Se puede cerrar la aplicación receptora incluso temporalmente; el único impacto será que Service Broker sigue agregando mensajes nuevos a la cola hasta que se reinicie la aplicación receptora.

Coordinación y ordenación de mensajes

Service Broker controla las colas, una técnica de programación de base de datos común, de forma diferente a los productos tradicionales en dos aspectos clave:

  • Las colas de Service Broker están integradas en la base de datos.

  • Las colas coordinan y ordenan los mensajes relacionados.

Las colas integradas suponen que el mantenimiento y la administración normal de la base de datos también incluyen Service Broker. Normalmente, un administrador no tiene tareas de mantenimiento rutinarias relacionadas con Service Broker.

El marco Service Broker proporciona una interfaz Transact-SQL simple para enviar y recibir mensajes combinados con un conjunto de garantías fuertes para la entrega y el procesamiento de mensajes. Service Broker garantiza que un programa recibe cada mensaje en una conversación exactamente una vez en el orden en el que se envió el mensaje, no el orden en el que el mensaje entró en la cola. Los productos de cola tradicionales proporcionan mensajes en el orden en que entran en la cola. Esto exige que una aplicación determine el orden y la agrupación de los mensajes. Service Broker garantiza que dos lectores de cola no puedan procesar simultáneamente los mensajes de la misma conversación o el mismo grupo de conversaciones relacionadas.

Todas las conversaciones Service Broker tienen dos lados. El lado que inicia la conversación se denomina iniciador; el otro lado se denomina destino. Cada lado tiene un servicio; el servicio iniciador y el servicio de destino. Todos los servicios tienen una cola de mensajes asociada.

Lo siguiente muestra el intercambio de mensajes en una conversación de diálogo típica:

  • En el iniciador:

    • Un programa comienza la conversación.

    • El programa genera un mensaje que contiene los datos exigidos para realizar una tarea.

    • El programa envía el mensaje al servicio de destino.

  • En el destino:

    • El mensaje se coloca en la cola asociada al servicio de destino.

    • Un programa recibe el mensaje de la cola y realiza el trabajo.

    • El programa responde enviando un mensaje al servicio iniciador.

  • En el iniciador:

    • El mensaje de respuesta se coloca en la cola asociada al servicio iniciador.

    • Un programa recibe la respuesta y la procesa.

Este ciclo se repite hasta que el iniciador finaliza la conversación porque no tiene más solicitudes para enviar al destino.

Service Broker permite establecer prioridades de 10 (alta) a 1 (baja) para cada conversación. Así se asegura que el trabajo de prioridad baja no bloquea el trabajo de la prioridad superior. Los sistemas de Service Broker se pueden configurar para ofrecer distintos niveles de servicio. Para obtener más información, vea Prioridades de conversación.

Service Broker administra las tareas más difíciles que conllevan la creación de aplicaciones de mensajería. Entre estas difíciles tareas se incluyen la coordinación de mensajes, la entrega confiable de mensajes, el bloqueo y los lectores de cola de inicio. Esto permite a los programadores de base de datos concentrarse en cómo resolver los problemas comerciales.

Programación asincrónica transaccional

En la infraestructura de Service Broker, la entrega de mensajes entre aplicaciones es transaccional y asincrónica. Debido a que la mensajería Service Broker es transaccional, si una transacción se revierte, se revierten todas las operaciones de Service Broker en la transacción. Entre éstas se incluyen las operaciones de envío y recepción. En una entrega asincrónica, el Motor de base de datos controla la entrega mientras la aplicación continúa ejecutándose. Para mejorar la escalabilidad, Service Broker proporciona mecanismos para iniciar automáticamente programas que procesan una cola cuando existen tareas pendientes. Para obtener más información, vea Activación de Service Broker.

La programación asincrónica ayuda a los programadores a escribir aplicaciones que usan las colas. Muchas aplicaciones de base de datos incluyen tablas que funcionan como colas de trabajo que se deben realizar según permitan los recursos. Las colas pueden ofrecer dos ventajas a las aplicaciones de base de datos:

  • Una aplicación puede responder a un usuario interactivo inmediatamente después de colocar su solicitud de trabajo en una cola. La aplicación no tiene que esperar a que se complete todo el trabajo asociado con la solicitud antes de responder. La solicitud en cola se procesa cuando los recursos están disponibles. Esto permite que la base de datos continúe dando respuesta a los usuarios interactivos a la vez que usan los recursos disponibles eficazmente.

  • El trabajo implicado en una solicitud única se puede dividir a veces en varias unidades de trabajo procesadas como transacciones independientes. En este caso, una aplicación de base de datos puede iniciar cada unidad de trabajo colocando una solicitud en una cola. Service Broker amplía esta idea, permitiendo a las aplicaciones expandirse el trabajo por varias instancias de Service Broker en equipos independientes.

La codificación de las aplicaciones para secuenciar y procesar elementos en colas correctamente resulta a menudo complicada. Los programadores pueden usar la funcionalidad Service Broker generada en el motor de base de datos para simplificar la codificación necesaria para implementar colas de base de datos correctamente.

Compatibilidad con aplicaciones de acoplamiento flexible

Service Broker admite aplicaciones de acoplamiento flexible. Estas aplicaciones están formadas por varios programas que envían y reciben mensajes de forma independiente. Dichas aplicaciones deben contener las mismas definiciones para los mensajes intercambiados y deben definir la misma estructura total para la interacción entre los servicios. Sin embargo, las aplicaciones no tienen que ejecutarse al mismo tiempo, ejecutarse en la misma instancia SQL Server o compartir detalles de implementación. Una aplicación no necesita conocer la ubicación física ni la implementación del otro participante de la conversación.

Componentes de Service Broker

Service Broker tiene tres tipos de componentes:

  • Componentes de conversación. Los grupos de conversación, las conversaciones y los mensajes conforman la estructura de tiempo de ejecución de una aplicación de Service Broker. Las aplicaciones intercambian mensajes como parte de una conversación. Cada conversación forma parte de un grupo de conversación y un grupo de conversación puede contener varias conversaciones. Cada conversación Service Broker es un diálogo. Un diálogo es una conversación en la que exactamente dos participantes intercambian mensajes. Para obtener más información sobre los componentes de conversación, vea Arquitectura de la conversación.

  • Componentes de definición de servicio. Éstos son los componentes de tiempo de diseño que especifican la estructura básica de las conversaciones que utiliza la aplicación. Definen los tipos de mensajes, el flujo de conversación y el almacenamiento de base de datos de la aplicación. Para obtener más información sobre los componentes de definición de servicio, vea Arquitectura de servicio.

  • Componentes de red y de seguridad. Estos componentes definen la infraestructura usada para intercambiar mensajes entre instancias del motor de base de datos. Para ayudar a los administradores de base de datos a administrar entornos cambiantes, Service Broker les permite configurar estos componentes independientemente del código de la aplicación. Para obtener más información sobre los componentes de red y de seguridad, vea Redes y seguridad remota.

Los componentes de definición de servicio, los componentes de red y los componentes de seguridad forman parte de los metadatos de la base de datos y de la instancia de SQL Server. Los grupos de conversación, las conversaciones y los mensajes forman parte de los datos que contiene la base de datos.