• Nenhum resultado encontrado

Os sistemas distribu´ıdos abertos s˜ao uma pec¸a fundamental na sociedade de informac¸˜ao actual. Estes sistemas s˜ao constitu´ıdos por v´arios processos que se executam em anfitri˜oes heterog´eneos ligados a uma rede tamb´em heterog´enea, como a Internet. Muitas aplicac¸˜oes distribu´ıdas s˜ao constru´ıdas usando primitivas simples como os sockets TCP/IP e chama- das a procedimentos remotos. Existe uma grande necessidade de haver ferramentas mais eficazes que permitam a criac¸˜ao de aplicac¸˜oes complexas com um baixo time-for-market, ao mesmo tempo que garanta a tolerˆancia a desconex˜oes, recuperac¸˜ao de crashes no ser- vidor e seguranc¸a contra acc¸˜oes maliciosas.

O espac¸o de tuplos veio introduzir uma nova forma de comunicac¸˜ao entre sistemas distribu´ıdos, com o objectivo de resolver todos os problemas descritos anteriormente.

2.4.1

Definic¸˜ao

O espac¸o de tuplos foi originalmente introduzido na linguagem de programac¸˜ao LINDA [13]. Este guarda e recupera tuplos (sequˆencias finitas de valores). As operac¸˜oes suporta- das s˜ao essencialmente a de inserir, ler e remover tuplos.

Um tuplo t = hf1, f2, . . . , fni em que todos os campos tˆem um valor j´a definido tem

o nome de entrada. Um tuplo que tem um ou mais campos indefinidos ´e denominado de template(denotado com uma barra, e.g. t). Uma entrada t e um template t combinam, se tiverem o mesmo n´umero de campos e todos os valores desses campos s˜ao iguais. Por exemplo, o template ha, b, ∗i combina com qualquer tuplo que tenha trˆes campos e que estes tenham como primeiro e segundo campo, os valores a e b (o s´ımbolo ∗ significa que esse campo pode ser qualquer valor). Um tuplo t pode ser inserido no espac¸o de tuplos usando a operac¸˜ao out(t). A operac¸˜ao rd(t) ´e usada para ler e obter tuplos do espac¸o que combinem com o template t. Um tuplo pode ser lido e removido do espac¸o usando a

Cap´ıtulo 2. Conceitos Fundamentais 12

operac¸˜ao in(t). As operac¸˜oes in e rd s˜ao bloqueantes. As vers˜oes n˜ao bloqueantes, inp e rdp s˜ao muitas vezes fornecidas pelo espac¸o de tuplos.

O espac¸o de tuplos suporta um modelo de comunicac¸˜ao que ´e desacopolado no tempo (os processos podem n˜ao estar activos ao mesmo tempo) e no espac¸o (os processos n˜ao precisam de saber a identidade e localizac¸˜ao dos outros) [9], fornecendo algum tipo de sincronizac¸˜ao, ao mesmo tempo [23].

As grandes vantagens em usar o espac¸o de tuplos s˜ao a sua simplicidade, possuindo apenas quatro operac¸˜oes b´asicas (e outras variantes), ser content-addressable, ou seja, o facto de os tuplos serem acedidos atrav´es do seu conte´udo fornece uma grande flexibili- dade ao modelo e por ´ultimo, ter uma comunicac¸˜ao desacopolada.

2.4.2

DepSpace

O DEPSPACE [3] ´e um servic¸o de coordenac¸˜ao que usa o modelo da m´aquina de estados [22] para implementar a sua tolerˆancia a faltas Bizantinas e prover uma abstracc¸˜ao de um espac¸o de tuplos. Este espac¸o de tuplos ´e replicado em um conjunto de servidores. Esse conjunto forma um reposit´orio de tuplos, garantindo que o servic¸o seja confi´avel. Para o DEPSPACEser confi´avel tem que satisfazer os atributos de confiabilidade [20]. Os atribu- tos relevantes na definic¸˜ao de um sistema confi´avel s˜ao: integridade (nenhuma alterac¸˜ao impr´opria ao espac¸o de tuplos pode ocorrer), disponibilidade (o espac¸o de tuplos tem que estar dispon´ıvel para executar as operac¸˜oes pedidas) e confidencialidade (o conte´udo dos campos de cada tuplo n˜ao podem ser divulgados para intervenientes n˜ao autorizados). O servic¸o de coordenac¸˜ao fornecido pelo DEPSPACE ´e confi´avel enquanto menos de um

terc¸o das r´eplicas n˜ao falhem.

A Figura 2.4 descreve dois clientes a executar operac¸˜oes sobre as r´eplicas do servic¸o de coordenac¸˜ao DEPSPACE. Esta descreve que o Cliente 1 quando executa uma operac¸˜ao

sobre o servic¸o de coordenac¸˜ao, a mesma ´e executada sobre todas as r´eplicas, assim como a operac¸˜ao do Cliente 2. Outro ponto importante ´e que estas operac¸˜oes s˜ao executadas na mesma ordem em todas as r´eplicas correctas.

A Tabela 2.1 apresenta todas as operac¸˜oes suportadas pelo DEPSPACE.

2.4.3

Verificac¸˜ao de Pol´ıticas de Seguranc¸a

O controlo de acesso do DEPSPACEsegue o modelo de pol´ıticas Clark-Wilson (ver Secc¸˜ao

2.2.3). Este tipo de protecc¸˜ao de granularidade fina, tem em conta trˆes tipos de parˆametros para decidir se uma operac¸˜ao pode ou n˜ao ser em um espac¸o de tuplos:

• o identificador do processo p que invocou a operac¸˜ao; • a operac¸˜ao op e os seus argumentos;

Cap´ıtulo 2. Conceitos Fundamentais 13

DepSpace

Cliente 1 Cliente 2 out(<f1,f2,...fn>) inp(<f1,f2,...fn>) Replica 1 Replica 2 Replica 3 Replica 4

Figura 2.4: Arquitectura do Servic¸o de Coordenac¸˜ao DEPSPACE.

Cada espac¸o l´ogico definido no DEPSPACE tem uma ´unica pol´ıtica de acesso que deve ser definida durante a configurac¸˜ao do sistema, pelo criador do espac¸o. Quando uma operac¸˜ao ´e invocada pelo servidor, existe uma verificac¸˜ao se a operac¸˜ao satisfaz a pol´ıtica de acesso do espac¸o. Os servidores correctos verificam correctamente essa pol´ıtica, ao contr´ario dos servidores faltosos. A verificac¸˜ao ´e feita sobre uma condic¸˜ao l´ogica criada na regra da operac¸˜ao invocada.

Object State T S

Rrd: execute(read(hPERSON, id, name, agei)) : −

invoke(p, rd(hPERSON, id, name, agei)) ∧ p = id Rout : execute(p, out(hPERSON, id, name, agei) : −

invoke(p, write(out(hPERSON, id, name, agei))) ∧ p = id ∧ @id : hPERSON, id, ∗, ∗i

Figura 2.5: Exemplo de uma pol´ıtica de controlo acesso definida no espac¸o de tuplos A pol´ıtica de controlo de acesso ´e representada usando a sintaxe da linguagem de programac¸˜ao PROLOG, ou seja, o lado esquerdo da func¸˜ao (antes do s´ımbolo “:-”) ´e verdadeiro se e s´o se a condic¸˜ao do lado direito ´e verdadeira. A Figura 2.5 descreve uma

Cap´ıtulo 2. Conceitos Fundamentais 14

Operac¸˜ao Descric¸˜ao

out(t) insere o tuplo t no espac¸o

rdp(t) lˆe um tuplo que combina com t do espac¸o (retornando true); retorna false se n˜ao encontrar nenhum tuplo

inp(t) lˆe e elimina o tuplo que combina com t do espac¸o (retor- nando true); retorna f alse se n˜ao encontrar nenhum tuplo rd(t) lˆe um tuplo que combina com t do espac¸o; fica bloqueado

at´e que algum tuplo que combine com t seja encontrado in(t) lˆe e elimina o tuplo que combina com t do espac¸o; fica blo-

queado at´e que algum tuplo combine com t seja encontrado cas(t, t)

Se n˜ao existir um tuplo que combine com t no espac¸o, t ´e inserido e a operac¸˜ao retorna true; caso contr´ario retorna f alse

Tabela 2.1: Operac¸˜oes suportadas pelo DEPSPACE

pol´ıtica de controlo de acesso que restringe o acesso ao espac¸o de tuplos. A primeira regra permite a qualquer processo ler os seus pr´oprios dados (atrav´es da condic¸˜ao “p = id”). A segunda e ´ultima regra Rwrite permite a um processo com um determinado id, inserir

um tuplo PERSON se e s´o se esse mesmo tuplo n˜ao existir no espac¸o de tuplos (i.e., se n˜ao tiver o mesmo id). Uma descric¸˜ao mais pormenorizada sobre o funcionamento das pol´ıticas de controlo de acesso usadas no DEPSPACE, pode ser encontrada em [4].

Documentos relacionados