Desenvolver um pequeno aplicativo que possa demonstrar a utilização de sockets como meio de comunicação em sistemas distribuídos.



Documentos relacionados
Uma aplicação distribuída


IMPLEMENTAÇÃO DE SOCKETS E THREADS NO DESENVOLVIMENTO DE SISTEMAS CLIENTE / SERVIDOR: UM ESTUDO EM VB.NET

Tipos de Servidores. Servidores com estado

INF1013 MODELAGEM DE SOFTWARE

Sistemas Distribuídos

Aula 30 - Sockets em Java

SIMULADOR DE ROTEAMENTO DE PACOTES (V. 3 20/05/2010)

O método de Monte Carlo: algumas aplicações na Escola Básica

Exemplos práticos do uso de RMI em sistemas distribuídos

Comunicação Inter-Processos. Prof. Adriano Fiorese. Conceitos Iniciais

Aula prática. Objetivo IPCONFIG. Prof. Leandro Pykosz Informa a configuração atual de rede da máquina;

Sistemas Distribuídos

ALTERNATIVA PARA CONEXÃO VIA INTERNET DE IP MASCARADO A IP REAL

Conceitos de relação de confiança

AULA 6: SERVIDOR DNS EM WINDOWS SERVER

Java : Comunicação Cliente-Servidor.

FTP - Protocolo. O protocolo FTP é o serviço padrão da Internet para a transferência de arquivos entre computadores.

UNIVERSIDADE ESTADUAL DO OESTE DO PARANÁ CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS COLEGIADO DE INFORMÁTICA

Descrição. Implementação. Departamento de Informática e Estatística Universidade Federal de Santa Catarina LAB 4 Transferência de Arquivos

Aula Prática. Comunicação em SOCKTS. Disciplina: INF01151

Manual Replicação Manual VPN

Trabalho de Fundamentos da Computação Gráfica

SMTP, POP, IMAP, DHCP e SNMP. Professor Leonardo Larback

Máscaras de sub-rede. Fórmula

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

CA Nimsoft Monitor Snap

Instituto de Biociências de Botucatu

Trabalho 01: Cliente e Servidor Python

Manual de Administração DPS Printer 2.1 NDDigital S/A - Software

Olho por olho, e o mundo acabará cego. Mohandas Gandhi

TCP/IP TCP UDP IP HTTP HTTPS FTP TFTP TELNET POP3 IMAP SMTP SNMP DHCP

TRBOnet MDC Console. Manual de Operação

Sockets em Ruby. Curso de Tecnologia em Redes de Computadores Programação para Redes

6. Geometria, Primitivas e Transformações 3D

Integração de aplicações em. Luiz Eduardo Borges

MANUAL DE SUPORTE. Controle de Suporte. Este manual descreve as funcionalidades do controle de suporte.

Instruções de Instalação do IBM SPSS Modeler (Licença Simultânea)

Considerações no Projeto de Sistemas Cliente/Servidor

Engenharia Elétrica Eletrônica Slides 20: TCP/IP em Winsocks 2. API do Windows para programar utilizando o protocolo TCP/IP Prof. Jean Marcelo SIMÃO

Redes de Computadores. Protocolos de comunicação: TCP, UDP

Centro Tecnológico de Eletroeletrônica César Rodrigues. Atividade Avaliativa

Programação com Sockets TCP e UDP - Cliente. Gustavo Leitão

Sistemas Distribuídos. Coulouris Capítulo 4

Redes de Computadores

Relatório do Laboratório 3

Rede de Computadores II

Instalação: permite baixar o pacote de instalação do agente de coleta do sistema.

UMA ABORDAGEM SOBRE A INTERFACE DE PROGRAMAÇÃO DE APLICAÇÕES SOCKETS E A IMPLEMENTAÇÃO DE UM SERVIDOR HTTP

SISTEMAS DISTRIBUÍDOS

PROCEDIMENTOS PARA A INSTALAÇÃO E UTILIZAÇÃO DO APLICATIVO DE LEILÃO ELETRÔNICO DA CONAB

Threads e Sockets em Java. Threads em Java. Programas e Processos

Roteiro. Arquitetura. Tipos de Arquitetura. Questionário. Centralizado Descentralizado Hibrido

Guia de Conectividade Worldspan Go Res! A V A N Ç A D O

UNIVERSIDADE. Sistemas Distribuídos

Sistemas Operativos. Threads. 3º ano - ESI e IGE (2011/2012) Engenheiro Anilton Silva Fernandes (afernandes@unipiaget.cv)

Programação de Sistemas

Programação de Sistemas

Programação Paralela e Distribuída. Prof. Cidcley T. de Souza

Instalação e utilização do Document Distributor

Sistema CarOnline365 S I S T E M A D E O R Ç A M E N TA Ç Ã O E G E R E N C I A M E N T O PA R A O F I C I N A S E C O N C E S S I O N Á R I A S

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Introdução ao Modelos de Duas Camadas Cliente Servidor

Visualizando um vídeo através do Servidor de Streaming

Software de segurança em redes para monitoração de pacotes em uma conexão TCP/IP

Wireshark. Captura de Protocolos da camada de aplicação. Maicon de Vargas Pereira

Na medida em que se cria um produto, o sistema de software, que será usado e mantido, nos aproximamos da engenharia.

Ciência de Computadores Sistemas Distribuídos e Móveis

Cliente-servidor com Sockets TCP

Sistemas Operativos 2005/2006. Arquitectura Cliente-Servidor Aplicada A Uma Biblioteca. Paulo Alexandre Fonseca Ferreira Pedro Daniel da Cunha Mendes

Sistema de gerenciamento, controle e auditoria de computadores e usuários em uma rede local.

UNIVERSIDADE FEDERAL DE SANTA CATARINA DEPARTAMENTO DE INFORMÁTICA E ESTÁTISTICA GRADUAÇÃO EM CIÊNCIAS DA COMPUTAÇÃO DISCIPLINA: COMUNICAÇÃO DE DADOS

Data: 22 de junho de

Programação com sockets (em Java)

MODELO CLIENTE SERVIDOR

ARP- Address Resolution Protocol


MÓDULO 8 ARQUITETURA DOS SISTEMAS DE BANCO DE DADOS

CONCEITOS INICIAIS. Agenda A diferença entre páginas Web, Home Page e apresentação Web;

Prof. Rafael Gross.

Traceroute É uma ferramenta de diagnóstico que rastreia a rota de um pacote através de uma rede de computadores e que utiliza os protocolos IP e ICMP.

Informática I. Aula Aula 22-03/07/06 1

TUTORIAL PRÁTICO SOBRE Git. Versão 1.1

Comunicação em Sistemas Distribuídos

Java ME e suas principais tecnologias de conectividade. Gracieli Begia Mateus

2 de maio de Remote Scan

Manual de Utilização do Citsmart Remote

GERAL - CAMERA IP. Quando a página de login aparecer, digite admin no nome e admin na senha, e então clique em OK. Tela Principal

Unidade 5 Utilitários de Redes

Objetivos: i) Verificar o impacto de loops em redes locais ii) Configurar o protocolo STP para remover loops da rede

Componentes de um sistema de firewall - II. Segurança de redes

SIMET Sistema de Medições de Tráfego IP. Fabrício Tamusiunas NIC.BR Milton Kaoru Kashiwakura NIC.BR

Programação de Robótica: Modo Circuitos Programados - Avançado -

Instalando e usando o Document Distributor 1

Aula 02 Conceitos básicos elipse. INFORMÁTICA INDUSTRIAL II ENG1023 Profª. Letícia Chaves Fonseca

A4 Projeto Integrador e Lista de Jogos

ÍNDICE. 16/06/ :48 Leite Júnior

Transcrição:

Objetivos Desenvolver um pequeno aplicativo que possa demonstrar a utilização de sockets como meio de comunicação em sistemas distribuídos. Método de Monte Carlo O método de Monte Carlo é uma forma de resolver problemas usando números aleatórios. O método explora as propriedades estatísticas dos números aleatórios para assegurar que o resultado correto é computado da mesma maneira que num jogo de casino para se certificar de que a casa sempre terá lucro. Por esta razão, a técnica de resolução de problemas é chamada de método de Monte Carlo. Para resolver um problema através do método de Monte Carlo é usado uma série de tentativas aleatórias. A precisão do resultado final depende em geral do número de tentativas. Esse equilíbrio entre a precisão do resultado e o tempo de computação é uma característica extremamente útil dos métodos de Monte Carlo. Se queremos somente uma solução aproximada, então um método de Monte Carlo pode ser bastante rápido. Exemplo: computação de pi Neste exemplo um algoritmo de Monte Carlo simples é usado para calcular o valor de π usando uma sequência de números aleatórios. Considere o quadrado colocado no plano x-y com a extremidade inferior esquerda na origem como mostrado na figura abaixo. A área do quadrado é r 2, onde r é o comprimento do lado. Um quarto de um círculo é inscrito no quadrado. Seu raio é r e seu centro está na origem do plano x-y. A área da quarta parte do círculo é π r 2 /4 Considerando A a área de de círculo parcialmente representado na figura acima, tem-se que: Pelo Método de Monte Carlo, (2) sendo os pontos lançados aleatoriamente que ficaram dentro da área em cinza, e o número total de pontos gerados. Unindo as equações 1, e 2 obtém-se:

Considerando-se obtém-se: (3) O algoritmo de cálculo consiste em gerar pontos sendo e (vide figura 2). Identificar e contar os pontos e, e aplicar a equação 3. Figura: Algoritmo de Cálculo do Implementação monoprocessada import random import time import sys def pi(trials): hits = 0 for i in xrange(trials): x = random.random() y = random.random() if (((x*x) + (y*y)) < 1): hits = hits + 1 return 4.0 * hits / trials t0=time.time() print pi(int(sys.argv[1])) tf=time.time() print 'O tempo gasto na execucao eh: ',tf-t0,'[s]'

Versão distribuída Considerando que o processamento de cada uma das iterações pode ocorrer de forma independente, a forma mais simples de se pensar em particionar o problema é dividindo igualmente o numero de iterações pelo número de processadores disponíveis. A medição do poder computacional disponibilizado é realizada com base no tempo de execução de cada tarefa. Servidor import random #gerador de numeros aleatorios from socket import * #sockets #funcao que faz o calculo do numero de pontos def pi(trials): hits = 0 for i in xrange(trials): x = random.random() y = random.random() if (((x*x) + (y*y)) < 1): hits = hits + 1 return hits HOST = '' PORT = 2343 s = socket(af_inet, SOCK_STREAM) #cria um socket s.bind((host,port)) #conecta o socket na porta s.listen(1) # fica esperando conexoes print "Escutando conexoes" while 1: conn, addr = s.accept() #recebe uma conexao data = conn.recv(1024) #recebe o dado enviado pelo cliente if data == "PING": #se o comando recebido foi um ping print "ping recebido" else:#senao a informacao recebida eh o numero de tentativas print "Calculando para o cliente "+str(addr[0]) hits = pi(int(data)) #calcula o numero de pontos usando o numero de tentativas recebidas do cliente print hits conn.send(str(hits)) #retorna ao cliente o numero de pontos conn.close() # fecha a conexao Cliente from socket import * import sys import time from threading import Thread PORT = 2343 #subclasse da classe Thread. essa classe conecta com o servidor e envia os dados para serem calculados class cliente(thread): def init (self,ip,trials): #construtor da classe Thread. init (self) #chama o construtor da classe pai self.ip = ip #o ip que deve conectar

self.hits = -1 #armazena o resultado self.trials = str(trials) #numero de tentativas def run(self): #essa eh a parte que serah executada print "thread do ip "+str(self.ip)+" iniciou" #abre a conexao com o servidor s = socket(af_inet,sock_stream) s.connect((self.ip,port)) #envia para o servidor o numero de tentativas s.send(self.trials) #fica esperando o resultado do calculo do servidor self.hits = s.recv(1024) s.close() print "trhread do ip "+str(self.ip)+" finalizou com o resultado="+str(self.hits) #funcao que verifica se os servidores estao ativos def ativos(servidores): ativos = []#lista com os servidores ativos for ip in servidores: try: print "testando "+str(ip) s = socket(af_inet,sock_stream) s.connect((ip,port)) s.send("ping")#manda um comando ping para ver se o servidor ainda esta ativo s.close() ativos.append(ip) except: #print "Unexpected error:", sys.exc_info()[0] pass return ativos trials = sys.argv[1] #recebe do parametro do usuario o numero maximo de tentativas print "" #verifica o numero de servidores ativos servidores = ativos(['192.168.200.14', '200.135.240.1', '192.168.200.11', '192.168.200.5']) if len(servidores) == 0: print "Nao existem servidores ativos" sys.exit() print "Servidores ativos:"+str(servidores) #calcula o numero de tentativas que cada servidor deve executar trials_por_servidor = int(trials) / len(servidores) resultado = [] #lista com as threads em execucao t0=time.time() #usado para o calculo do tempo de execucao for ip in servidores: atual = cliente(ip, trials_por_servidor) #cria uma nova thread resultado.append(atual) #adiciona a thread na lista de threads atual.start() #inicia a thread total_hits = 0 #total dos resultados for r in resultado: r.join()#espera ate a thread terminar total_hits += int(r.hits) #faz o calculo do pi usando os resultados enviados por cada servidor pi = 4.0 * int(total_hits) / int(trials) print "Pi :" + str(pi) tf=time.time() print 'O tempo gasto na execucao eh: ',tf-t0,'[s]'

Resultados Versão monoprocessada python monoprocessado.py 10000000 3.141672 O tempo gasto na execucao eh: 15.409099102 [s] Versão distribuída Com um servidor local python server.py & testando 192.168.200.5 Servidores ativos:['192.168.200.14'] trhread do ip 192.168.200.14 iniciou trhread do ip 192.168.200.14 finalizou com o resultado=7855196 Pi :3.1420784 O tempo gasto na execucao eh: 16.339785099 [s] Com um servidor remoto testando 192.168.200.5 Servidores ativos:['192.168.200.11'] thread do ip 192.168.200.11 iniciou thread do ip 192.168.200.11 finalizou com o resultado=7854467 Pi :3.1417868 O tempo gasto na execucao eh: 24.9854791164 [s] Com dois servidores

testando 192.168.200.5 Servidores ativos:['192.168.200.14', '192.168.200.11'] thread do ip 192.168.200.14 iniciou thread do ip 192.168.200.11 iniciou thread do ip 192.168.200.14 finalizou com o resultado=3928204 thread do ip 192.168.200.11 finalizou com o resultado=3925699 Pi :3.1415612 O tempo gasto na execucao eh: 12.5829679966 [s] Com três servidores testando 192.168.200.5 Servidores ativos:['192.168.200.14', '192.168.200.11', '192.168.200.5'] thread do ip 192.168.200.14 iniciou thread do ip 192.168.200.11 iniciou thread do ip 192.168.200.5 iniciou thread do ip 192.168.200.5 finalizou com o resultado=2617234 thread do ip 192.168.200.14 finalizou com o resultado=2618522 thread do ip 192.168.200.11 finalizou com o resultado=2617572 Pi :3.1413312 O tempo gasto na execucao eh: 8.77324795723 [s] Observações: Como o método de monte carlo se baseia em geração de números aleatórios o tempo de execução pode variar, assim como a precisão do resultado. Mesmo assim foi possível visualizar um ganho de performance na versão distribuída quando foi adicionado mais máquinas. No teste da versão distribuída com somente um servidor remoto o resultado foi piór do que a versão monoprocessada pois agora temos o tempo de comunicação entre o cliente e o servidor que foi acrescentado. Trabalho Desenvolver a versão cliente/servidor usando sockets em C. Referências http://www.brpreiss.com/books/opus7/ http://www.inf.ufrgs.br/procpar/disc/cmp134/trabs/t2/021/html/index.html