|
| 1 | + |
| 2 | +# Projeto de Sistemas Distribuídos 2020/2021 |
| 3 | + |
| 4 | +Concretização de um serviço de armazenação de pares chave-valor. Iremos utilizar uma árvore binária de pesquisa para armazenar informação, dada a sua elevada eficiência ao nível da pesquisa. Sendo este tipo de serviço utilizado em sistemas distribuídos torna-se imperativa a troca de informação via rede. Neste sentido foram desenvolvidos mecanismos de serialização/deserialização a utilizar no envio/receção de informação, utilizando o **protocol buffer**. Desta forma, pretende-se a concretização da árvore binária de pesquisa num servidor, e à implementação de um cliente com uma interface de gestão do conteúdo da árvore binária. Isto implica que: |
| 5 | + |
| 6 | +1. Através do cliente, o utilizador irá invocar operações, que serão transformadas em mensagens e enviadas pela rede até ao servidor. |
| 7 | + |
| 8 | +2. Este, por sua vez interpretará essas mensagens, e: |
| 9 | +a. Realizará as operações correspondentes na árvore local concretizada por ele. |
| 10 | +b. Enviará posteriormente a resposta transformada em mensagem, ao cliente |
| 11 | + |
| 12 | +3. Por sua vez, o cliente interpretará a mensagem de resposta |
| 13 | +4. O Cliente procederá de acordo com o resultado, ficando de seguida pronto para a próxima operação. |
| 14 | + |
| 15 | +O objetivo será fornecer às aplicações que usariam esta árvore um modelo de comunicação tipo **RPC**, onde vários clientes acedem a uma mesma árvore binária de pesquisa partilhada. Para tal, criámos um sistema concorrente que aceita pedidos de múltiplos clientes em simultâneo através do uso de multiplexagem de I/O e que separa o tratamento de I/O do processamento de dados através do uso de *Threads*. |
| 16 | + |
| 17 | +Mais concretamente temos, para além da multiplexagem de I/O, foram implementadas: |
| 18 | + |
| 19 | +- Respostas assíncronas aos pedidos de escrita dos clientes, ou seja, em vez de executar imediatamente pedidos de escrita, o servidor devolve aos clientes um identificador da operação e passa a guardar os pedidos numa fila temporária para serem executados por uma thread |
| 20 | +- Garantia de sincronização e threads no acesso à árvore e à Fila de Tarefas através do uso de Locks e Variáveis Condicionais. |
| 21 | + |
| 22 | +No âmbito de suporte a tolerância a falhas, desenvolvemos um sistema de replicação com base no modelo de replicação passiva com primário fixo, através do serviço de coordenação **ZooKeeper**. |
| 23 | + |
| 24 | +Uma descrição mais detalhada do projeto em conjunto com a sua especificação encontra-se dividida pelos quatro enunciados. |
| 25 | + |
| 26 | +--- |
| 27 | + |
| 28 | +## Estrutura |
| 29 | + |
| 30 | +`/include/`- contém os header *.h* requiridos pelo C |
| 31 | +`/source/` - contém o código fonte do projeto |
| 32 | +`/object/` - diretório que irá conter *object files* |
| 33 | +`/binary/` - executáveis resultantes do *linking* de *object files* |
| 34 | +`/lib/` - bibliotecas criadas na compilação |
| 35 | + |
| 36 | +Encontram-se também, na root do projeto: |
| 37 | + |
| 38 | +- README.md |
| 39 | +- makefile: define as regras de compilação e ligação |
| 40 | +- sdmessage.proto: esquema do *Protocol Buffer* |
| 41 | + |
| 42 | +--- |
| 43 | + |
| 44 | +## Compilação e Execução |
| 45 | + |
| 46 | +Em baixo encontram-se comandos principais e alguns exemplos de utilização |
| 47 | + |
| 48 | +- **Compilação e ligação:** `make` |
| 49 | + |
| 50 | +- **Execução de um servidor:** `./binary/tree-server <porto_servidor> <IP:Porto Zookeeper>` |
| 51 | +Exemplo de utilização: `./binary/tree-server 12345 127.0.0.1:2181` |
| 52 | + |
| 53 | +- **Execução de um cliente:** `./binary/tree-client <IP Zookeeper> <Porto Zookeeper>` |
| 54 | +Exemple de utilização: `./binary/tree-client 127.0.0.1 2181` |
| 55 | + |
| 56 | +- **Apagar ficheiros temporários:** `make clean` |
| 57 | + |
| 58 | +#### Importante |
| 59 | + |
| 60 | +Tanto o executável cliente como o executável servidor não devem ser chamados com o valor no campo IP de *"localhost"*, devendo em vez disso ser utilizado o endereço IP em notação XXX.XXX.XXX.XXX. |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +## Autores |
| 65 | + |
| 66 | +Projeto realizado por Grupo 59: |
| 67 | + |
| 68 | + - **João Cotralha** Nº51090 |
| 69 | + - **Cláudio Esteves** Nº51098 |
| 70 | + |
0 commit comments