SISTEMAS DISTRIBUÍDOS BASEADOS EM COORDENAÇÃO
Por: Sara • 6/5/2018 • 1.255 Palavras (6 Páginas) • 483 Visualizações
...
A maioria dos sistemas publicar/subscrever exige que os processos comunicantes estejam ativos ao mesmo tempo (temporal).
Comunicação Geradora:
Modelo de coordenação mais conhecido que combina processos desacoplados tanto referencial quanto temporalmente.
A idéia fundamental é que um conjunto de processos independentes utilize um espaço independente e persistente de dados de tuplas. Tuplas são dados rotulados que consistem em uma quantidade de campos tipados.
Os processos podem colocar qualquer tipo de registro no espaço de dados compartilhado, isto é, eles geram registros de comunicação. O interessante é que os espaços de dados compartilhados implementam um mecanismo de busca para as tuplas. Assim, quando um processo quer extrair um tupla do espaço de dados, ele especifica os valores dos campos em que está interessado. Então, qualquer tupla que combinar com essa especificação é removida do espaço de dados e passada para o processo.
ARQUITETURA
Um aspecto importante de sistemas baseados em coordenação é que a comunicação ocorre pela descrição das características de itens de dados que devem ser trocados.
Abordagem Global
Vamos considerar que itens de dados são descritos por uma série de atributos. Um tipo de dados é publicado quando é oferecido para outros processos para leitura. Para isso, é preciso passar para o middleware uma subscrição que contenha uma descrição dos itens de dados nos quais o subscritor está interessado.
O próximo desafio é associar subscrições com itens de dados. Quando a associação for bem sucedida há dois cenários possíveis.
No primeiro caso, o middleware pode decidir repassar os dados publicados para seu conjunto de subscritores existentes no momento em questão, isto é, processos que possuem uma subscrição compatível. Como alternativa, o middleware também pode repassar uma notificação, quando então os subscritores podem executar uma operação read pra recuperar o item de dados publicado.
[pic 2]
Arquiteturas Tradicionais
A solução mais simples para comparar itens de dados com subscrições é ter uma arquitetura cliente/servidor centralizada. Essa é uma solução adotada atualmente por muitos sistemas publicar/subscrever, como por exemplo:
- WebShepe da IBM;
- JMS da SUN;
- JINI/JavaSpaces;
Exemplo: JINI e JavaSpaces
Jini é um sistema distribuído que consiste em uma mistura de elementos, embora relacionados.
Ele guarda uma forte relação com a linguagem de programação Java, embora muitos de seus principios possam ser implementado igualmente em outras linguagens. Uma parte importante do sistema é formada por um modelo de coordenação para comunicação geradora.
Jini oferece desacoplamento temporal e referencial de processos por meio de um sistema de coordenação denominado JavaSpaces.
Um JavaSpace é um espaço de dados compartilhado que armazena tuplas representantes de um conjunto tipado de referências a objetos Java. Vários JavaSpares podem coexistir em um único sistema Jini.
Tuplas são armazenadas em forma serializada. Em outras palavras, sempre que um processo quiser armazenar uma tupla, em primeiro lugar essa tupla é construída, o que implica que todos os seus campos também sejam construídos. Em decorrência, se uma tupla contiver dois campos diferentes que se referem ao mesmo objeto, quando armazenada em uma implementação de JavaSpace, conterá duas cópias embutidas daquele objeto.
Um tupla é colocada no JavaSpace por meio de uma operação write, que primeiro constrói a tupla e só depois armazena.
Toda vez que a operação write é chamada em uma tupla, outra cópia construída dessa tupla é armazenada no JavaSpace. Essa cópia construída é chamada instância de tupla.
[pic 3]
O aspecto interessante da comunicação gerado em Jini é o modo como as instâncias de tuplas são lidas de um JavaSpace.
Para ler uma instância de tupla, um processo fornece uma outra tupla que ele usa como gabarito para comparar instâncias de tuplas armazenadas no JavaSpace. Como qualquer outra tupla, uma tupla de gabarito é um conjunto tipado de referências de objetos.
Somente instâncias de tupla do mesmo tipo que o gabarito podem ser lidas de um JavaSpace. Um campo na tupla de gabarito ou contém uma referência a um objeto ou contém o valor NULL. Por exemplo, considere a seguinte classe:
[pic 4]
Depois de um gabarito declarado como:
Tupla gabarito = new Tupla (null,new Integer (36));
Combinará com a tupla:
Tupla item = new Tupla (“MinhaTupla, new Integer (36));
Para associar uma instância
...