O objetivo deste projeto lista é desenvolver um pequeno sistema

Transcrição

O objetivo deste projeto lista é desenvolver um pequeno sistema
Sistemas Distribuídos / Tópicos Especiais
Prof. Alexandre Sztajnberg
2011/2
Projeto – Programação usando sockets e middleware para objetos distribuídos (RMI,
CORBA, RPC, etc.)
O objetivo deste projeto lista é desenvolver um pequeno sistema distribuído de servidores
utilizando sockets e algum suporte de middleware (RPC, RMI ou CORBA).
O projeto será composto de algumas etapas, que serão avaliadas separadamente e também
em conjunto.
O sistema/programa a ser implementado pode ser desenvolvido em C, C++ ou Java e deve
executar no Linux, mais especificamente nos nossos servidores clone e snarf.
Os fontes, executáveis e o texto devem ser disponibilizados na conta da snarf através de
uma página Web simples, mas organizada, que você já criou (ou seja, a atividade de criar a
página já foi avaliada. Só verificaremos que o material solicitado foi colocado lá).
O sistema será composto de:





um servidor concorrente principal (front-end) que receberá requisições via socket e
encaminhará as mesmas, via RMI/RPC/CORBA para servidores escravos
servidores escravos que se registrarão no servidor principal e serão encarregados de
realizar as operações
servidores especializados que receberão requisições específicas, delegadas pelos
servidores escravos
clientes que farão requisições para o front-end
cliente para avaliação de desempenho
Cada um destes elementos deve ser desenvolvido, implementado e testado. Observe que os
módulos podem ser implantados em máquinas distribuídas. Portanto, NÃO deixe
referências hardcoded na versão final.
O sistema vai oferecer um serviço de calculadora, “concorrente”. Você vai ter que pensar
nas várias interfaces, formatos de mensagens, tratamento de erros e exceções.
Um arquivo de texto, tipo README deve descrever as decisões de projeto, entre ela as
relacionadas a endereçamento, registro, portas, obtenção destas informações, etc.
A Figura 1 ilustra o sistema geral.
rmiregistry / ns
portmap
Front-end
Tratador
Clientes
+, -, /, *
Principal
*
Tratador
Desempenho
Tratador
/
+, -, /, *
Especializado
Worker
Figura 1 – arquitetura do sistema
Características:
1. Servidor concorrente principal
O servidor principal (front-end) que receberá requisições via socket TCP e encaminhará as
mesmas, via RMI/RPC/CORBA para servidores escravos. O servidor deve ter arquitetura
concorrente.
Antes de delegar o tratamento para o tratador, a linha principal deve decidir qual worker
será utilizado pelo mesmo, num esquema round-robin (circular). Não limite o número de
tratadores, nem o número de workers que poderão ser usados.
O servidor deverá medir o tempo de realização de cada requisição. Para isso, deve manter o
rastro das requisições e monitorar o retorno dado pelo tratador. Isso pode trazer um pouco
de complexidade na implementação, se você não sabe usar variáveis globais, estáticas ou
memória compartilhada. Depende de você fazer esta medição na linha principal ou no
tratador. Mas, de alguma forma o servidor deve ter a informação de quanto tempo leva cada
requisição e fazer um média aritmética, jogando na tela o valor atual do tempo de resposta
médio (o tempo de tratamento de requisição médio).
Observe que os tratadores são clientes dos servidores RMI. De alguma forma, o rodízio tem
que estar associado à um forma de referenciar à réplica de servidor RMI que vai ser usada
(veja a Figura 1).
2. servidores escravos e especializados
Nesteservidor vamos desenvolver um pequeno serviço de operações aritméticas utilizando
um middleware de objetos distribuídos. Pode usar RMI, RPC ou CORBA. O servidor
oferece 4 operações. Só que duas delas (* e /) são “delegadas” a servidores especializados
2
Desenvolva os servidores. Obviamente você deve começar pela interface. Observe também
o tratamento de exceções no caso de falhas e no caso de operações cujos parâmetros estão
errados (divisão por zero, por exemplo). A geração das exceções deve estar no servidor que
faz as operações e não no que pede!
3. Clientes
O cliente deve se conectar ao front-end e fazer umas das operações oferecidas.
4. Cliente para avaliação de desempenho
Este é mais complicadinho.
Queremos avaliar a escalabilidade do sistema. Para isso, vamos desenvolver um cliente
especializado, que vai fazer apenas uma operação, de forma automática. Este cliente vai
disparar uma série de requisições para o servidor, estabelecendo a conexão, fazendo a
requisição e desfazendo a conexão (como faria um servidor Web).
A taxa de requisições deve ser controlada, de forma que X requisições sejam feitas durante
um intervalo de tempo, depois 2 * X requisições, durante o mesmo intervalo, e assim por
diante, até um limite “teórico do servidor”. Enquanto isso, o servidor estará exibindo a
média aritmética do tempo de resposta.
Taxa (requisições/minuto)
A idéia é fazer uma rampa de requisições, como a da Figura 2, porém limitando o teste a 5
minutos. Voce vai ter que pensar como controlar a taxa de requisições, cadenciando as
mesmas durante um intervalo de 10 segundos, aumentando a taxa nos próximos 10, etc.
Sugerimos o uso de temporizadores.
120
110
100
90
80
70
60
50
40
30
20
10
5
10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115
Tempo (minutos)
E o tempo para fazer isso tudo?
Você tem um mês para fazer esse trabalho. Basicamente é um trabalho de integração, já
que você tem os exemplos.
Numa próxima versão do enunciado podemos destacar os itens a serem avaliados.
Obviamente, o funcionamento correto e o atendimento aos requisitos é fundamental.
3

Documentos relacionados

O objetivo deste projeto lista é desenvolver um pequeno sistema

O objetivo deste projeto lista é desenvolver um pequeno sistema módulos podem ser implantados em máquinas distribuídas. Portanto, NÃO deixe referências hardcoded na versão final. Use arquivos de configuração. Faça scripts de inicialização para colocar o sistema...

Leia mais