Processamento-Paralelo-e-distribuid / Comunicao-Indireta-Eleicao-Coordenacao-Distribuda-Seguranca-e-Tolerancia-a-Falhas

GNU General Public License v3.0
0 stars 0 forks source link
trabalho

Comunicao-Indireta-Eleição-Coordenação-Distribuda-Segurança-e-Tolerancia-a-Falhas

Objetivos

Todos os usuários mal-intencionados utilizados para teste podem ser encontrados na pasta "Teste" do repositório.

Analise

Conforme fomos desenvolvendo o código, encontramos algumas dificuldades que possibilitaram o entendimento aprofundado em relação de comunicação distribuída, a coordenação com a qual as filas funcionam são complexas, mas após compreensão possibilitaram uma implementação satisfatória de comunicação indireta, um dos aprendizados adquirido foi em pauta do funcionamento paralelo e sequencial das filas, percebemos que apesar da operação paralela das filas, ex: "ppd/solution" e "ppd/voting" as mensagens consumidas são executadas sequencialmente nas filas, ex: caso recebemos duas soluções, a primeira solução sera consumida no callback referente a "solution" e caso solution envie seu voto para "voting", o mesmo entra em execução paralelamente por tanto a segunda mensagem de solução só ira ser analisada após o callback da 1 mensagem de solução ser finalizado. Isto facilitou nosso entendimento e proporcionou uma implementação mais limpa e dinâmica com a junção de uso de memória e disco.

A análise anterior também nos trouxe outra reflexão, pois o modo que implementamos dispensava algumas variáveis que eram passadas obrigatoriamente pelas filas, denotando um conceito essencial em comunicação indireta, conceito este que diz respeito a implementação de código, pois não importa o modo que os outros usuários implementam seus códigos contanto que as mensagens em fila sejam padronizadas, contudo, nosso código mesmo não utilizando das variáveis passadas em fila, envia mensagens com a mesma formatação que a de outros usuários, para garantir a confiabilidade.

Requerimento de instalação

requer a instalação do pycryptodome 3.15.0, pika, pandas, threading e do RabbitMQ.

Primeiramente atualizando o sistema

sudo apt-get update -y
sudo apt-get upgrade -y

Instalação do pip:

python3 -m pip install --upgrade pip

Instalação do pika:

python3 -m pip install --upgrade pika

Instalando pycrypto:

pip3 install -U PyCryptodome

Instalando pandas:

sudo apt install python3-pandas

Instalando threading:

pip3 install threading

Instalando time:

pip install python-time

Instalação do RabbitMQ:

RabbitMQ

Modo de execução

Navegue até a pasta usuario e execute o código logo abaixo garantindo que a pasta chaves não tenha sido altera e que os arquivos 0_export_public_key.py, 1_sign.py, 2_verify.py e generate_key.sh esteja na pasta e não tenham sido alterados.

python3 miner.py

Após execução aparecera uma mensagem local pedindo para informar a quantidade de usuários que participarão da mineração. Por fim, o código ficara responsável por manter a comunicação com os outros usuários.

Autores


Arthur Coelho Estevão

Mayke Wallace