Sistemas Distribuídos

Código

0106026

Créditos ECTS

6

Objetivos

Pretende-se que os formandos adquiram conhecimento sobre o que é um sistema distribuído e quais as principais questões que resultam da sua utilização.  Pretende-se proporcionar os conhecimentos básicos e intermédios para a programação de aplicações distribuídas, nomeadamente as arquiteturas e as tecnologias de comunicação em sistemas distribuídos, usando as competências adquiridas para a programação em Python.

Programa

O programa obedece aos seguintes pontos:

1. Arquiteturas de sistemas distribuídos: monolíticas, N camadas; Peer-to-Peer; publicador-subscritor; objetos distribuídos; Web Services.
2. Processos: programação com processos e threads de sistemas distribuídos; cloud.
3. Comunicações: fundamentos; RPC; orientada a mensagens; multicast.
4. Sistema de nomes: nomes sem estrutura e estruturados; nomes baseados em atributos; arquiteturas e algoritmos de pesquisa.
5. Coordenação: relógios físicos; relógios lógicos; exclusão mútua; algoritmos de eleição; sistemas de localização.
6. Consistência e Replicação: modelos de consistência baseados em dados.

Métodos de Ensino

As sessões teóricas têm uma componente expositiva de de participação ativa dos formandos. Em cada sessão os formandos são inscrevem-se para responder a questões relacionadas com o tema abordado com trabalho para casa (TPC). Na sessão seguinte, a resposta a essas questões é discutida em grupo, ficando registadas as respostas no repositório da UC no Moodle. Os formandos também participam na elaboração de documento escrito sobre temas da UC que exploram e investigam individualmente.

Nas sessões de laboratório é explorada a construção de um projeto centrado na utilização de sistemas distribuídos. Este projeto serve de esqueleto que apoia os formandos na concretização de um trabalho de projeto em grupo.

Bibliografia

Essencial

Complementar

  • George Coulouris, Jean Dollimore e Tim Kindberg. Distributed Systems: Concepts and Design. 5ª edição. Addison-Wesley. 2012. ISBN-13: 978-0-273-76059-7.
  • Documentação de Python.
  • Documentação de Python específica sobre programação de socket.

Método de Avaliação