ISCTEM 2017

Sistemas Distribuídos

Prof. Sérgio Duarte
smd@fct.unl.pt
Faculdade de Ciências e Tecnologia
Universidade Nova de Lisboa

Práticas

Software

Exercícios

p1 - Descoberta de serviços via comunicação multiponto (IP Multicast)

Exercícios - FASE 2 (Serviços externos)

É normal uma aplicação distribuída recorrer a serviços externos já existentes, tal como uma base de dados, um serviço de disseminação de eventos ou um directório de nomes.

O Mongo é uma base de dados NoSQL que pode ser usada como repositório (storage) de uma aplicação distribuída. Nesse caso, poderá funcionar como a camada de armazenamento numa arquitecura de 3-camadas (3-tier). Esta base de dados permite oferecer persistência (durabilidade) aos dados, bem como tolerância a falhas, por via de replicação.

O Kafka é um sistema de disseminação de eventos baseado em tópicos que implementa o modelo editor/assinante (publish/subscribe). Suporta eventos persistentes e
pode ser configurado para ser replicado (além de particionado). Para um dado tópico, ordena totalmente os eventos publicados dentro de cada partição. Havendo uma
só partição por evento, então todos os assinantes recebem os eventos pela mesma ordem. Nesse sentido, pode ser visto como um substrato de comunicação em grupo, com garantias
de fiabilidade e ordem total.


O Zookeeper é um sistema desenhado para a coordenação de sistemas distribuídos complexos. Funciona como um directorio de nomes (organizados numa estrutura em árvore)
que pode ser tolerante a falhas e fortemente consistente. Não sendo uma base de dados genérica, pode ser usado para guardar metadados de configuração de um sistema distribuído.


O projecto Eclipse seguinte apresenta exemplos simples de utilização dos serviços externos zookeeper, kafka e mongo.


Objectivo: Estudar e testar o código dado:

  1. Construir a imagem,  fazendo "maven install" na pasta do projecto eclipse;
  2. Lançar os serviços externos, usando um dos seguintes scripts [versão toolbox , versão nativa] fazendo, por exemplo: sh sd17-run-services-toolbox.sh
  3. Executar cada um dos exemplos, usando o comando docker indicado no final do código de cada exemplo (em comentário)

Projecto