
Algoritmos e Sistemas Distribuídos
Código
10644
Unidade Orgânica
Faculdade de Ciências e Tecnologia
Departamento
Departamento de Informática
Créditos
6.0
Professor responsável
Rodrigo Seromenho Miragaia Rodrigues
Horas semanais
4
Total de horas
56
Língua de ensino
Português
Objectivos
O objectivo principal da cadeira é consolidar os conhecimentos na área dos sistemas distribuídos, ganhando uma melhor compreensão sobre os algoritmos que são utilizados nos sistemas utilizados actualmente, e aprendendo as ideias fundamentais que foram úteis na concepção dos sistemas actuais, e que serão potencialmente úteis na concepção dos sistemas distribuídos que serão desenvolvidos no futuro. A cadeira tem uma forte componente algorítmica, mas é também acompanhada de projectos de programação que põem em prática os conceitos fundamentais que são nela ensinados.
Saber:
- Conceitos de base para a análise e síntese de algoritmos distribuídos.
- Abstracções fundamentais para a construção de sistemas distribuídos e a sua realização algorítmica.
- Técnicas para melhorar a fiabilidade e a escalabilidade dos sistemas distribuídos.
Saber fazer:
- Concepção de algoritmos distribuídos e a sua aplicação no desenvolvimento de sistemas distribuídos.
- Análise de algoritmos distribuídos.
- Programação de sistemas distribuídos.
Pré-requisitos
É recomendado que os alunos tenham obtido aprovação à cadeira de licenciatura de Sistemas Distribuídos.
Conteúdo
1. Modelos de computação distribuída
1.1. Modelos de processos, falhas, primitivas criptográficas e comunicação.
1.2. Modelo síncrono, assíncrono, e parcialmente síncrono.
2. Replicação e tolerância a faltas, e respectivas abstracções fundamentais
2.1. Comunicação em difusão (broadcast)
2.2. Estudo das abstracções de suporte à replicação: consenso e variantes
2.3. Protocolos de replicação com quóruns. Replicação Bizantina.
2.4. Especificação dos sistemas de replicação: diferentes modelos de consistência
3. Escalabilidade
3.1. Sistemas peer-to-peer
3.2. Outras técnicas para a construção de sistemas escaláveis. Caso de estudo do HDFS.
4. Transacções distribuídas
4.1. Two-phase commit
4.2. Three-phase commit
4.3. Técnicas de logging para tolerância a faltas
Bibliografia
C. Cachin, R. Guerraoui, L. Rodrigues "Introduction to Reliable and Secure Distributed Programming", 2a edição, Springer, 2011.
Método de ensino
Aulas teóricas com exposição da matéria e perguntas práticas a resolver em grupos de 3 a 4 alunos.
Aulas laboratoriais com introdução ao projecto e exercícios de programação.
Método de avaliação
Método de avaliação dos alunos
Componentes da avaliação
- Avaliação da frequência cujo peso na nota final é de 50%.
- Dois testes ou um exame final cujo peso na nota final é de 50%. Os testes têm ambos igual peso.
- A nota final é aproximada ao valor, as notas intermédias à décima de valor.
Avaliação da frequência
A avaliação de frequência tem duas componentes obrigatórias:
- Realização de um trabalho prático por fases em grupos de três pessoas.
- Realização de um teste prático individual, também faseado, focado no trabalho prático, a realizar ao longo de um sub-conjunto das aulas práticas, com nota de zero a um.
A nota de frequência é obtida da seguinte forma:
- Nota de frequência = Nota trabalho * nota teste
No enunciado do trabalho prático será descrita a forma como este está dividido em fases e o peso de cada fase.
Condições de aprovação na cadeira
1. Avaliação de frequência superior ou igual a 8,5 valores;
2. Avaliação da média dos testes ou do exame final superior ou igual a 8,5 valores, e
3. Nota final superior ou igual a 9,5 valores.
Melhoria de nota
Através de um exame para melhoria de nota, os alunos poderão fazer uma melhoria da componente de dois testes/exame com o peso de 50% da nota final. A nota da frequência mantem-se inalterada após o exame de melhoria.