SISTEMAS TOLERANTES A FALTAS e TEMPO-REAL

Licenciatura em Informática
2000/2001 - 2 Semestre


Trabalho prático (V1.1)

Esqueleto do código para o trabalho já disponível ( stf.zip ). Vejam também as notas sobre o trabalho que o Pedro Vicente redigiu.

Nota prévia: Este enunciado pode ser refinado, com vista a esclarecer enventuais dúvidas que apareçam durante a sua concretização.

O trabalho consiste em desenvolver um sistema de chamadas a procedimentos remotos e replicados para o sistema Appia. Mais concretamente, este sistema terá dois componentes, a saber:

Aplicação cliente

A aplicação cliente irá executar-se como uma camada do sistema Appia. Esta camada irá interagir com um conjunto de servidores replicados através de uma camada de chamada a procedimentos remotos que é descrita de seguida.

A camada de chamada a procedimentos remotos (RRPC) esconde da camada aplicação o facto do servidor se encontrar replicado. Cada servidor é identificado pelo grupo de comunicação que gere a replicação desse servidor.

Cada sessão da camada RRPC interage com um único servidor de cada vez. A aplicação interage com a camada RRPC através da troca de eventos. Existe um evento para pedir a execução de um serviço e um evento para indicar a recepção da resposta (o corpo do pedido e da resposta são encapsulados numa mensagem do Appia).

O camada de RRPC deve concretizar as seguintes funcionalidades:

Servidor replicado

O servidor replicado executa-se também como uma camada da sistema Appia em um ou mais processos remotos que interagem com a aplicação cliente.

Para suportar a gestão da replicação, a do servidor executa-se sobre um protocolo de coordenação que será também concretizado como uma camada do Appia.

Esta camada executa-se por baixo da aplicação e é responsável por filtrar e ordenar os diversos pedidos e retransmissões recebidos de um ou mais clientes. Esta camada interage com duas pilhas Appia: um canal ponto-a-ponto UDP para interagir com os clientes e um canal de comunicação em grupo para interagir com as restantes réplicas (este canal é também fornecido). A interacção entre a camada de coordenação e as restantes camadas deve ser feita por troca de eventos Appia. Nota importante: o canal de comunicação em grupo fornecido já oferece as camadas de sincronia virtual e ordenação total de mensagens.

A interacção entre o cliente e os servidores é ilustrada pela seguinte figura.

Quer a camada servidor quer a camada de coordenação podem funcionar em dois modos distintos (na prática, pode ser preferível criar versões distintas para cada modo): modo replicação activa e modo replicação passiva.

Modo de replicação activo

Neste modo o servidor deve receber os pedidos do cliente de modo totalmente ordenado, gerando um objecto do tipo resposta que deve ser devolvido ao cliente respectivo. A camada de coordenação deve assegurar a ordenação dos pedidos e garantir que o mesmo pedido não é submetido duas vezes à aplicação.

Modo de replicação passivo

Neste modo, o servidor comuta entre dois modos de funcionamento, nomeadamenete entre modo primário e o modo secundário, por indicação da camada de coordenação. Em modo primário, o servidor recebe o pedido, executa-o e gera não só uma resposta para o cliente mas também um objecto actualização para as restantes réplicas. A camada de coordenação deve propagar o objecto de actualização para garantir a coerência das réplicas. Em modo secundário o servidor só recebe actualizações, vindas da réplica primária.

A camada de coordenação deve assegurar que cada pedido só é executado apenas uma vez no primário e que a actualização respectiva é aplicada na ordem certa nas restantes réplicas.

Aplicação (cliente e servidor)

O código do sistema de RPC deve ser genérico e independente da aplicação. Para demonstração, os alunos podem usar uma aplicação muito simples, por exemplo, um inteiro que exporta operações de soma e multiplicação.

Luís Rodrigues