Mestrado | Informática

Computação Distribuída

Área Científica

Ciências Informáticas

Duração

Semestral

ECTS

5

Horas de Contacto Teórico Práticas

35h

OBJETIVOS DA APRENDIZAGEM

Esta unidade curricular (UC) visa o desenvolvimento de competências relacionadas com a compreensão dos principais modelos de computação distribuída, começando pelas arquiteturas fundamentais, apresentando de seguida as tecnologias associadas à invocação remota de objetos e arquiteturas orientadas aos serviços e terminando com os fundamentos de sincronização de transações distribuídas. Assim, pretende-se que os mestrandos no final da unidade sejam capazes de:

O1 – Aprender o que é um sistema distribuído e as suas características, bem como descrever as vantagens os problemas e desafios que se colocam no seu desenvolvimento.
O2 – Conhecer os diferentes modelos de implementação de um sistema distribuído, começando pelas técnicas fundamentais, apresentando de seguida as tecnologias associadas à invocação remota de objetos e arquiteturas orientadas aos serviços.
O3 – Saber implementar sistemas que comuniquem através de sockets, sistemas de objetos distribuídos e sistemas distribuídos para a web.
O4 – Conhecer os principais algoritmos de sincronização temporal e organização de eventos na computação distribuída, bem como analisar novos paradigmas emergentes na área da computação distribuída.

PROGRAMA

1 – Introdução à Computação Distribuída

1.1 – Características de um sistema distribuído
1.2 – Exemplos de SD
1.3 – Desafios na implementação de SD.

2 – Modelos de Programação distribuída

2.1 – Sistemas de memória partilhada versus sistemas de memória distribuída
2.2 – Modelos de comunicação por mensagens

2.2.1 – Comunicação síncrona
2.2.2 – Comunicação assíncrona
2.2.3 – Chamada de procedimento remoto
2.2.4 – Formas de criação e identificação de processos

2.3 – Modelos arquiteturais

2.3.1 – Modelo Cliente/servidor
2.3.2 – Múltiplos servidores
2.3.3 – Proxies
2.3.4 – Processos pares

2.4 – Modelos fundamentais

2.4.1 – Modelo de interação /sincronismo
2.4.2 – Modelo de falhas
2.4.3 – Segurança

3 – Comunicação entre processos

3.1 – Sockets TCP e UDP
3.2 – Serialização de estruturas de dados
3.3 – Comunicação cliente/servidor

3.3.1 – O protocolo pedido resposta
3.3.2 – Semântica perante falhas

4 – Sistema de objetos distribuídos

4.1 – O modelo de objetos
4.2 – Invocação remota de objetos (Remote method invocation)
4.3 – Caso de estudo – Java RMI
4.4 – Caso de estudo – CORBA

5 – Web Services

5.1 – Protocolo SOAP
5.2 – protocolo REST

6 – Tempo e Relógios

6.2 – Sincronização de relógios
6.3 – Ordenação e relógios lógicos

DEMONSTRAÇÃO DE COERÊNCIA ENTRE CONTEÚDOS PROGRAMÁTICOS E RESULTADOS DA APRENDIZAGEM

Esta unidade curricular é constituída por aula teóricas onde os principais conceitos são apresentados, seguindo-se aulas práticas onde são utilizadas ferramentas e desenvolvidas aplicações de forma a demonstrar com exemplos concretos as tecnologias e conceitos subjacentes à computação distribuída. Assim, com os conteúdos programáticos presentes no ponto 1, o que são, características e desafios na implementação de um sistema distribuído, pretende-se que os estudantes atinjam o objetivo O1. Os conteúdos programáticos presentes no ponto 2, modelos de programação distribuída, modelos de comunicação por mensagens, modelos arquiteturais, modelos fundamentais de sincronismo, falhas e segurança, visão dar resposta ao objetivo de aprendizagem O2. Os diferentes tipos de comunicação entre processos, os diferentes sistemas de objetos distribuídos e sua invocação, terminando com web services, presentes nos pontos 3, 4 e 5 dos conteúdos programáticos, permitem que o estudante adquire competências que lhe permitem desenvolver soluções concretas avaliadas através da realização de trabalhos práticos, atingindo assim o O3. Finalmente abordar-se-ão diferentes algoritmos de sincronização de relógios, físicos e lógicos, bem como a ordenação de eventos, terminando com o desafio a analisar e discutir tecnologias e soluções emergentes, contribuindo para atingir o objetivo O4.

METODOLOGIA DE ENSINO E AVALIAÇÃO

A metodologia consiste na apresentação, exemplificação e discussão dos conceitos abordados sempre procurando que o estudante tenha um papel ativo e central na aprendizagem. A aprendizagem tem uma forte componente de trabalho de pesquisa realizado individualmente pelos alunos, complementada pela apresentação e análise de exemplos extraídos de aplicações reais. A componente teórica visa fornecer aos estudantes de uma forma gradual todos os conhecimentos necessários ao pleno entendimento das temáticas abordadas. Por outro lado, a componente prática fornece aos estudantes a consolidação dos conhecimentos adquiridos, através do uso de ferramentas e desenvolvimento de projetos de computação distribuída. Pretende‐se, ainda, desenvolver uma perspetiva de construção gradual de conhecimentos relacionando esta Unidade com as restantes do curso, quer as que ocorrem em simultâneo, quer desenvolvendo conhecimentos que venham a ser utilizados posteriormente noutras UC.
Avaliação:
A avaliação será efetuada através de um exame escrito individual ou trabalho de investigação. Adicionalmente poderão ser utilizados outros elementos como a participação desenvolvida por cada mestrando e a aplicação de conhecimentos em trabalhos práticos individuais e/ou grupais.

DEMONSTRAÇÃO DE COERÊNCIA ENTRE METODOLOGIAS DE ENSINO E RESULTADOS DE APRENDIZAGEM

A metodologia centrar-se-á na interatividade entre os vários agentes educativos, começando pelo docente e estendendo-se a todos os estudantes, envolvendo os mestrandos no processo de ensino aprendizagem de forma crítica e ativa, nomeadamente nas componentes mais teóricas, como sendo o objetivo 1. Com uma abordagem prática e utilizando sempre ferramentas tecnológicas inerentes às temáticas abordadas, espera-se que exista uma forte motivação e participação por parte dos estudantes nas atividades a desenvolver, atingindo os objetivos 2 e 3. Assim, utilizando metodologias ativas em que o estudante controla a sua aprendizagem e participa diretamente nela, estamos em crer que poderemos atingir os objetivos propostos de uma forma mais eficiente e aprofundada.
A metodologia de sistematicamente indicar fontes de informação e o desafio de os alunos realizarem um pequeno trabalho de pesquisa e síntese sobre tópicos emergentes na área da computação distribuída conduz coerentemente ao objetivo 4.
Com estas metodologias crê-se uma boa execução dos conteúdos programáticos e como consequência a consecução com sucesso dos objetivos da unidade curricular.

BIBLIOGRAFIA

Principal:
“Distributed Systems: Concepts and Design”, 5th edition, George Coulouris, Jean Dollimore and Tim Kindgerg, Addison-Wesley, 2011.
“Distributed Systems Principles and Paradigms”, 3rd Edition, Andrew S. Tanenbaum, Maarten Van Steen, Pearson International Edition, 2007.
“Programação de Sistemas Distribuídos em Java”, Jorge Cardoso, FCA, 2008.

Complementar:
“Distributed Programming with Java”, Qusay H. Mahmoud, Manning Publications, 1999.
“Java in Distributed Systems: Concurrency, Distribution and Persistence” by Marko Boger, Publisher: Wiley & Sons; ISBN: 0471498386; 1st edition (May 2001)
“Concurrency – State Models and Java Programs”, Jeff Magee, Jeff Kramer, John Wiley 1999.
Java RMI: The Remote Method Invocation Guide, Esmond Pitt, Kathleen McNiff, Addison-Wesley, 2001.
Engineering Distributed Objects, Wolfgang Emmerich , John Willey, 2000.