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.
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.
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.
0106026
6