Este projeto implementa um sistema de busca distribuído em Java 17, utilizando Sockets para a comunicação em rede. A arquitetura simula um ambiente real onde dados são particionados e processados por diferentes máquinas para otimizar o desempenho e garantir escalabilidade.
O sistema é composto por quatro componentes principais:
- Cliente: Uma interface de linha de comando (CLI) que permite ao usuário final realizar buscas.
- Servidor A (Orquestrador): Atua como um gateway. Ele recebe as requisições do cliente, as distribui para os servidores de trabalho e, por fim, agrega os resultados antes de devolvê-los ao cliente.
- Servidor B (Nó de Trabalho): Responsável por buscar em uma metade do conjunto de dados de artigos.
- Servidor C (Nó de Trabalho): Responsável por buscar na outra metade do conjunto de dados.
Antes de começar, garanta que você tenha os seguintes softwares instalados em seu sistema:
- Java 17 (JDK)
- Apache Maven
-
Clone o repositório
git clone https://github.com/itsryu/arXiv.git -
Posicione os Arquivos de Dados
Mova os arquivosdados_servidor_b.jsonedados_servidor_c.jsonpara o diretório correto dentro do projeto:src/main/resources/data. -
Compile o Projeto e Instale as Dependências
Abra um terminal na raiz do projeto e execute o seguinte comando Maven. Ele irá baixar as dependências e compilar o código.mvn clean package
Existem duas maneiras de iniciar o sistema: o método manual, que é mais confiável para desenvolvimento, e o método automatizado via scripts, para conveniência no Windows.
Este método requer a abertura de quatro (4) janelas de terminal separadas. É o método mais estável, especialmente em ambientes de desenvolvimento.
-
Terminal 1 - Iniciar Servidor A (Orquestrador)
mvn exec:java -Dexec.mainClass="br.com.arxiv.ServerA" -
Terminal 2 - Iniciar Servidor B (Nó de Trabalho)
mvn exec:java -Dexec.mainClass="br.com.arxiv.ServerB" -
Terminal 3 - Iniciar Servidor C (Nó de Trabalho)
mvn exec:java -Dexec.mainClass="br.com.arxiv.ServerC" -
Terminal 4 - Iniciar Cliente
Após os três servidores estarem no ar, inicie o cliente:
mvn exec:java -Dexec.mainClass="br.com.arxiv.Client"
Para conveniência no sistema operacional Windows, foram criados arquivos de lote (.bat) que automatizam a inicialização de cada componente.
server_a.bat: Inicia o Servidor A (Orquestrador).server_b.bat: Inicia o Servidor B (Nó de Trabalho).server_c.bat: Inicia o Servidor C (Nó de Trabalho).client.bat: Inicia o cliente para interação.all.bat: Script mestre que executa todos os outros, iniciando o sistema completo, cada componente em sua própria janela de terminal.
Como usar: Basta executar o arquivo all.bat para iniciar todos os
servidores e o cliente de uma só vez, ou executar na ordem correta para iniciar cada servidor.
Aviso: A execução de scripts pode apresentar instabilidade dependendo do ambiente (por exemplo, dentro de terminais de IDEs), podendo levar a erros. Caso os scripts falhem, utilize o Método 1 (Execução Manual).