• Nenhum resultado encontrado

Implementação de um middleware publish/subscribe de larga escala

N/A
N/A
Protected

Academic year: 2021

Share "Implementação de um middleware publish/subscribe de larga escala"

Copied!
51
0
0

Texto

(1)

Tiˆ

e Teixeira Lima Penatti

TOLER ˆ

ANCIA A INTRUS ˜

OES EM

MIDDLEWARE PUBLISH/SUBSCRIBE DE

LARGA ESCALA

Florian´opolis

(2)

Tiˆ

e Teixeira Lima Penatti

TOLER ˆ

ANCIA A INTRUS ˜

OES EM

MIDDLEWARE PUBLISH/SUBSCRIBE DE

LARGA ESCALA

Trabalho apresentado na disciplina INE5328, ministrada pelo Professor Renato Cislaghi, como Trabalho de Conclus˜ao do Curso de Bacharelado em Ciˆencias da Computa¸c˜ao pela Universidade Federal de Santa Catarina.

Orientador: Rafael Rodrigues Obelheiro

Florian´opolis

(3)

Tiˆ

e Teixeira Lima Penatti

TOLER ˆ

ANCIA A INTRUS ˜

OES EM MIDDLEWARE

PUBLISH/SUBSCRIBE DE LARGA ESCALA

Trabalho de conclus˜ao de curso apresentado como requisito parcial para obeten¸c˜ao do t´ıtulo de Bacharel em Ciˆencia da Computa¸c˜ao e aprovada pela banca examinadora

constitu´ıda pelos doutores:

Dr. Rafael Rodrigues Obelheiro DAS - UFSC

Orientador

Prof. Dr. Frank Siqueira INE - UFSC

Msc. Eduardo Alchieri DAS - UFSC

(4)
(5)

AGRADECIMENTOS

Agrade¸co primeiramente a Deus pelas oportunidades que tive em minha vida, e me possibilitaram estar aqui agora.

Agrade¸co aos meus pais, especialmente a minha m˜ae, Raquel, por acreditar e investir em mim incondicionalmente, e por tudo mais, enfim, por ser minha m˜ae.

Aos colegas de classe, amizades que criei e que n˜ao se acabar˜ao com o fim do curso.

Agrade¸co a minha t˜ao querida Paulinha, por compartilhar comigo durante grande parte do curso momentos e sentimentos maravilhosos e inesquec´ıveis. E por sempre acre-ditar no meu potencial e me apoiar em qualquer momento.

Ao pessoal da automa¸c˜ao pela inicia¸c˜ao cient´ıfica, Alysson pelos trabalhos anteriores e pela motiva¸c˜ao deste, Obelheiro pela excelente orienta¸c˜ao, Eduardo pelas conversas e ajudas, e ao professor Frank pela valiosa co-orienta¸c˜ao.

(6)

“N˜ao sabendo que era imposs´ıvel, foi la e fez” - Jean Cocteau

(7)

RESUMO

Na ´area de programa¸c˜ao distribu´ıda, o modelo de comunica¸c˜ao conhecida como pu-blish/subscribe ´e encontrado nas mais diversas ´areas de aplica¸c˜ao. Ele apresenta diversas qualidades como baixo acoplamento e alta escalabilidade, e por isso praticamente todas as plataformas/padr˜oes de middleware implementam ou definem algum tipo de suporte a este. Essas implementa¸c˜oes s˜ao, em sua maioria, centralizadas, i.e., o canal (ou dissemi-nador) de eventos ´e implementado em um ´unico servidor. Isto traz alguns problemas: por ser um ponto ´unico, o canal de eventos central est´a sujeito a falhas, e pode ficar sobrecar-regado. Al´em disso, se estiver distribu´ıdo em larga escala, sobre a Internet, pode tornar a comunica¸c˜ao publishers-subscribers extremamente ineficiente. Para resolver estes pro-blemas, foram desenvolvidos sistemas em larga escala, que s˜ao sistemas publish/subscribe com diversos disseminadores, formando uma rede overlay sobre a rede de larga escala (Internet). Esses disseminadores possuem algoritmos de roteamento pr´oprios para disse-mina¸c˜ao de informa¸c˜oes de controle e eventos entre os processos que querem se comu-nicar. Grande parte das implementa¸c˜oes existentes n˜ao trata de viola¸c˜oes de seguran¸ca complexas. Em vista disso, este trabalho prop˜oe fazer a integra¸c˜ao de uma rede overlay tolerante a intrus˜oes (j´a desenvolvida e estudada por Obelheiro, 2006) com um sistema publish/subscribe em larga escala, baseado em servi¸cos Web, seguindo as especifica¸c˜oes para publish/subscribe em servi¸cos Web, o WS-Notification, desenvolvida pelo cons´orcio OASIS.

(8)

ABSTRACT

In distributed programming area, a communication model known as publish/subscribe is found in the most diverse areas of application. It presents diverse qualities like low cou-pling and high scalability, and therefore practically all the platforms/standards of mid-dleware implement or support it. These implementations are, in its majority, centered, i.e., the events channel (or disseminator) are implemented in just one server. This brings some problems: for being a lonely point, the central event channel is subject to faults, and can be overloaded. In a large scale context, over the Internet, the publish-subscribe communication can become extremely inefficient. To solve these problems, systems had been developed on a large scale, which are publish/subscribe with many disseminators, forming an overlay network on a wide scale network (Internet). These disseminators has proper routing algorithms for dissemination of control and event information between the processes that want to communicate themselves. Great part of the existing implementati-ons does not deal with complex breakings of security. In this context, this work proposes the integration of an intrusion tolerant overlay network (already developed and studied by Obelheiro, 2006) with a large scale publish/subscribe system, based in Web servi-ces, following the specifications for publish/subscribe in Web serviservi-ces, WS-Notification, developed by OASIS consortiun.

(9)

SUM ´

ARIO

Lista de Figuras Lista de Siglas 1 Introdu¸c˜ao p. 12 1.1 Motiva¸c˜ao . . . p. 12 1.2 Objetivos . . . p. 13 1.3 Organiza¸c˜ao do texto . . . p. 13 2 Publish/Subscribe p. 15 2.1 Defini¸c˜ao . . . p. 15

2.2 Uso e Aplica¸c˜oes . . . p. 16

2.3 Dificuldades . . . p. 17

2.4 Resumo do cap´ıtulo . . . p. 18

3 Servi¸cos Web p. 19

3.1 Defini¸c˜ao e uso . . . p. 19 3.2 WS-Notification . . . p. 22 3.2.1 WS-BaseNotification . . . p. 23 3.3 Resumo do cap´ıtulo . . . p. 25 4 Muse p. 26 4.1 Defini¸c˜ao e Uso . . . p. 26 4.2 Modelo de Programa¸c˜ao . . . p. 27

(10)

4.2.1 Descritor de implanta¸c˜ao (Deployment Descriptor) . . . p. 29 4.3 Implementa¸c˜ao do WS-Notification . . . p. 30 4.4 Resumo do cap´ıtulo . . . p. 31 5 Redes Overlay p. 32 5.1 Defini¸c˜ao e uso . . . p. 32 5.2 ROTI . . . p. 33 5.3 Adapta¸c˜oes . . . p. 36 5.4 Resumo do cap´ıtulo . . . p. 39 6 Integra¸c˜ao p. 41

6.1 Altera¸c˜oes no Muse . . . p. 41

6.2 Resultados . . . p. 44

6.3 Resumo do cap´ıtulo . . . p. 45

7 Conclus˜ao p. 46

7.1 Perspectivas futuras . . . p. 47

(11)

LISTA DE FIGURAS

2.1 Publish/subscribe simples . . . p. 15

2.2 Publish/subscribe em larga escala . . . p. 17

3.1 Rela¸c˜ao entre clientes e fornecedores de servi¸co Web, SOAP, WSDL e

UDDI . . . p. 21

4.1 Modelo de programa¸c˜ao do Muse (retirada do s´ıtio do Muse) . . . p. 28

5.1 Exemplo de rede overlay . . . p. 33

5.2 Intera¸c˜ao entre os sub-sistemas da ROTI (OBELHEIRO; FRAGA, 2005) p. 35

5.3 Estrutura das classes da ROTI usando o simulador (OBELHEIRO, 2006) p. 40

6.1 Pilha nativa do Muse . . . p. 42

6.2 Pontos de altera¸c˜ao do framework Muse . . . p. 43

6.3 Pilha adaptada `a ROTI . . . p. 43

6.4 Tempos de respostas de diferentes vers˜oes do Muse . . . p. 44

(12)

API Application Programming Interface CORBA Common Object Request Broker Architecture

DiffServ Differentiated Services EPR End-Point Reference FTP File Transfer Protocol

HMAC Hash Message Authentication Code HTML Hypertext Markup Format HTTP Hypertext Transfer Protocol

ICP Infra-estrutura de Chave P´ublica IntServ Integrated Services

IP Internet Protocol

ITON Intrusion Tolerant Overlay Network JEE Java Enterprise Edition JMS Java Message Service MAC Middle Access Control

OASIS Organization for the Advancement of Structured Information Standards RMI Remote Method Invocation

ROTI Rede Overlay Tolerante `a Intrus˜oes RPC Remote Procedure Call RTT Round-Trip Time SMTP Simple Mail Transfer Protocol SNMP Simple Network Management Protocol

TCP Transmission Control Protocol

UDDI Universal Description, Discovery and Integration UDP User Datagram Protocol

URI Uniform Resource Identifier URL Uniform Resource Locator WSN Web Services Notification WSRF Web Services Resource Framework

WSA Web Service Addressing WSR Web Service Resource WSBF Web Service Base Faults WSRL Web Service Resource Lifetime WSRP Web Service Resource Properties

(13)

WSSG Web Service Service Group

WSRMD Web Service Resource Metadata Descriptor WSDM Web Service Distributed Management WSBaN Web Service Base Notification WSBrN Web Service Brokered Notification

WST Web Service Topics WS Web Service

W3C World Wide Web Consortiun WSDL Web Service Description Language

(14)

12

1

INTRODU ¸

C ˜

AO

1.1

MOTIVA ¸

C ˜

AO

O atual avan¸co da computa¸c˜ao, de modo geral, e o crescimento exponencial da Inter-net, tˆem exigido cada vez mais das aplica¸c˜oes distribu´ıdas (aplica¸c˜oes que executam em mais de uma m´aquina). Estas tˆem desafiado os pesquisadores de sistemas distribu´ıdos a definirem novos modelos e algoritmos que possam lidar com sua complexidade, hete-rogeneidade, dinamismo e escala. Dentre estas aplica¸c˜oes, muitas trabalham com um n´umero indefinido de participantes que se altera durante a sua execu¸c˜ao. Um modelo de comunica¸c˜ao que se adapta muito bem a este cen´ario ´e conhecido como publish/subscribe (EUGSTER et al., 2003).

Veremos que implementa¸c˜oes simples deste modelo, como s˜ao encontradas na maioria das especifica¸c˜oes e implementa¸c˜oes, n˜ao atendem aos requisitos das aplica¸c˜oes distribu´ı-das atuais, geralmente executadistribu´ı-das no contexto da Internet. Uma poss´ıvel solu¸c˜ao ´e o uso de sistemas em larga escala, baseados em redes overlay. Grande parte das implementa-¸c˜oes de overlays ainda n˜ao levam em conta todas amea¸cas `a seguran¸ca, com destaque para comportamento malicioso. Entretanto, Obelheiro (2006) desenvolveu um overlay tolerante a intrus˜oes, que ser´a usado como infra-estrutura para nosso trabalho. Ela ir´a fornecer requisitos de seguran¸ca como tamb´em uma maior disponibilidade dos servi¸cos oferecidos.

Por outro lado, um padr˜ao de comunica¸c˜ao distribu´ıda que tamb´em se adapta bem neste atual cen´ario ´e o de servi¸cos Web. Ele vem tendo um grande crescimento e aceita¸c˜ao na ´area de programa¸c˜ao distribu´ıda gra¸cas `as suas versatilidade, interoperabilidade e inde-pendˆencia de plataforma, que s˜ao garantidas pelo protocolo SOAP, baseado na linguagem XML (Extensible Markup Language). A comunica¸c˜ao deste protocolo se baseia na troca de documentos XML entre diferentes hosts, utilizando para isso qualquer protocolo de transporte e aplica¸c˜ao, como por exemplo, HTTP, ou UDP. Com isso, poder´ıamos juntar esses conceitos, concretizando alguns objetivos detalhados adiante.

(15)

13

1.2

OBJETIVOS

O objetivo geral deste trabalho ´e desenvolver uma infra-estrutura publish/subscribe para sistemas distribu´ıdos de larga escala satisfazendo a requisitos de seguran¸ca e tole-rˆancia a faltas. Para isso, s˜ao definidos os seguintes objetivos espec´ıficos:

• realizar estudos sobre redes overlay e servi¸cos Web, incluindo as especifica¸c˜oes sobre notifica¸c˜oes (Web Service Notifications);

• portar e adaptar uma rede overlay j´a desenvolvida (OBELHEIRO, 2006), imple-mentada em um simulador, para que trabalhe na rede real, utilizando a pilha de protocolos UDP/IP;

• e integrar uma aplica¸c˜ao que implementa o sistema publish/subscribe usando servi¸cos Web com esta rede, constituindo um middleware1 tolerante a intrus˜oes e falhas.

1.3

ORGANIZA ¸

C ˜

AO DO TEXTO

Este trabalho est´a organizado em sete cap´ıtulos. Este cap´ıtulo inicial descreveu o contexto do trabalho.

O cap´ıtulo 2 apresenta a descri¸c˜ao do modelo publish/subscribe, seus pontos positivos e negativos, algumas aplica¸c˜oes e varia¸c˜oes encontradas na literatura.

O cap´ıtulo 3 cont´em uma revis˜ao dos conceitos e especifica¸c˜oes sobre servi¸cos Web, e uma ˆenfase maior ´e dada `as especifica¸c˜oes voltadas ao modelo publish-subscribe: ´e mos-trada em detalhe a especifica¸c˜ao do OASIS (OASIS, 2007) chamada de WS-Notification.

Para facilitar a implementa¸c˜ao destes padr˜oes e a integra¸c˜ao com a estrutura de larga escala, utilizamos como ponto de partida um framework de aplica¸c˜oes desenvolvido pela Apache, conhecido como Muse. O cap´ıtulo 4 mostra detalhadamente o funcionamento deste framework, como ele implementa as especifica¸c˜oes, e como suporta a aplica¸c˜ao que executa sobre ele.

O cap´ıtulo 5 apresenta os principais conceitos referentes a redes overlay, e nos intro-duz a rede ROTI (OBELHEIRO, 2006), mostrando suas caracter´ısticas, e as adapta¸c˜oes

1Podemos definir middleware num contexto distribu´ıdo como sendo uma camada de software que faz

a intermedia¸c˜ao entre aplica¸c˜oes (que utilizam o middleware) e o sistema operacional, que realiza o I/O para a rede. Abstraindo um pouco mais, podemos defin´ı-lo como a camada de software que cuida da comunica¸c˜ao entre duas ou mais aplica¸c˜oes distribu´ıdas, ocultando ao desenvolvedor dependˆencias de m´aquina como plataforma utilizada, protocolo de comunica¸c˜ao e sistema operacional.

(16)

14

necess´arias para se integrar a este trabalho.

Por fim, o cap´ıtulo 6 descreve a integra¸c˜ao feita entre a rede overlay e o sistema publish/subscribe, bem como os resultados obtidos e os testes de confiabilidade e desem-penho. Em seguida, s˜ao discutidas as conclus˜oes do trabalho, onde ´e apresentada uma vis˜ao geral do que foi obtido, as qualidades e os pontos fracos, bem como as poss´ıveis continua¸c˜oes deste trabalho.

(17)

15

2

PUBLISH/SUBSCRIBE

Esse cap´ıtulo apresenta a descri¸c˜ao do modelo publish/subscribe, mostrando as prin-cipais vantagens deste modelo, assim como suas limita¸c˜oes. Em seguida s˜ao relatadas algumas varia¸c˜oes deste modelo encontradas na literatura, juntamente com alguns exem-plos de utiliza¸c˜ao destes.

2.1

DEFINI ¸

C ˜

AO

Publish/subscribe ´e um modelo de comunica¸c˜ao distribu´ıda. Neste modelo temos um conjunto de processos que se registram (subscribers) para o recebimento de eventos de um determinado tipo. Quando um processo (publisher ) publica um novo evento deste tipo, todos os processos que registraram seu interesse s˜ao notificados. Em geral, um ou mais mediadores ou disseminadores s˜ao respons´aveis pela propaga¸c˜ao ass´ıncrona de eventos de seus produtores at´e os interessados.

Figura 2.1: Publish/subscribe simples

Como podemos observar na figura 2.1, em um sistema publish/subscribe simples temos geralmente um conjunto de participantes no papel de produtores (publishers) de eventos, e um outro conjunto no papel de consumidores (subscribers). O produtor cria eventos e os publica no canal de eventos (uma abstra¸c˜ao que captura a no¸c˜ao de tipo de evento,

(18)

16

algumas vezes chamado de t´opico). Os consumidores que se registraram neste canal de eventos sempre recebem os eventos publicados pelos produtores. ´E interessante ressal-tar que este modelo implementa o suporte b´asico de comunica¸c˜ao desacoplada em trˆes dimens˜oes (EUGSTER et al., 2003):

• desacoplados no espa¸co: os produtores n˜ao necessariamente conhecem os consumi-dores;

• desacoplados no tempo: produtores e consumidores n˜ao precisam participar ativa-mente na intera¸c˜ao durante o mesmo tempo;

• desacoplados em sincronia: produtores n˜ao ficam bloqueados esperando at´e que os consumidores receberam os eventos.

O fato de possuir um baixo acoplamento tamb´em ajuda a tornar este modelo bem es-cal´avel: adicionar ou retirar produtores e consumidores sem afetar o resto da comunica¸c˜ao e a qualquer momento se torna muito simples.

2.2

USO E APLICA ¸

C ˜

OES

Existem muitas varia¸c˜oes do modelo descrito acima, entretanto o conceito b´asico permanece sempre o mesmo. Dadas as qualidades deste modelo, em especial o de-sacoplamento, comunica¸c˜ao ass´ıncrona e simplicidade, praticamente todas as platafor-mas/padr˜oes de middleware implementam ou definem algum tipo de suporte a este: no JEE (Java Enterprise Edition) temos o JMS (Java Message Service) (SUN, 2005), nos servi¸cos Web temos o WS-Notification (GRAHAN; HULL; MURRAY, 2006) e no CORBA (Common Object Request Broker Architecture) temos os Servi¸cos de Eventos (OMG, 2004a) e Notifica¸c˜ao (OMG, 2004b).

Dada a grande versatilidade deste modelo, seus benef´ıcios, e sua ampla disponibili-dade e implementa¸c˜ao, praticamente qualquer aplica¸c˜ao distribu´ıda poderia utilizar como estrutura um modelo publish/subscribe. Como simples exemplos temos programas de co-munica¸c˜ao instantˆanea, programas de e-mails, jogos, sistemas utilizados no controle de telefonia, etc.

(19)

17

2.3

DIFICULDADES

Grande parte das implementa¸c˜oes de publish/subscribe existentes s˜ao centralizadas, i.e., o canal de eventos ´e implementado em um servidor que recebe eventos publicados por publishers e os dissemina para os subscribers interessados. Esse mecanismo centralizado traz trˆes problemas (EUGSTER et al., 2003):

1. O disseminador de eventos ´e um ponto ´unico de falhas, podendo tamb´em ser alvo de ataques e outros incidentes de seguran¸ca;

2. O disseminador de eventos pode ficar sobrecarregado em ambientes com muitos processos (publishers e subscribers) e uma alta taxa de dissemina¸c˜ao de eventos;

3. A comunica¸c˜ao entre o disseminador de eventos e os processos comunicantes pode ser extremamente ineficiente se estes ´ultimos estiverem distribu´ıdos por uma rede de larga escala geograficamente distribu´ıda, como a Internet.

Visando contornar estas limita¸c˜oes (especialmente a 2 e a 3) foram desenvolvidos sistemas publish/subscribe de larga escala. Esses sistemas consideram uma rede de disse-minadores de eventos instalada sobre a rede de larga escala. Os dissedisse-minadores possuem algoritmos de roteamento pr´oprios para dissemina¸c˜ao de informa¸c˜oes de controle (subscri-¸c˜ao e cancelamento de subscri¸c˜ao) e eventos entre os processos que se comunicam atrav´es do sistema. A figura 2.2 ilustra essa id´eia.

Figura 2.2: Publish/subscribe em larga escala

Na figura 2.2 podemos ver uma rede de disseminadores de eventos conectando dois publishers a quatro subscribers. As setas em cinza nessa rede mostram a rota de dissemi-na¸c˜ao de um evento desde o processo que o publicou at´e os subscribers que tˆem interesse nele. A tarefa fundamental dessa rede ´e fazer com que informa¸c˜oes de controle e eventos

(20)

18

sejam disseminadas eficientemente no sistema publish/subscribe, superando as limita¸c˜oes supracitadas de um sistema simples. Esses disseminadores de eventos formam uma rede overlay, que ser´a discutida em maiores detalhes no cap´ıtulo 5, sobre a rede de larga escala que conecta esses processos (Internet).

2.4

RESUMO DO CAP´

ITULO

Comunica¸c˜oes ponto-a-ponto e s´ıncronas tornam uma aplica¸c˜ao distribu´ıda est´atica e pouco flex´ıvel, dificultando muito o desenvolvimento de aplica¸c˜oes dinˆamicas e de larga escala. Como alternativa a esse quadro temos o modelo de comunica¸c˜ao publish/subscribe. Esse modelo de aplica¸c˜oes ´e bastante gen´erico, portanto adapt´avel a in´umeras situa¸c˜oes, sendo uma ´otima op¸c˜ao de comunica¸c˜ao entre aplica¸c˜oes distribu´ıdas. O modelo pu-blish/subscribe fornece a um usu´ario final uma API de comunica¸c˜ao simples, vers´atil e eficiente, sendo portanto uma ´otima op¸c˜ao para nosso trabalho. O pr´oximo cap´ıtulo apresenta a descri¸c˜ao de servi¸cos Web e descreve o padr˜ao WS-Notifications, padr˜ao que especifica um modelo publish/subscribe baseado nesse tipo de servi¸co.

(21)

19

3

SERVI ¸

COS WEB

Esse cap´ıtulo apresenta a descri¸c˜ao da tecnologia conhecida como servi¸cos Web enfa-tizando sua interoperabilidade, e apontando suas limita¸c˜oes. Em seguida ´e descrito com maior detalhe o padr˜ao pra servi¸cos Web que implementa o modelo descrito no cap´ıtulo 2, denominado Web Service Notification.

3.1

DEFINI ¸

C ˜

AO E USO

O grupo World Wide Web Consortium ´e um cons´orcio criado para desenvolver tec-nologias (especifica¸c˜oes, software, e ferramentas) vinculadas `a Internet, entre elas uma conhecida como servi¸cos Web. Eles definem servi¸co Web como um sistema de software desenvolvido para fornecer comunica¸c˜ao entre diferentes m´aquinas ligadas por uma rede, o que caracteriza sistemas distribu´ıdos. Por´em, seu grande diferencial de tecnologias como Common Object Request Broker Architecture (CORBA), Java Remote Method Invocation (RMI), etc, ´e fornecer um ambiente distribu´ıdo independente de plataforma (arquitetura de m´aquina, sistema operacional), linguagem de programa¸c˜ao ou protocolos utilizados na Internet (como HTTP, SMTP ou algum outro protocolo propriet´ario). Isso ´e poss´ıvel gra¸cas ao protocolo em que se baseia, chamado de SOAP, detalhado mais adiante e `a utiliza¸c˜ao da linguagem XML, que fornece uma forma de representar os dados indepen-dentemente de linguagens de programa¸c˜ao. Vogels (2003) enfatiza que a grande id´eia dos servi¸cos Web ´e o fato da comunica¸c˜ao se dar por troca de documentos XML, que cont´em todas as informa¸c˜oes espec´ıficas que o servi¸co precisa para executar e responder ao requisitante. Outras caracter´ısticas deste sistema incluem (CHAPPELL; JEWELL, 2002):

• Baixo acoplamento entre clientes e servidores: o consumidor de um servi¸co web n˜ao est´a diretamente ligado `a sua interface, que pode alterar durante o tempo sem comprometer a habilidade do cliente de interagir com o fornecedor do servi¸co;

(22)

20

• Sincronismo: servi¸cos Web podem ser s´ıncronos ou ass´ıncronos, ou seja, o cliente pode (sincronamente) ou n˜ao (assincronamente) bloquear e ficar esperando at´e que uma solicita¸c˜ao seja processada e respondida. No modo ass´ıncrono, que ´e essencial para o baixo acoplamento, o cliente invoca um servi¸co e pode logo em seguida execu-tar outras fun¸c˜oes, retornando mais tarde para receber o resultado, ou ser informado por um sistema de call back, onde o servidor contata o cliente para responder `a re-quisi¸c˜ao;

• Suporte a chamadas remotas de procedimento (RPCs): servi¸cos Web permitem a clientes a chamada de m´etodos, fun¸c˜oes e procedimentos em objetos remotos;

• Permite troca de documentos: por se basear em XML, o protocolo SOAP pode trans-mitir n˜ao apenas dados, mas tamb´em qualquer tipo de documento, qu˜ao complexo for.

Juntamente com servi¸cos Web, outras tecnologias ganharam espa¸co, e complementam o uso destes servi¸cos. O nome do protocolo SOAP teve origem do acr´onimo Simple Object Access Protocol, mas ´e um nome que n˜ao expressa de maneira correta o significado do protocolo (SOAP n˜ao ´e um protocolo de acesso a objetos), ent˜ao passou a ser chamado apenas de SOAP. Ele se baseia na troca de documentos em XML entre provedores e requisitantes de servi¸cos Web, padronizando as estruturas de transporte desses documen-tos sobre uma variedade de padr˜oes de tecnologias da Internet, incluindo HTTP, FTP, SMTP, SNMP, TCP, UDP, etc. Entretanto, HTTP ´e sem d´uvida o mais difundido destes padr˜oes, por ser largamente utilizado na Internet. Fundamentalmente, mensagens SOAP s˜ao mensagens “one way” de um remetente a um destinat´ario, entretanto, freq¨uentemente s˜ao combinadas de forma a implementar um par de requisi¸c˜ao-resposta. Uma mensagem SOAP ´e definida com o nome de envelope (SOAP envelop), e consiste em dois poss´ıveis elementos, o cabe¸calho e o corpo. No cabe¸calho s˜ao colocadas informa¸c˜oes sobre o sistema e no corpo o documento a ser processado pelo servi¸co Web. Este protocolo tamb´em define padr˜oes para codificar chamadas de m´etodos RPC que n˜ao utilizam XML em documentos XML para o transporte.

Web Service Description Language (WSDL) ´e uma tecnologia, tamb´em baseada em XML, que descreve a interface de um servi¸co Web de um modo padronizado. Ela permite especificar como um servi¸co representa sua entrada e sua sa´ıda, os parˆametros de invoca-¸c˜ao, a estrutura de tipos complexos, definidos pelo usu´ario (estruturas compostas por um ou mais tipos primitivos como inteiros ou strings), se os m´etodos possuem retorno ou s˜ao somente “one way”. Ou seja, um WSDL ´e um documento XML que descreve

(23)

detalhada-21

mente todas as poss´ıveis formas de intera¸c˜ao com o servi¸co, ´util a um cliente que deseja saber como utiliz´a-lo.

Por fim, temos uma tecnologia conhecida como Universal Description, Discovery, and Integration (UDDI). Ela possibilita informar, disponibilizar e descobrir servi¸cos dispo-n´ıveis na Web, atrav´es de um amplo registro de WSDLs. Um cliente utiliza o UDDI para procurar (por nomes, categorias, identificadores, etc) servi¸cos dispon´ıveis na Web. A figura 3.1 ilustra a intera¸c˜ao entre estas tecnologias. As setas que ligam o UDDI represen-tam trocas de documentos WSDL, enquanto que as trocas entre o cliente e o fornecedor do servi¸co representam troca de documentos SOAP. A linha tracejada representa uma resposta opcional.

Cliente

UDDI

Serviço

SOAP

WSDL

WSDL

Figura 3.1: Rela¸c˜ao entre clientes e fornecedores de servi¸co Web, SOAP, WSDL e UDDI

Servi¸cos Web vˆem tendo uma grande aceita¸c˜ao e crescimento, principalmente devido `

a sua versatilidade e independˆencia de plataforma. Eles podem ser utilizados nos mais diversos contextos e finalidades, como por exemplo, um servi¸co Web que fornece a con-vers˜ao de valor entre distintas moedas, ou um servi¸co de tradu¸c˜ao de linguagens naturais, como do inglˆes para o portuguˆes, ou at´e em servi¸cos mais complexos, como transa¸c˜oes banc´arias que necessitam de seguran¸ca e confiabilidade. Justamente para ajudar em casos como este (servi¸cos Web mais sofisticados), existem diversas especifica¸c˜oes que comple-mentam e padronizam o uso destes servi¸cos. Podemos citar aqui diversos deles, criados e mantidos por diferentes organiza¸c˜oes:

• WS-Addressing, provˆe padr˜oes de endere¸camento;

(24)

22

• WS-Resource Framework, define um framework aberto e gen´erico que modela um recurso;

• WS-Reliable Messaging, define formas de garantir a entrega de mensagens utilizando servi¸cos Web;

• WS-Notification, padroniza o modelo publish/subscribe utilizando servi¸cos Web.

Este ´ultimo ´e um padr˜ao que foi utilizado neste trabalho, portanto ser´a detalhado a seguir.

3.2

WS-NOTIFICATION

WS-Notification ´e uma fam´ılia de especifica¸c˜oes formais de um sistema de comunica¸c˜ao seguindo o modelo publish/subscribe implementado em servi¸cos Web, composta por trˆes documentos:

• WS-BaseNotification (GRAHAN; HULL; MURRAY, 2006)

• WS-BrokeredNotification (OASIS, 2006a)

• WS-Topics (OASIS, 2006b)

Todos est˜ao atualmente na vers˜ao 1.3, disponibilizados em outubro de 2006 no endere¸co do s´ıtio da OASIS (OASIS, 2007).

O primeiro documento especifica a forma como a comunica¸c˜ao b´asica entre publishers e subscribers deve ser feita, e ´e tratado em mais detalhes na pr´oxima se¸c˜ao. O segundo define a interface NotificationBroker, que representa um servi¸co Web intermedi´ario a pu-blishers e subscribers quando o publisher n˜ao ´e implementado diretamente como um for-necedor de servi¸co. O terceiro documento, WS-Topics, define um mecanismo de divis˜ao de mensagens conhecido como t´opico. Um t´opico ´e uma abstra¸c˜ao que categoriza ou divide as notifica¸c˜oes. Quando uma notifica¸c˜ao ´e criada, ela ´e associada a um ou mais t´opicos, e subscribers podem usar t´opicos como filtros de notifica¸c˜oes, recebendo apenas as notifica¸c˜oes que lhe forem de interesse.

O WS-Topics define trˆes formas de descrever t´opicos, chamadas de expression dialects. A primeira forma, mais simples, chamada de SimpleTopicExpression Dialect, ´e represen-tada simplesmente por um nome de t´opico e uma mensagem como conte´udo. A segunda forma ´e chamada de ConcreteTopicExpression Dialect e permite a defini¸c˜ao de mais de

(25)

23

um t´opico sob uma hierarquia, na forma de ´arvore, mas tendo apenas um t´opico raiz. J´a a terceira forma ´e chamada de FullTopicExpression Dialect. Esta forma define a express˜ao de um t´opico como sendo composto por um ou mais t´opicos ra´ızes, cada um podendo conter sua pr´opria ´arvore, e tamb´em define o uso do caractere “*” para representar todos os t´opicos filhos de um dado t´opico e da express˜ao “//” para representar toda uma sub-´

arvore. Esta ´ultima ainda possibilita a defini¸c˜ao de um t´opico como sendo um ali´as de outro t´opico (ou um conjunto deles). De acordo com esta estrutura, a primeira forma ´e um sub-conjunto da segunda, e a segunda, por sua vez, ´e um sub-conjunto da terceira.

3.2.1

WS-BASENOTIFICATION

A especifica¸c˜ao WS-BaseNotification define um padr˜ao para servi¸cos Web que segue a abordagem publish/subscribe baseada em t´opicos, padronizando as terminologias, con-ceitos, opera¸c˜oes, trocas de mensagens, e WSDL. Neste documento s˜ao conceituados os elementos NotificationProducer e NotificationConsumer, que implementam suas respecti-vas interfaces (homˆonimas, mostradas a seguir) e que representam publishers e subscribers, conforme j´a foram descritos no cap´ıtulo 2. ´E definido o termo Subscription como sendo o elemento que representa a uni˜ao entre um Consumer e um Producer (incluindo algum poss´ıvel filtro de mensagens ou o pr´oprio t´opico utilizado), ou seja, representa o interesse de um Consumer em receber notifica¸c˜oes do Producer. Um recurso Subscription ´e criado no momento que um NotificationProducer recebe uma solicita¸c˜ao de subscription de um NotificationConsumer. Os recursos Subscription s˜ao controlados por mensagens envia-das ao SubscriptionManager, um servi¸co Web representado por um End-Point Reference1 (EPR), que implementa a interface SubscriptionManager, descrita mais adiante, mas ba-sicamente permite a consulta e manipula¸c˜ao das Subscriptions manipuladas por ele. Um recurso SubscriptionManager est´a subordinado ao NotificationProducer, e geralmente ´e implementado pelo provedor do servi¸co do NotificationProducer. Um Subscriber ´e um ele-mento que envia a mensagem de Subscribe a um NotificationProducer, mas n˜ao precisa ser necessariamente um NotificationConsumer. ´E importante notar que um esquema cl´assico publish/subscribe ´e composto por uma entidade central (comumente chamada de canal de eventos), que faz o desacoplamento da comunica¸c˜ao entre produtores e consumidores. Essa entidade ´e descrita na especifica¸c˜ao WS-BrokeredNotification (OASIS, 2006a) e n˜ao ser´a estudada profundamente neste trabalho.

1A defini¸ao formal de EPR est´a no documento Web Service Addressing (W3C, 2004), disponibilizado

pelo cons´orcio W3, mas basicamente representa uma forma de se referenciar ou identificar o endere¸co ou local por onde um servi¸co pode ser acessado, e cont´em informa¸c˜oes que podem ser processadas indepen-dente de protocolo de transporte ou aplica¸c˜ao.

(26)

24

NOTIFICATIONCONSUMER INTERFACE

Essa interface define que NotificationConsumers podem receber notifica¸c˜oes simples, contendo somente o dado espec´ıfico da aplica¸c˜ao, ou receber mensagens Notify. Existe uma estrutura padr˜ao de tags XML que devem ser seguidas para montar uma mensagem Notify, detalhada com exemplos na especifica¸c˜ao (GRAHAN; HULL; MURRAY, 2006).

NOTIFICATIONPRODUCER INTERFACE

Essa interface define que devem ser aceitas duas mensagens, Subscribe e GetCur-rentMessage. A primeira, enviada por um Subscriber, indica ao NotificationProducer o interesse de um Consumer em determinado t´opico, e se for aceito, o producer precisa responder com uma mensagem de confirma¸c˜ao contendo a referˆencia ao recurso Subs-cription. Se forem recebidas duas mensagens Subscribe iguais, devem ser criados dois Subscriptions. A segunda mensagem, GetCurrentMessage, deve retornar uma c´opia da ´

ultima Notification publicada no determinado t´opico, possibilitando que um Consumer rec´em-inscrito receba a notifica¸c˜ao que outros Consumers previamente inscritos no t´opico j´a haviam recebido. Um recurso NotificationProducer pode implementar tamb´em os pa-dr˜oes WS-ResourceProperties (WSRP), e se for o caso, deve conter os atributos referentes aos t´opicos por ele aceitos. Assim um Subscriber pode consultar quais t´opicos s˜ao aceitos.

SUBSCRIPTIONMANAGER INTERFACE

Essa interface define mensagens para manipular um recurso Subscription, controlando ent˜ao seu ciclo de vida:

• Renew - Usada para alterar o tempo de dura¸c˜ao de um recurso Subscription

• Unsubscribe - Usada para encerrar um recurso Subscription

• PauseSubscription - Pode ser implementada opcionalmente, e interrompe momen-taneamente a produ¸c˜ao de Notifications

• ResumeSubscription - Implementada opcionalmente com a anterior, retoma a pro-du¸c˜ao de Notifications no determinado recurso Subscription

(27)

25

3.3

RESUMO DO CAP´

ITULO

Servi¸cos Web fornecem um ambiente distribu´ıdo independente de plataforma e pro-tocolo, sendo bastante prop´ıcio para uso neste trabalho, que ir´a utilizar os servi¸cos de uma rede overlay (explicada no cap´ıtulo 5) como protocolo de transmiss˜ao de mensagens SOAP, e utiliza como base a implementa¸c˜ao das especifica¸c˜oes de publish/subscribe para servi¸cos Web, descrito no pr´oximo cap´ıtulo.

Foi visto tamb´em que a especifica¸c˜ao WS-Notifications define basicamente as interfa-ces NotificationProducer e NotificationConsumer e os m´etodos que implementam (subs-cribe e notify, respectivamente), padronizando assim a forma e os parˆametros destas mesnsagens SOAP.

(28)

26

4

MUSE

Este cap´ıtulo apresenta a aplica¸c˜ao Muse, implementa¸c˜ao das especifica¸c˜oes que for-necer˜ao a comunica¸c˜ao seguindo o padr˜ao publish/subscribe utilizando como base a co-munica¸c˜ao por servi¸cos Web.

4.1

DEFINI ¸

C ˜

AO E USO

O projeto Apache Muse consiste em um framework implementado na linguagem Java, que segue uma s´erie de especifica¸c˜oes descritas mais adiante. E uma implementa¸c˜´ ao aberta, dispon´ıvel no s´ıtio da Apache Software Foundation (APACHE, 2007b), de trˆes padr˜oes de servi¸cos Web, ambos especificados pelo grupo OASIS (OASIS, 2007):

• WS-ResourceFramework (WSRF) WS-Resource (WS-R) WS-BaseFaults (WS-BF) WS-ResourceLifetime (WS-RL) WS-ResourceProperties (WS-RP) WS-ServiceGroup (WS-SG) WS-ResourceMetadataDescriptor (WS-RMD) • WS-Notification (WSN) WS-BaseNotification (WS-BN) WS-Topics (WS-T) • WS-DistributedManagement (WSDM)

Este framework permite aos seus usu´arios a constru¸c˜ao de suas aplica¸c˜oes baseadas em servi¸cos Web, compat´ıveis com os padr˜oes descritos acima, sem despender muito tempo na

(29)

27

implementa¸c˜ao da especifica¸c˜ao em si. O Muse inclui toda a parte de parser XML-Objetos Java, abstra¸c˜oes de baixo n´ıvel referentes `a conex˜ao de rede e protocolos HTTP e SOAP, uma API de persistˆencia, onde usu´arios podem recuperar o estado de um servi¸co Web ap´os a reinicializa¸c˜ao do host, e ferramentas de automatiza¸c˜ao de documentos WSDL, pr´oprias para a implanta¸c˜ao (deployment ) usando Axis2 (APACHE, 2007a). Entre estas ferramentes, est´a dispon´ıvel uma chamada WSDL-to-Java, que, dado um arquivo WSDL, permite a gera¸c˜ao do c´odigo correspondente a descri¸c˜ao do arquivo, tanto para o lado cliente quanto para o servidor.

Este framework permite que desenvolvedores de aplica¸c˜oes utilizem o modelo de co-munica¸c˜ao publish/subscribe descrito na especifica¸c˜ao WS-Notification para sua aplica¸c˜ao, sem se preocupar com toda a parte de baixo n´ıvel que faz a conex˜ao f´ısica entre os hosts com a implementa¸c˜ao da especifica¸c˜ao em si, tornando a programa¸c˜ao da aplica¸c˜ao mais r´apida e eficiente. Vale ressaltar que o Muse n˜ao implementa uma entidade central na comunica¸c˜ao publish/subscribe, comforme especificado por WS-BrokeredNotification (OA-SIS, 2006a), portanto a comunica¸c˜ao se d´a ponto-a-ponto, conforme explicado no cap´ıtulo 3, que descreve a especifica¸c˜ao WS-BaseNotification.

O que mais nos interessa ´e a implementa¸c˜ao do segundo padr˜ao, que j´a foi discu-tido em detalhes na se¸c˜ao 3.2. Para entender melhor o funcionamento do Muse, ele nos disponibiliza um modelo de programa¸c˜ao, descrito a seguir.

4.2

MODELO DE PROGRAMA ¸

C ˜

AO

O framework Muse foi implementado com base em quatro conceitos:

• Capability, que ´e a abstra¸c˜ao de um conjunto de dados e opera¸c˜oes que s˜ao expostas por um servi¸co Web. ´E a menor unidade de representa¸c˜ao de um servi¸co, sendo representada por simples classes Java.

• Resource (recurso), que ´e a abstra¸c˜ao de todos os dados e opera¸c˜oes de um servi¸co Web, descrito pelo documento WSDL. ´E representado por um conjunto de Capabi-lities.

• Um conceito chamado de Implied Resource Pattern, que ´e a abstra¸c˜ao de um tipo de dado usado para guardar valores referentes `a rede e dados de execu¸c˜ao necess´arios para localizar um recurso e invocar seus m´etodos. Ou seja, guarda a rela¸c˜ao direta entre os recursos e os endere¸cos EPR que os representam.

(30)

28

• A camada de isolamento, que ´e a abstra¸c˜ao de uma camada que guarda dados referentes a plataforma utilizada, possibilitando que a camada de l´ogica seja imple-mentada uma ´unica vez e mantenha o funcionamento em diferentes ambientes ou plataformas, como servidores de aplica¸c˜oes J2EE, OSGI, etc...

Esses conceitos se relacionam da forma ilustrada pela figura 4.1.

Figura 4.1: Modelo de programa¸c˜ao do Muse (retirada do s´ıtio do Muse)

A camada de isolameto ´e o ponto de inicializa¸c˜ao do framework e ´e tamb´em o ponto de chegada de requisi¸c˜oes. Como o nome indica, esta camada ´e dependente da plataforma (protocolo de transporte e aplica¸c˜ao utilizado, sistema operacional, etc) utilizada, no caso ´e utilizado o protocolo HTTP, tendo o Tomcat como web-container e o Axis como engine, ambos desenvolvido pela Apache. A fun¸c˜ao desta camada ´e isolar essas dependˆencias das pr´oximas camadas (roteador de recursos, gerenciador de recursos, recursos e capabilities, como podemos observar na figura 4.1), inicializar o roteador (quando receber a primeira requisi¸c˜ao) e a ele delegar qualquer requisi¸c˜ao SOAP rec´em-chegada.

O conceito Implied Resource Pattern ´e implementado pelas camadas gerenciador de recursos e roteador de recursos, conforme mostra a figura 4.1. O roteador ´e a abstra¸c˜ao da porta de acesso `a camada de resource, situada logo ap´os a camada de isolamento, portanto n˜ao depende da plataforma utilizada. Em uma aplica¸c˜ao deve existir apenas uma instˆancia da classe ResourceRouter, entretanto, essa aplica¸c˜ao pode implementar diversos recursos, cada um representado por um documento WSDL diferente. Um roteador ´e respons´avel por instanciar todos os recursos descritos no arquivo de configura¸c˜ao do

(31)

29

Muse, e delegar uma requisi¸c˜ao SOAP qualquer, recebida pela camada de isolamento, para o objeto resource respons´avel. Para isso, o roteador analisa o cabe¸calho SOAP e atrav´es do padr˜ao WS-Adressing determina qual o endere¸co EPR de destino. Com este, ele solicita ao ResourceManager o resource respons´avel pelo EPR, e delega a ele a opera¸c˜ao. Ou seja, o ResourceManager ´e respons´avel por manter a rela¸c˜ao de objetos resource e endere¸cos EPR correspondentes.

Ent˜ao, cada recurso ´e representado por um arquivo WSDL, que define um ´unico endere¸co EPR. Ele ´e respons´avel por delegar `a capability respons´avel as requisi¸c˜oes vindas do roteador, e por inicializar e gerenciar as capabilities que implementam esse recurso. ´E tamb´em um ponto de acesso entre capabilities (quando querem comunicar-se entre si utilizam o recurso como intermediador). Por fim, a capability ´e a unidade final, que realmente implementa a opera¸c˜ao requisitada pelo cliente via SOAP. Ela ´e representada por uma URI, que a identifica unicamente perante o recurso. Esta classe ´e inspecionada durante a inicializa¸c˜ao para saber quais m´etodos dentre os descritos no WSDL ela ´e respons´avel por implementar.

O Muse fornece ao usu´ario final, ent˜ao, um modelo de agrega¸c˜ao, montando uma interface atrav´es dos padr˜oes implementados no framework e op¸c˜oes personalizadas, que podem incluir port types ou comportamentos associados ´e funcionalidades espec´ıficas do contexto da aplica¸c˜ao. Podemos utiliz´a-lo de duas maneiras: descrevendo-os no arquivo WSDL, que ser´a lido pelo cliente, e/ou utilizando a API do Muse, no lado do servidor.

4.2.1

DESCRITOR DE IMPLANTA ¸

C ˜

AO (DEPLOYMENT

DES-CRIPTOR)

O Muse apresenta um arquivo de configura¸c˜ao escrito em XML chamado de muse.xml, onde ´e feita a descri¸c˜ao de detalhes da implanta¸c˜ao. Ele armazena importantes informa-¸c˜oes de configura¸c˜oes como qual o n´ıvel de logs que desejamos receber, em qual arquivo ser´a gravado, quais recursos a aplica¸c˜ao (Muse) dever´a gerenciar, a quais arquivos WSDL est˜ao vinculados, qual a classe que o implementa, quais capabilities ser˜ao usados para implementar as opera¸c˜oes descritas no WSDL, juntamente com a URI que identifica uni-camente cada capability.

(32)

30

4.3

IMPLEMENTA ¸

C ˜

AO DO WS-NOTIFICATION

Conforme ´e especificado no WS-Notification e descrito na se¸c˜ao 3.2, o Muse imple-menta as interfaces NotificationConsumer, NotificationProducer e SubscriptionManager. Al´em destas, ele apresenta a NotificationMessage, que representa um tipo de dado descrito no WS-Notification 1.3 schema, e que ´e utilizado nas opera¸c˜oes Notify e GetCurrentMes-sage. Todas interfaces criadas pelo Muse s˜ao implementadas de modo padr˜ao em um pacote cujo nome ´e derivado da classe, acrescentando-se o sufixo .impl, e o prefixo Simple. Por exemplo, a interface org.apache.muse.ws.notification.NotificationProducer ´e implementada por org.apache.muse.ws.notification.impl.SimpleNotificationProducer. Essa implementa¸c˜ao permite que, se optarmos por desenvolver uma classe mais espec´ıfica, adaptada a uma determinada aplica¸c˜ao, tenhamos um baixo acoplamento, facilitando a altera¸c˜ao.

Todas estas classes e interfaces derivam da classe Capability, que tem seu ciclo de vida (cria¸c˜ao, inicializa¸c˜ao, e destrui¸c˜ao) gerenciado pelo framework. Quando especificamos quais capabilities e resources far˜ao parte da aplica¸c˜ao, atrav´es do arquivo de descri¸c˜ao de implanta¸c˜ao, o Muse analisa o arquivo WSDL correspondente a cada resource, e garante que cada opera¸c˜ao definida neste arquivo possui um m´etodo Java equivalente procurando em cada capability, atrav´es da chamada Class.getMethods(), at´e encontrar um m´etodo de mesmo nome, mas com a primeira letra min´uscula.

A capability NotificationProducer, ao receber uma requisi¸c˜ao Subscribe, cria um Subs-cription WsResource, cujo ciclo de vida pode ser controlado pelo cliente, que fez a re-quisi¸c˜ao. Essas subscriptions s˜ao gerenciadas pelo ResourceManager do Muse, mas s˜ao referenciadas pelo NotificationProducer para que enviem as notifica¸c˜oes para os interes-sados corretos, no tempo certo. Esta capability n˜ao pode ser usada se n˜ao for junto com o recurso SubscriptionManager. Se n˜ao forem implantadas juntas, a inicializa¸c˜ao desta capability ir´a falhar.

A capability SubscriptionManager representa o acordo entre um produtor e um consu-midor interessado em receber as notifica¸c˜oes. Destruir um recurso destes significa romper esta rela¸c˜ao, e com isto o consumidor n˜ao receber´a mais mensagens. O Muse representa todas as subscriptions como recursos impl´ıcitos WS-RF. Eles s˜ao acess´ıveis por um ´unico EPR que pode ser destru´ıdo pelo WS-ResourceLifetime (se for usado).

(33)

31

4.4

RESUMO DO CAP´

ITULO

O Muse foi implementado visando utiliz´a-lo sobre o protocolo HTTP, utilizando um Web-Container como gerenciador de conex˜oes TCP para o recebimento de mensa-gens SOAP. Para o envio de requisi¸c˜oes, o framework utiliza m´etodos da interface Java java.net.Connection, que abrem diretamente uma conex˜ao TCP/IP na rede para o envio de requisi¸c˜oes SOAP. Como queremos que ele n˜ao utilize a rede real (Internet), e sim a rede overlay, apresentada no pr´oximo cap´ıtulo, necessitamos fazer algumas altera¸c˜oes, que ser˜ao explicadas e detalhadas no cap´ıtulo 6.

(34)

32

5

REDES OVERLAY

Sistemas de comunica¸c˜ao distribu´ıda seguindo o modelo publish/subscribe em larga escala s˜ao sistemas que consideram uma rede de disseminadores de eventos instalada sobre uma rede de larga escala como a Internet, ou um subconjunto dela, como em redes overlay, conforme veremos a seguir.

5.1

DEFINI ¸

C ˜

AO E USO

Redes overlay s˜ao redes virtuais, l´ogicas, que s˜ao constru´ıdas sobre uma rede j´a exis-tente, como a Internet. Cada n´o overlay ´e tamb´em um n´o da rede subjacente. Um enlace virtual ´e o nome dado `a conex˜ao entre dois n´os virtuais, e corresponde `a rota da rede subjacente que os conecta. A figura 5.1 ilustra um exemplo deste tipo de rede. Note que um enlace virtual pode ser implementado por mais de um n´o da rede subjacente, e que o roteamento na rede overlay segue crit´erios espec´ıficos da aplica¸c˜ao que utiliza o overlay, envolvendo apenas n´os e enlaces virtuais, sem interferˆencia no roteamento da rede subja-cente. Em outras palavras, o roteamento da rede l´ogica n˜ao tem controle nenhum sobre o roteamento da rede subjacente, por´em pode controlar por quais n´os virtuais a informa¸c˜ao deve passar at´e alcan¸car o destino.

Um tipo de rede overlay que tem ganhado destaque, sendo bastante utilizado ´e co-nhecido como overlay de roteamento. Esse tipo de overlay tem por objetivo substituir o servi¸co de roteamento da camada de rede da arquitetura de protocolos TCP/IP, ofere-cendo uma interface de servi¸cos equivalente `a da camada de rede, mas agregando novas funcionalidades, e implementa pacotes de dados da aplica¸c˜ao acima, que utiliza os ser-vi¸cos desta camada, e de controle ou roteamento, utilizados no protocolo de roteamento do overlay. Ambos s˜ao encapsulados como dados nos protocolos das camadas inferiores, assim como j´a acontece entre as camadas do modelo TCP/IP.

Um grande atrativo de redes overlay ´e a possibilidade de adicionar novas funciona-lidades e quafunciona-lidades de servi¸co diferenciadas sem a necessidade de qualquer altera¸c˜ao

(35)

33

rede subjacente

rede lógica

Figura 5.1: Exemplo de rede overlay

de infra-estrutura na rede, o que ´e atualmente um dos maiores problemas da Internet. Propostas de funcionalidades que atuam na camada de rede (como IntServ, DiffServ, IP Multicast, o pr´oprio IPv6...) necessitam de uma altera¸c˜ao na infra-estrutura f´ısica que n˜ao possui demanda t´ecnico-econˆomica que o permita ou justifique a altera¸c˜ao. ´E necess´aria a altera¸c˜ao de todos os roteadores da rede, o que possui um alto custo financeiro, e as especifica¸c˜oes de tais funcionalidades s˜ao muitas vezes imaturas e bastante vol´ateis. Os softwares, por serem bastante atuais, muitas vezes s˜ao pouco testados, podendo causar instabilidade. Al´em disso, geralmente n˜ao h´a mecanismos claros e seguros que viabilizem estas transi¸c˜oes. Assim, redes overlay ganham merecida importˆancia.

Para este trabalho foi escolhida uma implementa¸c˜ao de rede overlay dispon´ıvel livre-mente, detalhada na pr´oxima se¸c˜ao.

5.2

ROTI

Dentre os diversos prop´ositos para os quais s˜ao usados redes overlay destacam-se a tolerˆancia a falhas do roteamento Internet e multicast em n´ıvel de aplica¸c˜ao. A maior parte das propostas de redes existentes, por´em, trata apenas de cen´arios simples de fa-lhas, como queda de algum enlace ou roteador por falta de energia ou outro acidente. N˜ao se encontra a preocupa¸c˜ao com a ocorrˆencia de comportamento malicioso devido a viola¸c˜oes de seguran¸ca, como invas˜ao de algum nodo. Exemplos de comportamento mali-cioso podem ser inje¸c˜ao de pacotes falsos de controle da rede com a inten¸c˜ao de prejudicar seu funcionamento, a modifica¸c˜ao ou altera¸c˜ao de rotas, o descarte seletivo de pacotes, etc. Outro comportamento tipicamente malicioso consiste em responder corretamente a

(36)

34

pacotes de controle, como probes1, e se recusar a transmitir pacotes de dados. Neste con-texto foi desenvolvida uma rede overlay denominada Rede Overlay Tolerante a Intrus˜oes (ROTI) (OBELHEIRO, 2006; OBELHEIRO; FRAGA, 2005), que ´e capaz de assegurar a comunica¸c˜ao entre os n´os do overlay mesmo que parte dos n´os da rede falhe ou tenha a sua seguran¸ca comprometida.

Sua arquitetura b´asica est´a dividida em alguns sub-sistemas:

• API do usu´ario, que oferece `a aplica¸c˜ao servi¸cos de comunica¸c˜ao de dados, base-ados nas primitivas send e receive;

• subsistema de encaminhamento, respons´avel por transmitir dados vindos da aplica¸c˜ao encapsulando-os em pacotes de dados ROTI, e recepcionar pacotes de dados roteados e disponibiliz´a-lo na forma de dados escritos em um buffer at´e que uma aplica¸c˜ao fa¸ca a leitura destes dados;

• cache de rotas, que mant´em armazenadas diversas rotas conhecidas da rede, man-tendo assim informa¸c˜oes sobre alcan¸cabilidade de alguns nodos, servindo o subsis-tema de encaminhamanto;

• subsistema de roteamento, que ´e respons´avel por gerenciar as rotas mantidas em caches e por realizar toda troca de informa¸c˜oes de controle do roteamento;

• subsistema de detec¸c˜ao de falhas e recupera¸c˜ao de faltas, que monitora da-dos estat´ısticos como a latˆencia m´edia das transmiss˜oes e o ´ındice de perdas, forne-cidos pelos subsistemas de encaminhamento e roteamento, e baseado neles identifica uma falha, agindo diretamente nesses subsistemas para realizar a recupera¸c˜ao;

• gerˆencia criptogr´afica ´e a parte que gerencia todo o esquema de seguran¸ca base-ado em criptografia e na infra-estrutura de chaves p´ublicas (ICP). Esta parte ainda est´a sendo desenvolvida.

Uma representa¸c˜ao da intera¸c˜ao entre esses sub-sistemas pode ser observada na figura 5.2. Nela s˜ao utilizadas setas tracejadas para indicar fluxo de controle e setas cont´ınuas para fluxo de dados.

1Probes s˜ao mecanismos bastante utilizados para se verificar se n´os est˜ao alcan¸aveis e funcionando

corretamente. Entretanto este mecanismo detecta apenas falhas “benignas”, n˜ao levando em considera¸c˜ao comportamento malicioso, uma vez que um n´o malicioso pode responder perfeitamente `as mensagens de probe, por´em se recusar a entregar uma mensagem de dados, por exemplo.

(37)

35

Figura 5.2: Intera¸c˜ao entre os sub-sistemas da ROTI (OBELHEIRO; FRAGA, 2005)

As amea¸cas de seguran¸ca `as quais n´os (incluindo os n´os virtuais) na Internet est˜ao sujeitos podem ser divididas basicamente em trˆes classes: confidencialidade, integri-dade e disponibiliintegri-dade. As amea¸cas `a confidencialidade dizem respeito a pessoas n˜ao autorizadas obterem acesso a mensagens da rede. Essas amea¸cas n˜ao foram tratadas na implementa¸c˜ao da ROTI discutida neste trabalho.

As amea¸cas `a integridade, por sua vez, podem se subdividir em trˆes grupos: modifi-ca¸c˜ao n˜ao autorizada, falsifica¸c˜ao de mensagens e replay de mensagens. Os dois primei-ros grupos de amea¸cas s˜ao contornados com uso de assinaturas digitais, baseadas numa infra-estrutura de chaves p´ublicas, na parte de controle, e na parte de dados s˜ao usados mecanismos de keyed-Hash Message Authentication Codes (HMACs)2 . J´a as amea¸cas de replay de mensagens, que consistem em reproduzir mensagens anteriormente enviadas a fim de confundir e atrapalhar a comunica¸c˜ao, s˜ao contornadas adicionando um controle de n´umero de seq¨uˆencia de pacotes.

As amea¸cas `a disponibilidade, que comp˜oem o principal foco desta implementa¸c˜ao, podem tamb´em ser divididas em trˆes sub-grupos: descarte de pacotes, desvio de pacotes e sobrecarga. O descarte de pacotes de controle ´e tratado com simples retransmiss˜oes peri´odicas, caracterizando o roteamento pr´o-ativo. O descarte de pacotes de dados ´e tratado primeiramente com retransmiss˜oes, seguido da altera¸c˜ao da rota utilizada, e ainda, se ela continuar faltosa posteriormente, sua invalida¸c˜ao definitiva. O problema de desvios

2HMACs s˜ao mecanismos criptogr´aficos baseados em chaves sim´etricas compartilhadas, que garantem

(38)

36

de pacotes de controle ´e tratado com a verifica¸c˜ao das rotas de cada pacote. Nos pacotes de dados, al´em desta verifica¸c˜ao, ´e utilizado o mesmo comportamento quanto ao descarte de pacotes. Por fim, amea¸cas referentes a sobrecarga, que n˜ao representam o objetivo da implementa¸c˜ao, s˜ao tratadas apenas a n´ıvel do plano de controle, limitando-se a taxa de emiss˜ao de mensagens de roteamento.

5.3

ADAPTA ¸

C ˜

OES

A ROTI, descrita na se¸c˜ao 5.2, havia sido implementada na forma de uma simula¸c˜ao usando o Simmcast3 (MUHAMMAD; BARCELLOS, 2002), um simulador de redes base-ado na linguagem Java. Portanto, o esfor¸co inicial deste trabalho consistiu em adaptar essa simula¸c˜ao existente para executar em uma rede real, utilizando para a comunica¸c˜ao entre os n´os o protocolo UDP como protocolo de transporte. A escolha do UDP como protocolo de transporte se deu pelo fato do protocolo TCP fornecer confiabilidade, inde-sejada no caso, ou seja, o protocolo realiza automaticamente retransmiss˜oes de pacotes perdidos de forma transparente, mascarada. Esse fato obviamente atrapalha a detec¸c˜ao de falhas da ROTI, pois esta se baseia em fatores como porcentagem de pacotes perdidos e o tempo de resposta de um ACK. Em outras palavras, o protocolo TCP executa os controles que devem ser tomados na pr´opria ROTI, portanto seu uso se torna proibitivo.

O simulador Simmcast exigia um certo grau de acoplamento da aplica¸c˜ao que o uti-lizava, o que tornou o porte `a rede real um pouco mais trabalhoso. O Simmcast exige que classes que enviem ou recebam dados da rede simulada derivem de classes threads implementadas e gerenciadas pelo pr´oprio simulador, chamadas de NodeThread. Ele tam-b´em define uma classe central, chamada de Node, que representa um n´o da rede e possui um identificador ´unico na rede, representado por um inteiro. A figura 5.3 representa as principais classes utilizadas na implementa¸c˜ao da ROTI.

Essa figura relaciona o fluxo de dados e eventos com as principais classes, omitindo algumas classes auxiliares e aquelas que basicamente encapsulam dados (como as classes que representam pacotes de dados e de roteamento). Conforme j´a mensionado, a classe base da simula¸c˜ao ´e a ITONNode, derivada de Node, pertencente ao Simmcast. Cada n´o overlay ´e representado por uma ´unica instˆancia de ITONNode. Uma instˆancia desta classe possui um ITONRouter, que ´e a interface de servi¸co do subsistema de roteamento, e um ITONForwarder, que e a interface de servi¸co do subsistema de encaminhamento de

paco-3O simulador Simmcast est´a dispon´ıvel no site <http://www.inf.unisinos.br/ simmcast/> e foi

(39)

37

tes. O ITONRouter ´e respons´avel por mediar o acesso ao cache de rotas (RouteCache) e controlar a emiss˜ao de ROUTE-UPDATEs e ROUTE-REQUESTs. Estes s˜ao pacotes de con-trole utilizados para troca de informa¸c˜oes sobre roteamento da rede overlay, e possuem informa¸c˜oes sobre atualiza¸c˜ao e requisi¸c˜ao de rotas, respectivamente. Al´em de manter um cache de rotas v´alidas, RouteCache tamb´em guarda informa¸c˜oes sobre rotas e enlaces em quarentena ou permanentemente inv´alidos4 (a manipula¸c˜ao dessas informac˜oes fica a cargo de ITONRouter). O ITONForwarder implementa os m´etodos send() e receive() que s˜ao chamados pela ITONNode, que por sua vez os fornece `a API de usu´ario. ITON-Forwarder tamb´em interage com ConnectionState e ConnectionManager para gerenciar reconhecimentos e buffers de transmiss˜ao e recep¸c˜ao.

A thread ListenerThread, como o nome indica, ´e a ´unica thread do n´o overlay que recebe diretamente pacotes da rede, e ´e respons´avel por delegar os pacotes `as threads respons´aveis, realizando uma tarefa de demultiplexa¸c˜ao: durante a inicializa¸c˜ao, ITON-Node registra junto a ListenerThread uma associa¸c˜ao entre threads de processamento e os tipos espec´ıficos de pacotes que s˜ao capazes de processar. A ListenerThread classi-fica, ent˜ao, os pacotes recebidos e os insere em uma fila de acordo com o seu tipo. As threads de processamento definidas na simula¸c˜ao s˜ao DataThread, RouteUpdateThread, RouteRequestThread e RouteReplyThread. A primeira thread processa pacotes de da-dos, enquanto as demais processam pacotes de roteamento. Outro tipo de thread utilizado na simula¸c˜ao ´e chamado de thread de transmiss˜ao, que compreende TransmissionThread e ITONRouterThread. A primeira ´e respons´avel por transmitir pacotes de dados, e a se-gunda pacotes de roteamento, disparados pelo ITONRouter. A ´ultima thread mostrada na figura ´e SenderThread, que ´e usada para simular um cliente que envia dados atrav´es da rede. Ap´os a nossa adapta¸c˜ao `a rede real essa classe foi eliminada. Todas essas threads s˜ao o derivadas de NodeThread, do simulador. Algumas delas (especialmente as de transmis-s˜ao) foram criadas porque, no Simmcast, apenas a classe NodeThread e suas descendentes podem acessar m´etodos de transmiss˜ao e recep¸c˜ao de pacotes. Essa separa¸c˜ao de fun¸c˜oes faz com que seja necess´ario gerenciar filas de pacotes para a comunica¸c˜ao entre as classes que contˆem l´ogica de aplica¸c˜ao (como ITONForwarder e ITONRouter) e aquelas que tˆem acesso a rede; por outro lado, ela favorece a modularidade, reduzindo o acoplamento entre as classes e permitindo com que elas sejam facilmente substitu´ıdas.

Como na simula¸c˜ao n˜ao existe nenhum protocolo de transporte confi´avel como o TCP

4Rotas e enlaces que foram certa vez detectados como faltosos s˜ao colocados em quarentenas, sendo

temporariamente desutilizados. Ap´os o tempo de quarentena a rota se torna funcional novamente, vol-tando a ser utilizada. Se uma rota entra diversas vezes em quarentena, ´e definido um limiar em que, a partir dele essa rota ´e marcada como inv´alida permanentemente. S´o poderia voltar a ser utilizada configurando-a explicita e manualmente

(40)

38

executando sobre a ROTI, foi implementado um protocolo simples de janelas deslizantes com reconhecimentos seletivos para melhorar o desempenho da transmiss˜ao. A gerˆencia de todo o estado da conex˜ao com outro n´o, como buffers de envio e recep¸c˜ao de dados e janelas de transmiss˜ao e recep¸c˜ao) ficou a cargo da classe ConnectionState. Ela tamb´em ´e respons´avel por controlar os reconhecimentos pendentes e recebidos: quando um ACK ´e recebido ou um timeout expira, a classe ConnectionState passa a informa¸c˜ao corres-pondente (RTT5 ou perca, respectivamente) para a classe RouteMonitor, que ´e a classe respons´avel pela detec¸c˜ao de falhas. Quando uma falha ´e detectada, esta classe interage com ITONRouter para invalidar (tempor´aria ou permanentemente) a rota afetada. Cada n´o possui uma instˆancia da classe ConnectionState para cada um dos seus vizinhos, e a classe ConnectionManager se respons´abiliza por gerenciar essas instˆancias.

Como a estrutura da ROTI foi implementada seguindo a base do Simmcast, nossa es-trat´egia foi manter a estrutura, eliminando apenas as dependˆencias do Simmcast, e substi-tuindo chamadas da rede do simulador por chamadas UDP. Para isso foi necess´ario fazer o mapeamento dos endere¸cos dos n´os overlay como inteiros para endere¸cos dos n´os como IPs, encapsulados na classe java.net.InetAddress. As classes java.net.DatagramSocket e java.net.DatagramPacket forneceram primitivas de comunica¸c˜ao UDP (send e receive) pela rede real. Todas as threads usadas, que antes derivavam da classe NodeThread, do Simmcast, agora s˜ao derivadas de threads Java (java.lang.Thread), e transferˆ en-cias de pacotes entre as threads agora s˜ao feitas com o aux´ılio de uma fila bloqueante (java.util.concurrent.LinkedBlockingQueue), que cuida da sincroniza¸c˜ao das threads de forma transparente. Por fim, um arquivo de configura¸c˜ao ´e utilizado na inicializa¸c˜ao de cada n´o. Esse arquivo, passado como parˆametro na inicializa¸c˜ao, possui a configura¸c˜ao est´atica do in´ıcio da rede, e deve informar qual o identificador ROTI (um n´umero inteiro) do n´o, al´em do par <identificador ROTI, endere¸co IP> de cada um de seus vizinhos.

As primitivas de servi¸co oferecidas pela ROTI (que se assemelham muito `as fornecidas por uma camada de rede) foram concentradas na classe central da ROTI, ITONNode, e fornece os seguintes m´etodos:

• bool send (byte[] data, int dst) - m´etodo que envia dados do usu´ario no formato de by-tes, para um destino representado por um n´umero inteiro que identifica unicamente um n´o overlay, e retorna um valor booleano indicando se o destino ´e alcan¸c´avel ou n˜ao;

5Round-Trip Time (RTT) significa o tempo que um dado leva para ir pela rede ao destino e retornar,

(41)

39

• byte[] receive() - m´etodo bloqueante, que escuta determinada porta at´e receber algum dado de outro n´o;

• bool encryptedSend (byte[] data, int dst) - o mesmo que o primeiro, por´em utiliza criptografia para proteger o conte´udo da mensagem ao trafegar pela rede. O subsis-tema de criptografia da rede ROTI ainda est´a sendo desenvolvido, portanto ainda n˜ao foi testado.

Esses m´etodos se baseiam nos m´etodos fornecidos pela classe iton.ITONRouter, que ´e quem gerencia todo o sub-sistema de roteamento de dados e mensagens de controle.

5.4

RESUMO DO CAP´

ITULO

A id´eia de utilizar uma rede overlay como a ROTI para formar os nodos dissemi-nadores de eventos de uma aplica¸c˜ao publish/subscribe ´e fazer com que informa¸c˜oes de controle e eventos sejam disseminadas eficientemente no sistema publish/subscribe ga-rantindo a disponibilidade da rede e a tolerˆancia a intrus˜oes, mecanismos providos pela utiliza¸c˜ao deste overlay.

A integra¸c˜ao da rede ROTI com a aplica¸c˜ao publish/subscribe ´e discutida no pr´oximo cap´ıtulo.

(42)

40 ITONNode ITONForwarder ITONRouter ListenerThread DataThread Data/ACK RouteRequestThread ROUTE-REQUEST RouteReplyThread ROUTE-REPLY CACHE-REPLY RouteUpdateThread ROUTE-UPDATE SenderThread send() Data/ACK Simmcast Network DataPacket

ROUTE-REQUEST ROUTE-REPLY CACHE-REPLY ROUTE-REPLY CACHE-REPLY ROUTE-REPLY CACHE-REPLY ROUTE-UPDATE ITONRouterThread ROUTE-REQUEST ROUTE-UPDATE TransmissionThread RouteMonitor transmission DataPacket ConnectionState ACK ConnectionManager RouteCache PendingPacket DataPacket loss/RTT Packet

(43)

41

6

INTEGRA ¸

C ˜

AO

Este cap´ıtulo descreve a estrat´egia utilizada para a integra¸c˜ao entre o framework Muse e a rede overlay ROTI. Ao final apresenta alguns resultados preliminares de desempenho do software resultante.

6.1

ALTERA ¸

C ˜

OES NO MUSE

O framework Muse foi implementado visando sua utiliza¸c˜ao/integra¸c˜ao com algumas ferramentas tamb´em dispon´ıveis livremente na Internet. Todas elas utilizam como base o protocolo de transporte HTTP. Com esse framework, a aplica¸c˜ao publish/subscribe (ou outra qualquer) do usu´ario ´e tipicamente compactada em um arquivo .war para ser im-plantado em um web-container, como o Tomcat. O framework tamb´em pode ser utilizado com ferramentas que auxiliam o desenvolvimento de aplica¸c˜oes voltadas `a web, como Axis2 e OSGi. Por´em, a forma de utiliza¸c˜ao mais simples consiste na utiliza¸c˜ao de um Servlet1, implementado pela classe org.apache.muse.platform.mini.MiniServlet, que estende a classe javax.servlet.http.HttpServlet. Este pacote faz parte da camada de isola-mento do Muse, e portanto ´e dependente da arquitetura, protocolo e tecnologia utilizada na m´aquina. A figura 6.1 ilustra a pilha de protocolos utilizados por padr˜ao pelo Muse.

As setas pretas indicam o caminho percorrido por requisi¸c˜oes SOAP utilizadas por uma aplica¸c˜ao do framework constru´ıda da maneira mais simples, ou seja, sem utilizar Axis ou OSGi. ´E importante observar dois casos, cada um representado por uma das setas:

1. Para receber uma requisi¸c˜ao (seta que chega da rede e aponta para a aplica¸c˜ao final

1Inicialmente criada pela Sun, a especifica¸ao de Servlet define seu ciclo de vida e intera¸c˜oes com um

web-container, que ´e o respons´avel por gerenciar o Servlet. A principal fun¸c˜ao de um objeto Servlet ´e cuidar da interface com a rede, utilizada principalmente com o protocolo HTTP. Assim, s˜ao definidos m´etodos doPost e doGet(entre outros), que s˜ao m´etodos chamados pelo web-container quando este recebe uma requisi¸c˜ao HTTP do determinado tipo (GET, POST), e que prevˆe o retorno de alguma informa¸c˜ao, tipicamente uma p´agina em HTML

(44)

42

Figura 6.1: Pilha nativa do Muse

do usu´ario), o Muse implementa um HttpServlet, que ´e gerenciado pelo Tomcat. Ent˜ao, solicita¸c˜oes vindas de outros n´os s˜ao recebidas e respondidas passando pelo Tomcat.

2. Para enviar uma requisi¸c˜ao (seta que sai da aplica¸c˜ao do usu´ario e aponta para a rede), o Muse abre diretamente uma requisi¸c˜ao HTTP, e obtendo assim tamb´em a resposta da requisi¸c˜ao.

Como a rede overlay tolerante a intrus˜oes trabalha apenas com protocolo UDP, as altera¸c˜oes necess´arias foram em fun¸c˜ao de isolar toda parte que trata de conex˜oes HTTP dentro do Muse, e nestes lugares, substituir pelos servi¸cos oferecidos pela ROTI. A figura 6.2 detalha a localiza¸c˜ao destes pontos no framework.

Conforme j´a mencionado anteriormente, o Muse mantinha conex˜oes HTTP em dois momentos: (1) quando recebia uma requisi¸c˜ao SOAP e enviava uma resposta, e (2) quando um n´o enviava uma requisi¸c˜ao SOAP e esperava sua resposta. A primeira ´e realizada pela camada de isolamento, implementada pela classe MiniServlet. Esta classe sobrescreve o m´etodo doPost que realizava o processamento da requisi¸c˜ao e enviava uma resposta. A segunda ´e feita por um capability, implementado pela classe SimpleSoapClient, quando a aplica¸c˜ao do usu´ario realizava uma requisi¸c˜ao. Neste caso, apesar de tamb´em depender de protocolo (HTTP), esta classe n˜ao faz parte da camada de isolamento do Muse, o que n˜ao parece muito l´ogico. Entretanto, a estrat´egia utilizada foi a de alterar o m´ınimo poss´ıvel do c´odigo original para se chegar a uma primeira vers˜ao, para que, a partir dela, se possa

(45)

43

Figura 6.2: Pontos de altera¸c˜ao do framework Muse

definir novas estrat´egias. Portanto essa estrutura foi mantida.

A integra¸c˜ao do Muse com a ROTI consistiu, ent˜ao, em alterar estes dois pontos do framework, inserindo chamadas da rede overlay ao inv´es de conex˜ao HTTP. A figura 6.3 ilustra a id´eia do middleware ap´os as altera¸c˜oes, utilizando para transporte a ROTI.

Figura 6.3: Pilha adaptada `a ROTI

Para realizar estas altera¸c˜oes, foi criada uma com a mesma fun¸c˜ao da classe Mi-niServlet, por´em com outro protocolo. Ela foi chamada de UDPServlet, e contata a rede overlay e o roteador do Muse. No outro ponto de altera¸c˜ao, na classe SimpleSo-apClient, foi alterada a chamada de requisi¸c˜ao de URL.openConnection(), connec-tion.setRequestMetod(POST) e connection.connect()(que utilizam HTTP), para a rede overlay, atrav´es do m´etodo iton.init.NodeInitializer.getNodeInstance(null)

(46)

44

e node.send(destinationIP, soapBytes).

6.2

RESULTADOS

Ap´os a integra¸c˜ao, fizemos alguns testes preliminares de medida de tempo de resposta. A medi¸c˜ao de tempo come¸ca quando uma requisi¸c˜ao SOAP j´a transformada em bytes ´e enviada do framework para a unidade de rede respons´avel por transport´a-la2. Ap´os chegar no destino, a requisi¸c˜ao ´e transformada em XML, processada pelo Muse, entregue `

a aplica¸c˜ao do usu´ario. O Muse gera ent˜ao uma resposta em XML, que ´e transformada em bytes, retorna pela rede ao requisitante, que entrega de volta a resposta ao Muse, que s´o ent˜ao termina a medi¸c˜ao do tempo. Foi gerado um gr´afico comparativo entre as diferentes vers˜oes do Muse e seus respectivos tempos de resposta. Foram feitas em cada vers˜ao o envio de mil requisi¸c˜oes, com intervalo de 200 milisegundos entre elas. O gr´afico a seguir mostra os resultados.

Figura 6.4: Tempos de respostas de diferentes vers˜oes do Muse

Como podemos observar (e j´a era esperado), o tempo de resposta do Muse utilizando a ROTI ´e 57,38% maior que utilizando UDP diretamente, que por sua vez ´e 109,32% maior do que o Muse original, sem altera¸c˜ao (utilizando HTTP). Entretanto, algo que n˜ao era esperado foi um alto desvio padr˜ao dos casos com o Muse modificado. Esse fato pode ser explicado pelo fato dos testes terem sido feitos em uma rede local utilizada por

2Para compara¸ao, fiz medi¸oes com o Muse original, utilizando HTTP, com o Muse alterado,

utili-zando no lugar da ROTI chamadas UDP diretas, e o Muse final, que utiliza a rede ROTI para o transporte das requisi¸c˜oes

(47)

45

outros computadores em um laborat´orio da UFSC, assim como alguma carga extra de processamento na m´aquina receptora, que estava utizando um sistema operacional base-ado em interface gr´afica. O gr´afico 6.5 mostra os tempos de respostas em milisegundos, na sequˆencia em que foram enviados. Como pode se observar, existem alguns momentos em que a rede possui um comportamento est´avel e constante, abaixo de 100 ms. Entre-tanto, em outros momentos, possivelmente quando o Muse compete pelo processador com outras tarefas, ou fluxo de informa¸c˜oes na rede aumenta, o tempo de resposta se torna absolutamente inst´avel, como no final, com diversos tempos ultrapassando os 500 ms.

Figura 6.5: Tempos de respostas do Muse com ROTI

Estes resultados representam o tempo de resposta do middleware em sua primeira vers˜ao, sem ser otimizado, e sem ter implementado a parte de criptografia, que est´a em andamento. Enfim, s˜ao testes preliminares, mas que nos possibilitam concluir que o uso do middleware para comunica¸c˜ao publish/subscribe ´e perfeitamente aceit´avel.

6.3

RESUMO DO CAP´

ITULO

Este cap´ıtulo descreveu como foi realizada as altera¸c˜oes no Muse e apresentou alguns resultados preliminares que comprovam a viabilidade de seu uso como middleware.

Referências

Documentos relacionados

A estabilidade do corpo docente permanente permite atribuir o conceito muito bom, segundo os parâmetros da área, para o item 2.2 (pelo menos 75% dos docentes permanentes foram

• A Revolução Industrial corresponde ao processo de industrialização que teve início na segunda metade do.. século XVIII no

Segundo Eiras (1994), existem cerca de 700 espécies de Nematoda e cerca de 400 espécies de Acanthocephala que são parasitas de peixes. Não foi possível identificar as

Com esse propósito, é feito o tratamento de uma base de registros de falha, conversão dos dados para o formato de uma série histórica mensal de falhas por transformador,

E no espaço da marca da violência não há espaço para uma recuperação do humano que se perdeu ao longo de um processo de desapossamento: esses jovens não tiveram espaço

O SAF-4 não foi viável técnica e financeiramente, situação resultante das condições impróprias do solo em que se encontra e da composição (espécies e espaçamentos). O

O TBC surge como uma das muitas alternativas pensadas para as populações locais, se constituindo como uma atividade econômica solidária que concatena a comunidade com os

Dada uma elipse com parˆametros geom´etricos a e c respectivamente, considere o sistema cartesiano ortogonal canonico xOy cuja origem O e´ o ponto m´edio do segmento ˆ focal, cujo