• Nenhum resultado encontrado

2.2 A Comunica¸c˜ao Publish/Subscribe

2.2.1 Modelo de Comunica¸c˜ao Publish/Subscribe

O Publish/Subscribe ´e um dos mecanismos de intera¸c˜ao existentes capazes de mo- delar aplica¸c˜oes orientadas a eventos. Este mecanismo implementa um modelo de comunica¸c˜ao no qual os diferentes n´os de uma rede podem assumir ao menos um en- tre os pap´eis de publisher ou subscriber, os quais executam fun¸c˜oes complementares entre si.

Os subscribers tˆem a fun¸c˜ao de manifestar seu interesse em um evento, ou padr˜ao de eventos, para registro e compara¸c˜ao frente `as especifica¸c˜oes dos eventos gerados pelos publishers. Estes, al´em de publicarem eventos, em alguns casos tamb´em pos- suem a fun¸c˜ao de anunciar os tipos de eventos que vir˜ao a produzir. As publica¸c˜oes cujas especifica¸c˜oes combinam com os interesses registrados s˜ao, por fim, entregues aos subscribers atrav´es de ‘notifica¸c˜oes’ de eventos.

Dentre as principais caracter´ısticas desse modelo de comunica¸c˜ao destacadas por EUGSTER el at. [1] e HUANG & GARCIA-MOLINA [58] est˜ao a troca de eventos entre publishers e subscribers de maneira ass´ıncrona, o anonimato das comunica¸c˜oes, sua natureza inerentemente multicast e sua capacidade de adapta¸c˜ao a ambientes dinˆamicos. HUANG & GARCIA-MOLINA destacam ainda que essa combina¸c˜ao ´unica de caracter´ısticas faz do publish/subscribe um modelo adequado para v´arias ´areas de aplica¸c˜ao, como a dissemina¸c˜ao distribu´ıda de dados, a automa¸c˜ao indus- trial e as redes m´oveis.

O esquema b´asico para as intera¸c˜oes publish/subscribe apresentado por EUGS- TER el at. [1] consiste num servi¸co de notifica¸c˜ao de eventos que gerencia os in- teresses registrados e as notifica¸c˜oes de eventos. Esse servi¸co executa o papel de mediador entre publishers e subscribers, registrando os interesses recebidos na forma de ‘subscri¸c˜oes’ de eventos e direcionando as notifica¸c˜oes produzidas pelos publishers para os devidos subscribers. Sem conhecer os produtores das informa¸c˜oes desejadas, os subscribers se subscrevem diretamente ao servi¸co de eventos, que ret´em os inte- resses registrados. De forma similar, as notifica¸c˜oes enviadas pelos publishers s˜ao interceptadas pelo servi¸co de eventos, que se encarrega de encaminh´a-las a todos os subscribers interessados.

O modo como os subscribers realizam suas subscri¸c˜oes ´e definido com base na forma de especifica¸c˜ao dos eventos e dos interesses dos n´os. Os eventos podem ser especificados por uma simples palavra-chave ou por um conjunto de propriedades representadas por pares ‘atributo-valor’. As subscri¸c˜oes, por sua vez, podem realizar compara¸c˜oes diretas entre as palavras-chave ou um subgrupo dos atributos presentes nas propriedades dos eventos, fazendo uso de operadores de compara¸c˜ao b´asica, como =, <, ≤, > e ≥, ou opera¸c˜oes mais complexas, podendo adotar eventos compostos, nos quais filtros restritivos s˜ao associados a combina¸c˜oes l´ogicas (AND, OR, etc.) para avalia¸c˜ao da correla¸c˜ao entre os eventos.

Conforme destacado por EUGSTER el at. [1], o diferencial deste modelo de comunica¸c˜ao est´a no desacoplamento completo de espa¸co, tempo e sincronismo, representado na Figura 2.5, que ele proporciona entre os agentes envolvidos na co- munica¸c˜ao.

Caracteristicamente, este modelo de comunica¸c˜ao permite que as partes inte- rajam sem conhecimento dos agentes envolvidos na comunica¸c˜ao, tendo como re-

^ĞƌǀŝĕŽĚĞǀĞŶƚŽƐ WƵďůŝƐŚĞƌ WƵďů ŝ ĐĂĕĆŽ EŽƚŝĨŝĐĂĕĆŽ ^ƵďƐĐƌŝďĞƌ EŽƚŝĨŝĐĂĕĆŽ ^ƵďƐĐƌŝďĞƌ EŽƚŝĨŝĐĂĕĆŽ ^ƵďƐĐƌŝďĞƌ EŽƚŝĨŝĐĂĕĆŽ EŽ ƚŝĨŝĐ ĂĕĆŽ EŽƚŝĨŝĐĂĕĆŽ EŽƚŝĨŝ Đ ĂĕĆŽ

(a) Desacoplamento de Espa¸co.

^ĞƌǀŝĕŽĚĞǀĞŶƚŽƐ WƵďůŝƐŚĞƌ WƵďů ŝ ĐĂĕĆŽ ^ƵďƐĐƌŝďĞƌ EŽƚŝĨŝĐĂĕĆŽ ^ĞƌǀŝĕŽĚĞǀĞŶƚŽƐ WƵďůŝƐŚĞƌ EŽƚŝĨŝĐĂĕĆŽ ^ƵďƐĐƌŝďĞƌ EŽƚŝĨŝĐĂĕĆŽ EŽƚŝĨŝĐĂ ĕĆ Ž d  D W K (b) Desacoplamento de Tempo. WƵďůŝƐŚĞƌ W ƵďůŝĐĂ ĕĆ Ž EŽƚŝĨŝĐĂĕĆŽ ^ĞƌǀŝĕŽĚĞǀĞŶƚŽƐ EŽƚŝĨŝĐĂĕĆŽ E ŽƚŝĨŝĐĂĕĆŽ ^ƵďƐĐƌŝďĞƌ (c) Desacoplamento de Sincronismo.

Figura 2.5: Dimens˜oes de Desacoplamento Publish/Subscribe [1].

ferˆencia t˜ao somente as informa¸c˜oes disponibilizadas atrav´es dos an´uncios e subs- cri¸c˜oes. Desta forma, tanto publishers quanto subscribers n˜ao necessitam guardar referˆencias sobre suas contrapartes, limitando-se a manter em suas tabelas de rote- amento apenas os vizinhos de primeiro salto que participam da comunica¸c˜ao. Esta particularidade ´e chamada de ‘desacoplamento de espa¸co’ e encontra-se represen- tada na Figura 2.5(a). Esse anonimato na rela¸c˜ao entre as partes envolvidas na comunica¸c˜ao permite o recebimento de informa¸c˜oes relevantes por um agente, inde- pendentemente do n´o que o produziu, bem como viabiliza o compartilhamento de uma mesma rede por diferentes aplica¸c˜oes que apresentem interesses em comum e utilizem um mesmo espa¸co geogr´afico.

as entidades envolvidas participem da intera¸c˜ao no mesmo instante de tempo, constituindo-se no ‘desacoplamento de tempo’ representado na Figura 2.5(b). Isso lhe confere a capacidade de lidar com ambientes operacionais que est˜ao em cons- tante mudan¸ca [58], possibilitando que subscribers sejam notificados mesmo quando os publishers dos eventos estejam fora da rede, em um estado de dormˆencia ou des- conectados. Da mesma forma, as publica¸c˜oes podem ocorrer ainda que na ausˆencia dos subscribers.

Este mecanismo permite, por fim, que as comunica¸c˜oes entre os agentes aconte¸cam de forma ass´ıncrona, uma vez que “a produ¸c˜ao e o consumo de eventos n˜ao ocorrem no fluxo principal de controle dos publishers e subscribers” [1] ou, nas palavras de [58], que “o publisher n˜ao precisa esperar por uma resposta de reconhe- cimento do subscriber antes de prosseguir”. Portanto, o chamado ‘desacoplamento de sincronismo’, representado na Figura 2.5(c), permite que as intera¸c˜oes se suce- dam sem a necessidade dos agentes envolvidos interromperem a execu¸c˜ao de outras fun¸c˜oes para participar da comunica¸c˜ao, por exemplo para o envio ou a espera por respostas de reconhecimento.

Esse servi¸co de notifica¸c˜ao de eventos n˜ao requer, contudo, uma implementa¸c˜ao estritamente centralizada, onde os publishers enviam mensagens para uma entidade espec´ıfica, que as armazena e encaminha aos subscribers mediante o recebimento dos pedidos de subscri¸c˜ao. Ele tamb´em pode ser implementado atrav´es de “primi- tivas de comunica¸c˜ao que aplicam mecanismos de registro e encaminhamento nos processos dos publishers e dos subscribers, de forma que a comunica¸c˜ao exiba um comportamento ass´ıncrono e anˆonimo para a aplica¸c˜ao, sem a necessidade de uma entidade intermedi´aria” [1]. Assim, para permitir que o publish/subscribe opere de forma distribu´ıda, deve existir um conjunto de primitivas que proveja o registro, nos diversos agentes envolvidos na comunica¸c˜ao, das informa¸c˜oes necess´arias para que as mensagens enviadas sejam corretamente entregues nos seus destinos. Isso tudo sem comprometer os desacoplamentos de espa¸co, tempo e sincronismo.