Licença GNU - GPL : "É permitido o uso de parte dos códigos aqui publicados sem autorização prévia, desde que identificada a fonte e o autor".
Autor: Alexandre Oliveira dos Santos - Matrícula: 201407237
Título: Arquivos da disciplina de Sistemas Distribuídos - Universidade Federal de Goiás - 2018-2.
Entrega 1 - Descrição: Implementação da Lista de Exercícios utilizando Node.JS e HTTP - (Solução Cliente-Servidor)
Pré-Requisitos: NPM, Node.JS - Express, BodyParser, Pug Template Engine.
Linguagens e Tecnologias: Javascript, HTML, Sublime Text
OBS: Para executar o projeto inicie o servidor através do arquivo "server.js". No diretório do projeto
há ainda o documento PDF contendo a descrição dos exercícios e também capturas de tela do projeto em funcionamento
em um dispositivo IOS através do navegador Safari.
Para verificar edições anteriores referentes a essa atividade consulte: https://github.com/alexandreoliveirasantos/SD_Lista1
Entrega 2 - Descrição: Implementação da Lista de Exercícios com a utilização de Remote Procedure Calls - (Solução RPC)
Linguagens e Tecnlogias: Java, XML-RPC Protocol, IDE Eclipse
OBS: Para executar o projeto inicie o servidor através do arquivo "JavaServer" e em seguida o cliente através do arquivo "JavaClient". No diretório do projeto
"Lista_Node" há o documento PDF contendo a descrição dos exercícios. Dentro do diretório desta implementação você pode encontrar capturas de tela do projeto em funcionamento (Client / Server) utilizando a IDE Eclipse para execução.
Entrega 3 - Descrição: Implementação da Lista de Exercícios com a utilização de Remote Method Invocation - (Solução RMI)
Linguagens e Tecnlogias: Java, RMI, IDE Eclipse
OBS: Para executar o projeto inicie o servidor através do arquivo "Server" e em seguida o cliente através do arquivo "Client". No diretório do projeto "Lista_Node" há o documento PDF contendo a descrição dos exercícios.
Entrega 4 - Projeto Final - Descrição: Implementação do Projeto Final da disciplina "DigiEscola" - (Em edição)
Proposta: Implementar uma solução de invocação remota com arquitetura do tipo request-reply REST-Based e com o uso de operações CRUD.
Justificativa: Senders (Clients) serão Broswers e o Receiver (Server) será implementado com a utilização de Node.JS devido a algumas vantagens fornecidas por essa tecnologia, como:
- IO não-bloqueante devido ao event loop nativo que nunca para de executar e controla todas as requisições lidando com tarefas em concorrência; simplicidade; Javascript everywhere (Client and Server side) que reduz a curva de aprendizado; Alta capacidade de escala; Comunidade ativa; Adequação à proposta do projeto, entre outros.
OBS: Para suportar as necessidades do projeto algumas tecnologias que usaremos (Back) serão:
- MySQL Database; Redis; Passport; Express; BodyParser; Crypto; Nodemon; Loadtest; etc.
- Além de tecnologias secundárias (Front):
- Pug Template Engine; Jquery; Bootstrap.
Funcionalidades: - (Em edição)
As funcionalidades passíveis de serem realizadas neste sistema são: (Editar)
1-Login e Autenticação de usuarios do tipo Secretaria e Responsável com dados persistidos no banco de dados MySQL com o uso do Passport.JS
2- Estabelecimento de Sessão após Login para os tipos Secretaria e Responsável com o uso do Express Session
3- Cadastro de estudantes e responsáveis (persistência em base de dados MySQL) restrito apenas a usuários do tipo Secretaria
4- Consulta de turmas (relação de alunos da turma) persistidas no banco de dados MySQL restrito apenas a usuários do tipo Secretaria
5- Consulta de frequencia de um dependente (estudante) restrito ao responsável de aluno cadastrado
6- Chat Real Time para realização de reuniões com o uso da tecnologia Socket.io
Não funcionais - (Em edição)
1- A senha dos usuários será persistida de forma criptografada na base de dados em SAH1 com chave e com o uso do Crypto.
2- Para manter e impedir que o servidor saia do ar será utilizado a ferramenta Forever que monitora o servidor realizando pings e a reestarta caso verifique que a mesma esta "fora do ar"
3- Para instanciar novos processos da aplicação e trabalhar de forma distribuída usando a mesma porta da rede e melhorando a perfomance será utilizado o módulo cluster para instanciar um maior nº de processos (quantidade de núcleos do processador do servidor).
4- Será realizado um comparativo (benchmark) para analisar e mensurar o desempenho e comportamento da aplicação em dois cenários: Utilizando cluster e também sem cluster, levando-se em conta concorrência (clientes iniciados em paralelo), número de requisições por segundo e outros parâmetros. Será utilizada a ferramenta loadtest para a ação.
5-
Contato: alexandresantosti@hotmail.com