Dentro de las tecnologías que estuve investigando para realizar el tema de mensajería
en el proyecto fueron los broker services y llegue a encontrar que además de poder
ser manejado atravez de java y net cada uno con sus respectivas tecnologías esto también
podría manejarse desde la base de datos, hablo exactamente de Sql Server.
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 aspectos fundamentales de Service Broker:
¿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 aspectos fundamentales 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
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 conversation,
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.
Las nuevas instrucciones Transact-SQL permiten a las aplicaciones enviar y recibir
los mensajes de forma segura. 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 reciba 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 forma de entender Service Broker consiste en compararlo con el servicio postal.
Para mantener una conversación con un amigo que está lejos, puede comunicarse mediante
cartas enviadas a través del servicio postal, que ordena y entrega las cartas. 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 sucede de forma
"asincrónica", mientras los dos llevan a cabo otras tareas.
En la analogía del servicio postal, las cartas son los mensajes. El servicio de
Service Broker es la dirección a la que la oficina postal entrega las cartas. Las
colas son los buzones que guardan las cartas una vez entregadas. Las aplicaciones
reciben los mensajes, actúan sobre los mismos y envían respuestas.
Un programa que utiliza Service Broker mantiene conversaciones con otros programas
de forma similar a la entrega postal.
No hay que saber específicamente cuándo lee su amigo el correo o escribe la respuesta.
De igual forma, una aplicación que utiliza Service Broker no tiene que conocer cómo
otro servicio procesa el mensaje, cómo se entrega o cuándo la otra aplicación va
a procesar el mensaje.
Entre las características y ventajas se incluyen:
-
La integración de bases de datos mejora el rendimiento de la aplicación y simplifica
la administración.
-
Ordenación y coordinación de mensajes para un desarrollo de aplicaciones simplificado.
-
El acoplamiento flexible de las aplicaciones proporciona flexibilidad de carga de
trabajo.
-
El bloqueo de mensajes relacionados permite que más de una instancia de una aplicación
procese mensajes de la misma cola sin una sincronización explícita.
-
La activación automática permite que las aplicaciones se amplíen según el volumen
de mensajes.
El diseño integrado de Service Broker proporciona ventajas para el rendimiento y
la administración de la aplicación.
La integración con SQL Server permite la mensajería transaccional sin la sobrecarga
y complejidad añadidas de un coordinador externo de transacciones distribuidas.
Una aplicación recibe uno o más mensajes, los procesa y envía y responde a los mensajes
con una sola transacción de base de datos. Si la transacción genera un error, todo
el trabajo se revierte y el mensaje recibido se devuelve a la cola para que otro
intento pueda procesarlo. No se lleva a cabo ninguna acción hasta que la aplicación
confirma la transacción. La aplicación permanece en un estado coherente.
La administración es más sencilla cuando los datos, los mensajes y la lógica de
la aplicación están en la misma base de datos, ya que la administración de la aplicación
(recuperación de desastres, seguridad, copia de seguridad, etc.) se convierte en
parte de la administración rutinaria de la base de datos y el administrador no tiene
que administrar tres o cuatro componentes independientes.
Con los sistemas de mensajería tradicionales, el almacén de mensajes y la base de
datos pueden volverse incoherentes. Por ejemplo, cuando un componente se restaura
desde una copia de seguridad, también se debe restaurar otro componente de una copia
de seguridad realizada al mismo tiempo; de lo contrario, la información del almacén
de mensajes no coincide con la información de la base de datos. Dado que Service
Broker mantiene mensajes y datos en la misma base de datos, la incoherencia no supone
ningún problema.
Otra ventaja de la integración de bases de datos es contar con un entorno de desarrollo
común. La parte de mensajería y la parte de datos de una aplicación pueden utilizar
los mismos lenguajes y las mismas herramientas de SQL Server en una aplicación de
Service Broker, aprovechando así el conocimiento del programador de las técnicas
de programación de bases de datos para la programación basada en mensajes. Los procedimientos
almacenados que implementan un servicio de Service Broker pueden escribirse en Transact-SQL
o en uno de los lenguajes CLR (Common Language Runtime). Los programas externos
a la base de datos utilizan Transact-SQL y conocidas interfaces de programación
de bases de datos como ADO.NET.
Además, la integración de bases de datos permite la administración automática de
recursos. Service Broker se ejecuta en el contexto de la instancia de SQL Server,
por lo que supervisa todos los mensajes listos para transmitirse desde todas las
bases de datos de la instancia. Esto permite a cada base de datos mantener sus propias
colas mientras ayudan a Service Broker a administrar el uso de los recursos en la
instancia de SQL Server.
En los sistemas de mensajería tradicionales, la aplicación es la responsable de
ordenar y coordinar los mensajes que pueden llegar sin orden. Por ejemplo, la aplicación
A envía los mensajes 1, 2 y 3. La aplicación B recibe y confirma los mensajes 1
y 3, pero genera un error con el mensaje 2. La aplicación A reenvía el mensaje 2,
pero ahora el mensaje se recibe después de los mensajes 1 y 3. En el pasado, un
programador debía escribir la aplicación para que el orden de los mensajes no importara
o debía almacenar temporalmente en la memoria caché el mensaje 3 hasta que llegara
el 2 para que la aplicación pudiera procesar los mensajes en el orden correcto.
Ninguna de las soluciones es directa ni sencilla.
Otro problema de los sistemas tradicionales ha sido la entrega duplicada. En el
ejemplo anterior, si la aplicación B recibe el mensaje 2 pero se pierde el reconocimiento
del mensaje en la aplicación A, la aplicación A reenvia el mensaje 2 haciendo que
la aplicación B reciba el mensaje 2 dos veces. El código de la aplicación debía
poder identificar o descartar el duplicado o volver a procesar el duplicado sin
producir efectos negativos. De nuevo, ambos métodos eran difíciles de implementar.
Tradicionalmente, la coordinación de mensajes ha sido un problema difícil de controlar.
Por ejemplo, una aplicación puede enviar cientos o miles de solicitudes a un servicio.
El servicio procesa las solicitudes en paralelo y devuelve una respuesta tan pronto
como el servicio acaba de procesar la solicitud. Como cada solicitud tiene una cantidad
de tiempo de proceso distinta, la aplicación recibe respuestas en un orden distinto
del orden en que la aplicación envió el mensaje saliente. Sin embargo, para procesar
las respuestas correctamente, la aplicación debe asociar cada respuesta con el mensaje
saliente correcto. En los sistemas de mensajería tradicionales, cada aplicación
administraba esta asociación, lo cual agregaba el costo y la complejidad de desarrollar
la aplicación.
Service Broker resuelve estos problemas controlando el orden de los mensajes, la
entrega única y la identificación de conversación de forma automática. Una vez que
se establece una conversación entre dos extremos del broker, una aplicación recibe
cada mensaje sólo una vez y en el orden en el que se envió. La aplicación puede
procesar mensajes exactamente una vez en orden sin ningún código adicional. Por
último, Service Broker incluye de forma automática un identificador en cada mensaje.
Una aplicación siempre puede deducir a qué conversación pertenece un mensaje determinado.
Service Broker proporciona un acoplamiento flexible entre la aplicación inicial
y la aplicación de destino. Una aplicación puede enviar un mensaje en una cola y,
a continuación, continuar con el procesamiento de la aplicación, confiando en que
Service Broker se asegura de que el mensaje llega a su destino. Este acoplamiento
flexible proporciona flexibilidad de programación. El iniciador puede enviar varios
mensajes, y varios servicios de destino pueden procesarlos en paralelo. Cada servicio
de destino procesa mensajes con su propio ritmo, dependiendo de la carga de trabajo
actual.
Las colas también permiten a los sistemas distribuir el procesamiento de una forma
más uniforme, reduciendo la capacidad máxima requerida por un servidor. Esto puede
mejorar el rendimiento global en las aplicaciones de base de datos. Por ejemplo,
muchas aplicaciones de base de datos tienen una sobrecarga en ciertos momentos del
día, lo que incrementa el consumo de recursos y los tiempos de respuesta. Con Service
Broker, estas aplicaciones no necesitan llevar a cabo todo el procesamiento de una
transacción empresarial cuando se envía a la aplicación. En su lugar, la aplicación
utiliza Service Broker para enviar información sobre la transacción a las aplicaciones
que realizan el procesamiento en segundo plano. Estas aplicaciones procesan las
transacciones de forma confiable en un período de tiempo, mientras que la aplicación
de entrada principal continúa recibiendo nuevas transacciones empresariales.
Si el destino no está disponible inmediatamente, el mensaje se mantiene en la cola
de transmisión para la base de datos de envío. Service Broker vuelve a intentar
enviar el mensaje hasta que lo consigue o hasta que la duración de la conversación
caduca permitiendo que una conversación confiable continúe entre dos servicios incluso
si un servicio no está disponible temporalmente en algún momento de la conversación.
Los mensajes de la cola de transmisión forman parte de la base de datos; Service
Broker entrega el mensaje incluso si la instancia realiza una conmutación por error
o se reinicia.
Uno de los objetivos más difíciles de conseguir en una aplicación de mensajería
tradicional ha sido permitir que varios programas lean en paralelo en la misma cola.
En los sistemas de mensajería tradicionales, los mensajes pueden procesarse sin
orden cuando varios programas o subprocesos leen en la misma cola. Service Broker
evita esta situación mediante el bloqueo de grupos de conversaciones.
Tome como ejemplo una aplicación de procesamiento de pedidos tradicional. En la
cola se reciben el mensaje A, que contiene instrucciones sobre la creación del encabezado
del pedido, y el mensaje B, que contiene instrucciones sobre la creación de elementos
de línea de pedidos. Si ambos mensajes se quitan de la cola por instancias de aplicaciones
independientes y se procesan al mismo tiempo, puede que se intente confirmar en
primer lugar la transacción de elementos de línea de pedidos; esto generaría un
error, ya que el pedido aún no existe. El error provoca que la transacción se revierta
y que el mensaje vuelva a la cola y se vuelva a procesar, con el consiguiente gasto
de recursos. Tradicionalmente, los programadores resolvían este problema mediante
la combinación de la información del mensaje A y el mensaje B en un único mensaje.
Si bien este enfoque es sencillo para dos mensajes, no se adapta eficazmente a los
sistemas que implican la coordinación de docenas o cientos de mensajes.
Service Broker resuelve este problema al asociar conversaciones relacionadas en
un grupo de conversación. Service Broker bloquea automáticamente todos los mensajes
del mismo grupo de conversación para que sólo puedan recibirse y procesarse por
una instancia de la aplicación. Mientras tanto, otras instancias de la aplicación
pueden continuar extrayendo de la cola y procesando mensajes de otros grupos de
conversación. Esto permite que varias instancias de aplicación paralelas trabajen
de forma confiable y eficaz sin necesitar un código de bloqueo complicado en la
aplicación.
Una de las características más útiles de Service Broker es la activación. La activación
permite que una aplicación se amplíe de forma dinámica para coincidir con el volumen
de mensajes que llegan a la cola. Service Broker proporciona características que
permiten a los programas que se ejecutan dentro y fuera de la base de datos utilizar
la activación. Sin embargo, Service Broker no requiere que una aplicación utilice
la activación.
Service Broker supervisa la actividad de una cola para determinar si una aplicación
recibe mensajes de todas las conversaciones que tienen mensajes disponibles. La
activación de Service Broker inicia un nuevo lector de cola cuando hay trabajo para
él. Para determinar cuándo hay trabajo para un lector de cola, Service Broker supervisa
la actividad de la cola. Cuando el número de lectores de cola coincide con el tráfico
entrante, la cola alcanza periódicamente un estado en el que la cola está vacía
o en que todos los mensajes de la cola pertenecen a una conversación que está procesando
otro lector de cola. Si una cola no alcanza este estado durante un período de tiempo,
Service Broker activa otra instancia de la aplicación.
Las aplicaciones utilizan métodos de activación distintos para los programas que
se ejecutan dentro de la base de datos y los programas que se ejecutan fuera de
la base de datos. En los programas de la base de datos, Service Broker inicia otra
copia del procedimiento almacenado especificado por la cola. En los programas que
se ejecutan fuera de la base de datos, Service Broker genera un evento de activación.
El programa supervisa este evento para determinar cuándo se necesita otro lector
de cola.
Service Broker no detiene un programa iniciado mediante la activación. En su lugar,
las aplicaciones activadas se escriben para cerrarse automáticamente después de
un período de tiempo determinado sin que haya mensajes que recibir. Una aplicación
diseñada de esta forma puede permitir que el número de instancias de aplicación
aumente y disminuya de forma dinámica a medida que varía el tráfico del servicio.
Además, si el sistema se cierra o se reinicia, las aplicaciones se inician automáticamente
para leer los mensajes de la cola cuando se reinicia el sistema.
Los sistemas de mensajería tradicionales carecen de este comportamiento y suelen
acabar con un número excesivo o insuficiente de recursos dedicados a una cola determinada
en un momento dado.
No hay comentarios:
Publicar un comentario