18
Linguagens de Programação
UERJ
7
Linguagens de Programação
UERJ
2
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
7
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
7
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
12
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
Texto de pré-visualização
Trabalho Prático de Sistemas Distribuídos Tema Implementação de uma Biblioteca RPC Remote Procedure Call em Python 1 Descrição Geral O objetivo deste trabalho é implementar uma biblioteca de RPC Remote Procedure Call utilizando apenas bibliotecas padrão do Python A biblioteca deverá permitir que funções sejam chamadas remotamente simulando a operação de sistemas distribuídos reais O sistema deve ser desenvolvido de forma modular organizado em diretórios e usando Programação Orientada a Objetos POO 2 Regras e Requisitos Funcionais Seu sistema deve implementar as seguintes funcionalidades Definição de uma interface de serviço Um conjunto de funções que serão exportadas remotamente Geração de Stubs A partir da interface gerar automaticamente classes cliente stubs que encapsulam chamadas remotas SerializaçãoDesserialização de dados Os parâmetros e resultados das chamadas devem ser serializados e transmitidos pela rede Comunicação entre cliente e servidor via socket TCPIP Servidor RPC Receber requisições desserializar invocar a função e devolver o resultado serializado ao cliente Cliente RPC Conectarse ao servidor enviar a requisição e receber o resultado Binder Um serviço simples para registro e descoberta de servidores O Binder deve ter uma função startbinder exatamente com esse nome 3 Restrições de Implementação O trabalho deve ser feito exclusivamente com bibliotecas padrão do Python não usar pip install Utilize pickle ou outra ferramenta da biblioteca padrão para serializar objetos e parâmetros Defina protocolos simples para comunicação textual ex usar caracteres separadores como entre campos no Binder O servidor deve ser concorrente aceitar múltiplos clientes ao mesmo tempo utilizando threading ou multiprocessing A arquitetura deve ser modularizada em vários arquivos e diretórios conforme descrito abaixo 4 Organização dos Arquivos Seu projeto deve ter a seguinte exatamente essa estrutura bibliotecarpc rpc initpy rpcserverpy Classe que implementa o servidor RPC rpcclientpy Classe que implementa o cliente RPC rpcstubgeneratorpy Módulo para gerar stubs automaticamente rpcbinderpy Módulo do Binder para localização de serviços serializerpy Módulo de serialização e desserialização interface mathservicepy Exemplo de interface de serviço examples serverexamplepy Exemplo de servidor que registra serviço clientexamplepy Exemplo de cliente que consome o serviço READMEmd Manual de execução e organização do sistema 5 Dicas Técnicas Serialização Para serializar a chamada nome da função parâmetros e o resultado utilize o módulo Separador em protocolos Ao enviar comandos para o Binder registro e descoberta defina um protocolo simples Por exemplo REGISTERservicenameipport LOOKUPservicename E no Binder trate as mensagens separando os campos usando split Binder Deve ser um servidor socket simples que recebe comandos de registro REGISTER e consulta LOOKUP Servidor RPC Depois de registrar no Binder o servidor deve aguardar conexões receber uma chamada executar a função correspondente e devolver o resultado ao cliente Cliente RPC O cliente deve consultar o Binder para descobrir o IP e porta do serviço desejado criar a chamada serializada enviála e aguardar a resposta Gerador de Stub O stub deve gerar métodos cliente que encapsulam chamadas RPC Em uma primeira versão é aceitável gerar manualmente para focar na lógica do RPC Depois o gerador pode ser aprimorado para automatizar a criação Conexões simultâneas No servidor RPC a cada conexão recebida abra uma nova threadprocesso para tratar a chamada sem bloquear outros clientes Erro e exceção Implemente tratamento de erros por exemplo serviço não encontrado função inexistente etc 6 Critérios de Avaliação Critério Peso Funcionamento completo da biblioteca RPC 40 Implementação correta do Binder 15 Geração e uso de Stubs 15 Organização modular do código diretórios 15 Tratamento de exceções e comunicação robusta 10 Documentação e clareza do README 5 7 Entrega Deve ser implementado um exemplo de uma calculadora distribuída a ser colocado dentro do diretório example conforme mostrado na organização dos arquivos O exemplo deve usar a sua biblioteca rpc e fazer as 4 operações exatamente da seguinte forma o printResultado de 5 3 mathstubadd5 3 o printResultado de 4 2 mathstubmultiply4 2 o printResultado de 5 3 mathstubsub5 3 o printResultado de 4 2 mathstubdivide4 2 8 Entrega Entregar um arquivo zip contendo toda a estrutura de diretórios O READMEmd deve conter o Como iniciar o Binder Servidor e Cliente o Como adicionar novos serviços à biblioteca o Exemplos de execução Data limite 040525 Forma de envio Google Classroom
18
Linguagens de Programação
UERJ
7
Linguagens de Programação
UERJ
2
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
7
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
7
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
12
Linguagens de Programação
UERJ
1
Linguagens de Programação
UERJ
Texto de pré-visualização
Trabalho Prático de Sistemas Distribuídos Tema Implementação de uma Biblioteca RPC Remote Procedure Call em Python 1 Descrição Geral O objetivo deste trabalho é implementar uma biblioteca de RPC Remote Procedure Call utilizando apenas bibliotecas padrão do Python A biblioteca deverá permitir que funções sejam chamadas remotamente simulando a operação de sistemas distribuídos reais O sistema deve ser desenvolvido de forma modular organizado em diretórios e usando Programação Orientada a Objetos POO 2 Regras e Requisitos Funcionais Seu sistema deve implementar as seguintes funcionalidades Definição de uma interface de serviço Um conjunto de funções que serão exportadas remotamente Geração de Stubs A partir da interface gerar automaticamente classes cliente stubs que encapsulam chamadas remotas SerializaçãoDesserialização de dados Os parâmetros e resultados das chamadas devem ser serializados e transmitidos pela rede Comunicação entre cliente e servidor via socket TCPIP Servidor RPC Receber requisições desserializar invocar a função e devolver o resultado serializado ao cliente Cliente RPC Conectarse ao servidor enviar a requisição e receber o resultado Binder Um serviço simples para registro e descoberta de servidores O Binder deve ter uma função startbinder exatamente com esse nome 3 Restrições de Implementação O trabalho deve ser feito exclusivamente com bibliotecas padrão do Python não usar pip install Utilize pickle ou outra ferramenta da biblioteca padrão para serializar objetos e parâmetros Defina protocolos simples para comunicação textual ex usar caracteres separadores como entre campos no Binder O servidor deve ser concorrente aceitar múltiplos clientes ao mesmo tempo utilizando threading ou multiprocessing A arquitetura deve ser modularizada em vários arquivos e diretórios conforme descrito abaixo 4 Organização dos Arquivos Seu projeto deve ter a seguinte exatamente essa estrutura bibliotecarpc rpc initpy rpcserverpy Classe que implementa o servidor RPC rpcclientpy Classe que implementa o cliente RPC rpcstubgeneratorpy Módulo para gerar stubs automaticamente rpcbinderpy Módulo do Binder para localização de serviços serializerpy Módulo de serialização e desserialização interface mathservicepy Exemplo de interface de serviço examples serverexamplepy Exemplo de servidor que registra serviço clientexamplepy Exemplo de cliente que consome o serviço READMEmd Manual de execução e organização do sistema 5 Dicas Técnicas Serialização Para serializar a chamada nome da função parâmetros e o resultado utilize o módulo Separador em protocolos Ao enviar comandos para o Binder registro e descoberta defina um protocolo simples Por exemplo REGISTERservicenameipport LOOKUPservicename E no Binder trate as mensagens separando os campos usando split Binder Deve ser um servidor socket simples que recebe comandos de registro REGISTER e consulta LOOKUP Servidor RPC Depois de registrar no Binder o servidor deve aguardar conexões receber uma chamada executar a função correspondente e devolver o resultado ao cliente Cliente RPC O cliente deve consultar o Binder para descobrir o IP e porta do serviço desejado criar a chamada serializada enviála e aguardar a resposta Gerador de Stub O stub deve gerar métodos cliente que encapsulam chamadas RPC Em uma primeira versão é aceitável gerar manualmente para focar na lógica do RPC Depois o gerador pode ser aprimorado para automatizar a criação Conexões simultâneas No servidor RPC a cada conexão recebida abra uma nova threadprocesso para tratar a chamada sem bloquear outros clientes Erro e exceção Implemente tratamento de erros por exemplo serviço não encontrado função inexistente etc 6 Critérios de Avaliação Critério Peso Funcionamento completo da biblioteca RPC 40 Implementação correta do Binder 15 Geração e uso de Stubs 15 Organização modular do código diretórios 15 Tratamento de exceções e comunicação robusta 10 Documentação e clareza do README 5 7 Entrega Deve ser implementado um exemplo de uma calculadora distribuída a ser colocado dentro do diretório example conforme mostrado na organização dos arquivos O exemplo deve usar a sua biblioteca rpc e fazer as 4 operações exatamente da seguinte forma o printResultado de 5 3 mathstubadd5 3 o printResultado de 4 2 mathstubmultiply4 2 o printResultado de 5 3 mathstubsub5 3 o printResultado de 4 2 mathstubdivide4 2 8 Entrega Entregar um arquivo zip contendo toda a estrutura de diretórios O READMEmd deve conter o Como iniciar o Binder Servidor e Cliente o Como adicionar novos serviços à biblioteca o Exemplos de execução Data limite 040525 Forma de envio Google Classroom