Programação Distribuída (28h)
Professor Allan Edgard Silva Freitas
Ementa
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.
Objetivos Gerais
Apresentar aspectos práticos de implementação de Sistemas Distribuídos, viabilizando o entendimento de alguns dos principais componentes.
Objetivos Específicos
Habilitar o aluno a desenvolver aplicações distribuídas utilizando diferentes arquiteturas e frameworks.
Cronograma Previsto*:
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.
Entregáveis:
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.
Passos:
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).
Entregáveis:
- 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).
Referência:
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
Método:
Curso prático. Uso de exemplos motivadores e um "toy-problem" associado a cada. Uso de slides (esporádico).