GithubHelp home page GithubHelp logo

malhaviaria's Introduction

Premissas:

Para a construção do projeto tomei como definições as seguintes premissas:

 - A aplicação poderá ser acessada por clientes na web e dispositivos mobile
 - A aplicação precisa ser leve e sue tempo de resposta eficiente
 - A aplicação precisa possuir uma segurança minima para evitar ataques

Escolha da arquitetura:

Com base nas premissas, fiz as seguintes escolhas de Framework:

 - Para que a aplicação seja leve e possa ser acessada por diversos clientes, defini que os serviços criados seriam em rest devido a sua leveza
 - Para simplificar a comunicação, a troca de informações seguiria o padrão json
 - Como linguagem de desenvolvimento escolhi Java, por ser a linguagem que tenho mais afinidade
 - Como servidor escolhi o apache tomcat 8, devido a sua leveza e baixo custo
 - Para a segurança, escolhi o spring security pela facilidade de utilização e compatibilidade com o servidor utilizado
 - Para a persistência dos dados, escolhi o banco de dado baseado em grafos Neo4J, pois toda a complexidade da logica de busca do melhor caminho ficaria
   como responsabilidade do banco de dados.
 - Utilização do Maven para controle de dependências.
   
Desenvolvimento:

O desenvolvimento foi iniciado definindo-se o contrato do serviço.
Para o serviço de persistência da malha, defini um objeto de entrada contendo uma lista de objetos nomeados estradas, contendo a informação dos
pontos de inicio e fim e a distancia entre os mesmos
Para o serviço de busca de melhor caminho, as informações necessárias são passadas como parâmetros da query string.

Por se tratar de um problema clássico de grafos (problema de melhor caminho), escolhi como banco de dados o Neo4J. A logica de escolha do melhor caminho
também poderia ser construída na aplicação, entretanto, a logica precisa trabalhar com todos os dados em memoria e, se tratando de uma aplicação 
que pode conter milhões de pontos, trazer todos para a memoria do servidor poderia derrubar a aplicação.

Defini dois tipos de usuários para acesso a aplicação. O usuário user que pode utilizar o serviço de busca de melhor caminho, e o usuário admin, responsável
por efetuar a carga dos dados no sistema.

Problemas encontrados

O único problema encontrado foi em relação ao conector do banco de dados. Ate o momento não consegui resolver o mesmo, tomando como manobra de contorno
o acesso direto ao arquivo do banco (ação recomendada pela própria empresa em sua documentação)

Controle de exceções 

O controle de exceções foi feito utilizando-se exceções de negocio e retornando para o cliente o status HTTP correspondente.

Testes Unitários

Os testes unitários foram construídos utilizando o Junit, visando abranger todos os cenários possíveis de utilização do sistema

Testes de performance

Executei testes de performance utilizando o load test do SoapUI com uma malha de 7 pontos

Os teste foram executados utilizando-se 5 threads simultâneas, com um total de 1000 requisições

Para o serviço de carga de dados, obtive como tempo minimo 16 ms e como tempo máximo 391 ms tendo uma media de 26,91 ms

Para o serviço de consulta de dados, obtive como tempo minimo 11 ms e como tempo máximo 44 ms tendo uma media de 19,77 ms

Como executar a aplicação

Para a execução da aplicação sera necessário primeiramente baixar o código da aplicação de minha pagina no github:

https://github.com/thomassalgado/malhaviaria

Para o download do código pode ser utilizado o eclipse com o plugin do git instalado ou a própria ferramenta do git

Para a instalação do banco de dados é necessário baixar e instalar a versão comunity do Neo4J da pagina abaixo

http://neo4j.com/download/

Apos a instalação do banco de dados e download do código fonte, alterar a propriedade malhaviaria.caminho.db do arquivo 
src/main/resorces/malhaviaria.properties da aplicação com o caminho físico do banco de dados.

Gerar o arquivo war da aplicação utilizando o maven ou o eclipse.

Baixar e instalar o servidor TomCat no link abaixo

https://tomcat.apache.org/download-80.cgi

Instalar a aplicação no servidor

Estou disponibilizando na pasta soapui da aplicação, um projeto do soapui contendo exemplo de mensagens e os Load Tests criados

Seguem abaixo os dados de acesso dos usuários:

user:user
password:user

user:admin
password:admin

Qualquer duvida, estou a disposição.

Rafael Thomas Salgado

malhaviaria's People

Contributors

thomassalgado avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.