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

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 baseado em dados.

Métodos de Ensino

As aulas estão divididas em teóricas e práticas. Nas primeiras, é proporcionada a exposição dos conceitos, que incluí também a demonstração de programas, e, nas segundas, é proporcionada a resolução de fichas laboratoriais, para exercitar e complementar os conceitos, e a programação de aplicações de pequena escala para sistemas distribuídos.

Bibliografia

Referências principais
  • Maarten Steen e Andrew Tanenbaum. Distributed Systems: Principles and Paradigms. 3ª edição. Published by Maarten Steen. 2017. ISBN-13: 978-15-430573-8-6 (versão impressa); ISBN-13: 978-90-815406-2-9 (versão digital).
Outras referências
  • 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