A computação distribuída está relacionada com o projeto, implementação e avaliação de algoritmos que executam em processadores distintos, interconectados por meio de canais de comunicação. Sistemas distribuídos aparecem em vários cenários, incluindo telecomunicações, computação móvel e ubíqua, serviços Web, computação científica e controle de processos de tempo real. Os sistemas distribuídos devem funcionar de forma correta, mesmo com processadores individuais e canais de comunicação operando em diferentes velocidades, e mesmo na ocorrência de falhas em parte dos componentes do sistema. O objetivo desta disciplina é apresentar as principais motivações e desafios da área de computação distribuída, e os algoritmos e modelos arquiteturais fundamentais para o desenvolvimento de sistemas distribuídos. Os tópicos de estudo deverão dar ao aluno a fundamentação teórica e prática necessária para: definir e projetar especificações precisas sobre o comportamento desejado de um sistema distribuído, selecionar modelos e ferramentas adequados para a sua implementação, identificar medidas de complexidade e de desempenho e avaliar o sistema de acordo com essas medidas, propor e desenvolver novas soluções para a área de computação distribuída.
Ementa:
- Introdução à computação distribuída.
- Conceitos fundamentais de sistemas distribuídos (processos e threads, programação concorrente, comunicação via troca de mensagens, interação síncrona e assíncrona).
- Arquiteturas de sistemas distribuídos (cliente/servidor, peer-to-peer, principais variações).
- Comunicação em sistemas distribuídos (interação com o sistema operacional e a rede, programação com sockets, comunicação em grupo, chamada remota de procedimento, eventos, publish/subscribe).
- Gerência de processos distribuídos (migração de processos, controle de concorrência, exclusão mútua distribuída, deadlock distribuído).
- Sincronização e coordenação em sistemas distribuídos (relógios lógicos e estados globais, eleição de líder, acordo distribuído, transações atômicas e distribuídas).
- Tolerância a falhas (motivação, serviços de tolerância a falhas, replicação).
- Conceito de middleware (funcionalidades, suporte do sistema operacional, interface com as aplicações e serviços, modelo de referência).
- Tecnologias de middleware tradicionais (CORBA, COM+, .NET, J2EE, EJB).
- Middlewares de nova geração (middleware reflexivo, middleware adaptativo, middleware de provisão de contexto, middleware orientado a apectos, middleware dirigido a modelos) e suas implementações.
- Tecnologias de serviços Web (visão geral, serviços Web orientados a documento e orientados a RPC, linguagens e protocolos: XML, SOAP, UDDI, WSDL).
- Segurança em sistemas distribuídos.
- Opcional: sistemas P2P (conceitos básicos, arquiteturas, aplicações).
- Opcional: introdução a grades computacionais.
Bibliografia:
- G. Coulouris, J. Dollimore and T. Kindberg, Distributed Systems: Concepts and Design, Addison Wesley, 4th ed., 2005.
- A. Tanenbaum e M. van Steen, Distributed Systems: Principles and Paradigms. Prentice-Hall, 2nd ed., 2007.
- G. Andrews, Foundations of Multithreaded, Parallel, and Distributed Programming. Addison-Wesley, 2000.
- D. Comer and D. Stevens, Internetworking with TCP/IP – Client-server Programming and Applications, vol. III, 2nd ed., 1996.
- K. P. Birman, Reliable Distributed Systems: Technologies, Web Services, and Applications, Springer, 2005.
- A. Puder, K. Römer and F. Pilhofer, Distributed System Architecture: A Middleware Approach, Elsevier, 2006.
- W. Stallings, Operating Systems – Internals and Design Principles, Prentice Hall, 6th ed., 2009.
- J. Kurose and K. Ross, Computer Networking: A Top-Down Approach, Addison-Wesley, 2001
- Artigos selecionados das principais revistas e conferências da área de computação distribuída.