Grupo de Pesquisa em Sistemas Distribuídos, Otimização, Redes e Tempo-Real | INF623
Programação Distribuí­da (28h)
Professor Allan Edgard Silva Freitas
Middlewares para Objetos Distribuí­dos. Comunicação baseada em eventos. Web Services. Serviço de Nomes. Espaço de Tuplas. Frameworks de Comunicação em Grupo.
Apresentar aspectos práticos de implementação de Sistemas Distribuí­dos, viabilizando o entendimento de alguns dos principais componentes.
Habilitar o aluno a desenvolver aplicações distribuí­das utilizando diferentes arquiteturas e frameworks.
Aula 1: Threads.
Aula 2: Explicação do Paradigma IPC por troca de mensagens. Prática com Sockets e RMI.
Aula 3: Explicação de comunicação baseada em eventos. Prática com JMS.
Aula 4: Explicação de comunicação baseada em eventos. Prática com JMS.
Aula 5: Replicação Ativa. Uso de Comunicação em Grupo.
Aula 6: Replicação Ativa. Uso de Comunicação em Grupo.
Aula 7: Reservado para desenvolvimento de entregáveis
Aula 8: Avaliação do Entregável (1) e dos demais entregáveis (2).
* Tanto o conteúdo quanto as datas podem ser alterados.
As implementações serão em duplas e no dia da entrega a avaliação será com apresentação e entrevista.
(1) Construção de um Serviço Replicado de Banco de Dados, o serviço deve funcionar sob uma plataforma de comunicação em grupo. Deve ser instanciado em duas e três máquinas e deve operar sob falhas, com ao menos uma máquina ativa. Ao se submeter um comando ao serviço, o mesmo deve ser executado em todas as réplicas ou em nenhuma. Seu serviço deve usar o middleware de comunicação em grupo para concordar na ordem e entrega do comando a uma aplicação que o executa. Uma máquina ao se recuperar da falha deve requerer a entrada novamente no grupo e realizar a atualização do seu estado para o estado atual do serviço replicado.
Middleware de comunicação em grupo: JGroups
Replicação em Banco de Dados: Um conjunto de servidores de BD deve ser replicado de forma ativa por meio de comunicação em grupo.
Cada servidor é composto por:
- MySQL Server ou postgres.
- uma interface de acesso formada por um web service que recebe o comando SQL e retorna o dataset de resultados
A interface de acesso deve ao receber a requisição, submeter ao grupo.
Somente quando a requisição é entregue pelo grupo, a mesma é processada.
Após o processamento, o web service deve retornar a resposta com o total de linhas afetadas e em caso de SELECT o dataset.
1 - cliente requisita a um dos Web Services com USER, PASS e REQ SQL;
2 - REQ SQL é enviada ao JGroups;
3 - REQ SQL é entregue do JGroups a cada réplica;
4 - REQ SQL é enviada pela camada de DAO para o mySQL;
5 - após processar, mySQL responde ao DAO;
6 - a resposta é enviada por XML ao cliente.
O cliente deve ser instanciado em várias vezes, um cenário de testes a ser exercitado é gerar INSERTs com dados aleatórios em uma mesma tabela que tenha a chave primária auto-incrementável. Em todas as réplicas deve-se verificar a mesma ordem de inserção.
(2) Pequenas implementações baseadas em Roteiros de RMI, JMS, Web Service, JNDI e DSM. (Exemplo: Toy-Problem usando JMS: Os Subscribers devem utilizar JMS ser notificados de conteúdo novo de uma dada "tag" do IDTVS Provider que assinou, utilizando publish-subscribe).
- threads: Produtor-consumidor;
- dll: Comunicação IPC;
- Sockets: implementação de Publish-Subscribe;
- RMI: implementação de Publish-Subscribe;
- Java Message Service: Notificação de informações relacionadas a ações de empresas (stocks);
- Web Services: Controle de Agência Bancária (Criação de conta, depósito, saque e saldo);
Todas as aplicações serão testadas em máquinas com IP distinto para o cliente e o server;
Todas as aplicações devem ser testadas com mais de um cliente simultaneamente, no caso do JMS, deve ser possí­vel ter mais de um Publisher e mais de um Subscriber simultí¢neos.
Nota computada a partir da apuração dos trabalhos (1) e (2).
FARLEY, J. . JAVA Distributed Computing. ISBN 1-56592-206-9E, ed. 1, Editora O'Relly, Janeiro 1998. Disponí­vel on-line em http://docstore.mik.ua/orelly/java-ent/dist/index.htm
ORACLE. Java Message Service Tutorial. Disponí­vel on-line em http://docs.oracle.com/javaee/1.3/jms/tutorial/
(ver também o tutorial especí­fico para o J2EE 6 em http://docs.oracle.com/javaee/6/tutorial/doc/bncfa.html )
MAMOUD, Q. H. . Getting started with JavaSpaces Technology: Beyond Conventional Distributed Programming Paradigms. Disponí­vel on-line em http://www.oracle.com/technetwork/articles/javase/javaspaces-140665.html
PAMPLONA, V. F. . Web Services: Construindo, disponibilizando e acessando Web Services via J2SE e J2ME. Disponí­vel on-line em http://vitorpamplona.com/deps/papers/2004_WebServices2.pdf
BAN, B. et al. . JGroups - A Toolkit for Reliable Multicast Communication. Disponí­vel on-line em http://www.jgroups.org
Curso prático. Uso de exemplos motivadores e um "toy-problem" associado a cada. Uso de slides (esporádico).