Sistemas Distribuídos
Código
0106026Créditos ECTS
6Objetivos
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 sessões teóricas têm um carater expositivo. Em cada sessão os formandos são inscrevem-se para responder a questões relacionadas com o tema abordado com trabalho para cada (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.
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
- 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).
- Mark Summerfield. Programming in Python 3: A Complete Introduction to the Python Language. 2ª edição. Addison-Wesley. 2010. ISBN-13: 978-0-321-68056-1.
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
- Componente individual da avaliação com dois testes - 40 %
- Trabalho Individual e/ou de Grupo - 40 %
- Trabalhos para casa - 20 %