Seções:
|
Fase 2 - MembershipNessa fase do trabalho foi implementado um protocolo de comunicação entre os servidores que permitem que eles se monitorem, identificados quais estão ativos e quais não estão. Cada servidor ativo envia regularmente para os outros servidores uma mensagem de "hello", utilizando o protocolo UDP. Cada servidor ativo ao receber as mensagens de "hello" de outros servidores, adiciona em um vetor o ID do servidor que enviou o hello e um timestamp com o momento em que a mensagem foi recebida. No caso de IDs? já presentes no vetor, simplesmente é atualizado o timestamp. Regularmente esse vetor é verificado e entradas com um timestamp maior do que um determinado valor são retiradas. Adicionalmente foi criado um protocolo de comunicação entre cliente e servidor permitindo que o cliente envie as seguintes mensagens: ping, alivelist, peerlist, valor e try. O servidor responde com um "pong", a lista de servidores ativos, a lista com todos os servidores conhecidos, o valor atual armazenado, respectivamente. Para uma mensagem try o servidor inicia um 2 phase commit e responde com o resultado de tal operação (commited ou aborted). O código do servidor e do cliente esta disponível logo abaixo: ServidorClientearquivo de configuracaoExemplo de execução macalan: python server.py -f config.ini -i macalan
{}
{}
msg from ('200.17.202.57', 43990) arrived at Sat Nov 18 13:08:02 2006 with content {'type': 'hello', 'id': 'talisker'}
{'talisker': 1163862482.036097}
msg from ('200.17.202.57', 43990) arrived at Sat Nov 18 13:08:04 2006 with content {'type': 'hello', 'id': 'talisker'}
...
talisker: python server.py -f config.ini -i talisker
msg from ('200.17.202.6', 44819) arrived at Sat Nov 18 13:08:05 2006 with content {'type': 'hello', 'id': 'macalan'}
{'macalan': 1163862485.4113801}
msg from ('200.17.202.6', 44819) arrived at Sat Nov 18 13:08:08 2006 with content {'type': 'hello', 'id': 'macalan'}
...
macalan: ./client.py -f config.ini -i macalan -m alivelist
{'talisker': 1163862815.495404, 'macalan': 1163862815.533375}
macalan: ./client.py -f config.ini -i macalan -m peerlist
{'bowmore': ('bowmore', 45007), 'montecristo': ('montecristo', 45008), 'talisker': ('talisker', 45006)}
|