







Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Os melhores documentos à venda: Trabalhos de alunos formados
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Comunidade
Peça ajuda à comunidade e tire suas dúvidas relacionadas ao estudo
Descubra as melhores universidades em seu país de acordo com os usuários da Docsity
Guias grátis
Baixe gratuitamente nossos guias de estudo, métodos para diminuir a ansiedade, dicas de TCC preparadas pelos professores da Docsity
Um trabalho de desenvolvimento de uma aplicação em nuvem utilizando node.js, que facilita o acesso e manipulação de arquivos dos usuários, independentemente do local. O documento aborda a arquitetura cliente-servidor tradicional, as vantagens de node.js, a implementação do sistema, e os resultados e discussões sobre o desempenho da plataforma.
O que você vai aprender
Tipologia: Notas de aula
1 / 13
Esta página não é visível na pré-visualização
Não perca as partes importantes!
CAMPOS, Diego Passos Garcia; PEREIRA, Kaique Eduardo; CARVALHO, Samuel Alves de; MOREIRA, Thiago Libânio; PINHEIRO, Vinicius Santos^1 ; MOREIRA JÚNIOR, Maurício^2.
(^1) Acadêmicos do Curso de Ciência da Computação da Universidade José do Rosário Vellano.
UNIFENAS, Campus Alfenas – MG, 2016. (^2) Professores do Curso de Ciência da Computação da Universidade José do Rosário Vellano.
UNIFENAS, Campus Alfenas – MG, 2016.
Resumo: Cada vez mais, as pessoas necessitam ter acesso aos seus arquivos demasiadamente importantes, todavia sempre os esquecem em seus computadores, pen drives , em casa ou no trabalho, perdendo assim suas apresentações de trabalho por falta ou falha destes arquivos. Por esta razão, o conceito a que se refere como “nuvem”, facilita o acesso, o armazenamento, a manipulação e a edição desses arquivos, não importando o lugar em que a pessoa esteja desde que haja alguma conexão com a internet. Sendo assim, este trabalho teve como finalidade a criação de uma aplicação em nuvem que facilite o acesso e manipulação de arquivos dos usuários, para que eles possam acessar de qualquer lugar, seja com uma conexão de internet banda larga ou até do uso das conexões 3G/4G de redes móveis. Um dos principais objetivos desse trabalho consiste em desenvolver uma nova tecnologia, que responda ao acesso de maneira rápida e simples. O uso do framework Node.js para o desenvolvimento desta aplicação foi escolhido por facilitar o desenvolvimento e tentar atender melhor às necessidades encontradas pelos usuários.
Palavras-chave: cloud, nuvem, node.js.
Abstract : Increasingly, people need to have access to their files that are too important, but they always forget them on their computers, pen drives, at home or at work, thus losing their work presentations due to the lack or failure of these files. For this reason, the existence of the concept that we refer to as "cloud" facilitates the access, storage, manipulation and editing of these files, no matter where you are since there is some connection to the internet. Thus, this work aims to create a cloud application that facilitates access and manipulation of users' files, so they can access from anywhere, whether with a broadband internet connection or even the use of 3G connections / 4G of mobile networks. One of the main objectives of this work is to develop a new technology, which responds quickly and easily, the use of the Node.js framework for the development of this application was chosen for facilitating development and trying to better meet the needs encountered by Users.
Keywords: cloud, node.js.
1 INTRODUÇÃO
Armazenar arquivos importantes com o avanço da computação tem se tornado usual. Manipular e armazenar documentos, comprovantes e diversos outros arquivos, de forma segura vem se tornado cada vez mais difícil, pois estes ficam a mercê de possíveis invasões, vírus e problemas em hardwares. Guardá-los em um ambiente seguro e disponível em qualquer local a qualquer momento é primordial e as empresas têm investido cada vez mais em armazenamento em nuvem (internet). Para atender todas estas demandas grandes data center’s de empresas como o GOOGLE e sua aplicação chamada “ google drive ” são alocados centenas de servidores para um único propósito: armazenar o que o usuário tem de mais importante que são seus dados. Estes dados são
enviados e armazenados em servidores com total segurança de seus arquivos e acessível 24 horas por dia de qualquer lugar do mundo. Utilizar o melhor de cada tecnologia para maximizar o desempenho criando uma aplicação leve e rápida é um ponto principal para qualquer empresa do ramo. Essas atribuições podem ser encontradas no framework Node.js que utiliza-se de métodos onde as requisições são processadas assim que chegam, eliminando a espera na fila e ociosidade para receber uma resposta. Com a crescente utilização do armazenamento em nuvem é necessário entender e melhorar as suas funcionalidades e principalmente sua comunicação Cliente-Servidor, utilizando ferramentas e funções atuais no mercado, dentre elas o Node.js. Diante do exposto, este estudo teve como objetivo geral construir uma aplicação de armazenamento em nuvem usando funções de Single Thead, programação orientada a eventos e processos assíncronos para obter maior desempenho na comunicação. Busca-se compreender se a ferramenta desenvolvida melhorará o desempenho Cliente- Servidor de uma aplicação e a usabilidade do usuário em diversas situações, para que seus dados sejam armazenados, processados e organizados de forma mais rápida. Desta forma criando um ambiente amigável para o usuário, onde ele possa acessar seus arquivos mesmo em condições não favoráveis de acessos 3G/4G.
2 REFERENCIAL TEÓRICO
2.1 Modelo tradicional de servidores
Segundo McKie (1997) a arquitetura Cliente/Servidor vem sendo desenvolvida por muitos anos, mas a passos lentos. Desde aplicações em Mainframes de plataformas rodando o Sistema Operacional UNIX, passando por Sistemas de Banco de Dados Relacional até a importância da capacidade gráfica dos pacotes front-end existentes, melhorando a interação com o usuário. Para Ferneda (2014) as definições da arquitetura Cliente/Servidor são: o termo Cliente/Servidor se refere às aplicações computacionais através de várias plataformas; são divididas em um servidor que detém o serviço; e, vários usuários (clientes) o acessam por meio de uma interface gráfica, ou não, para acesso e manipulação de dados. Cliente/Servidor é um modelo onde dois ou mais computadores se conectam e interagem afim de oferecer serviços uns aos outros independente do lugar em que se encontram. Um sistema Cliente/Servidor é entendido como uma interação entre Software e Hardware em diferentes níveis. Salemi (1993) e Hulquist (1997) definem algumas características:
Cliente Também chamado de font-end ou WorkStation, é um processo em que a interação com o usuário, utilizando ou não uma interface gráfica permite consultas ou comandos resultando em uma apresentação dos dados. É um processo ativo na relação Cliente/Servidor. Inicia e finaliza interações com os Servidores, solicitando serviços. Não há comunicação com outros Clientes. Servidor
Também chamado de back-end fornece serviços aos Clientes que necessitam. É um processo reativo na relação Cliente/Servidor. Recebe e responde às solicitações dos Clientes. Atende a diversos Clientes simultaneamente.
Salemi (1993) ainda cita vantagens para melhor uso da arquitetura Cliente/Servidor, como: confiabilidade, mesmo como problemas parte do sistema do Servidor continua ativo; capacidade de
O projeto foi dividido em três partes, elaboração, pesquisa e implementação. Na elaboração, foi discutido qual enfoque seria tomado pelo projeto e buscando por possíveis temas a serem abordados. Após toda a discussão chegou-se ao consenso de que o Armazenamento em Nuvem era uma tecnologia muito utilizada e com uma carência de um aplicativo que atendesse as verdadeiras necessidades dos usuários. Depois de escolhido o tema a ser abordado, foi necessário uma intensa pesquisa em torno de quais tecnologias seriam utilizadas para o desenvolvimento do sistema, onde se procurou por plataformas de desenvolvimento, softwares gerenciadores de banco de dados, e ferramentas práticas para o desenvolvimento web. Após, foi colocado em prática à implementação da aplicação, montando-se o servidor, onde se alocou o banco de dados, também desenvolvido nesta etapa, implementou-se as funções de comunicação necessárias para o funcionamento da nuvem e as telas de apresentação e utilização do site.
3.1 Tecnologias utilizadas
3.1.1 Node.JS
Baseado na tecnologia do runtime V8 do Chrome, o node é basicamente um conjunto de bibliotecas desenvolvidas em C++, que permite a execução de códigos em javascript. Utiliza uma arquitetura non-blocking thread (não bloqueante) e é baseada em eventos que o torna mais leve e eficiente, sendo ideal para aplicativos com alta taxa de uso e fluxo de dados, como aplicativos que de dados em tempo real. Esta arquitetura viabiliza a utilização de conexões simultâneas, exigindo menos investimento em hardware e trabalhando com mais eficiência. Neste processo entendem-se os processos síncrono e assíncrono. Em um processo síncrono o servidor precisa espera uma requisição acabar para que seja processado o próximo evento, isto significa que os recursos dependem de uma resposta para que o próximo seja executado, como se vê nas Fig. 1, onde se criou em uma linha do tempo, criados 5 arquivos. No processo assíncrono não é necessário um tempo de resposta para que o outro evento seja acionado, como se observa na Fig. 2, de forma assíncrona, a criação dos mesmos 5 arquivos da Fig. 1, de maneira não bloqueante.
Figura 1. TimeLine síncrona bloqueante Figura^2.^ TimeLine^ assíncrona não bloqueante
Observa-se que o processo assíncrono levou 1/5 do tempo de execução, maximizando o processamento dos eventos.
3.1.2 HTML
Neste projeto, o HTML foi utilizado juntamente com o CSS, para criar telas favoráveis ao sistema. Com a ajuda dessas ferramentas criou-se todo o layout pensando na facilidade de acesso por parte do usuário, fazendo com que o sistema seja auto explicável.
Mediante os esforços para a formatação, viu-se que poderia ser melhorado as telas com uma template utilizada atualmente em vários sites já conhecidos, o bootstrap. Esse nada mais é do que uma biblioteca CSS pronta e de plataforma livre, onde se utiliza para realizar botões e terminações de telas, para que o sistema se torne mais agradável e com um layout limpo.
3.1.2 MongoDB
Lançado em 2009, o MongoDB é um banco de dados orientado documentos auto contidos e auto descritos, contém código aberto e licenciado pela AGPL (Affero General Public License). Foi criado com o intuito de servir a servidores de grande porte devido a facilidade de manipulação dos dados que este possibilita. Diferente dos demais Sistemas Gerenciadores de Banco de Dados, o Mongo armazena seus arquivos em documentos, facilitando a alteração de campos e dados, as representações hierárquicas, o armazenamento de matrizes e outras estruturas mais complexas, além de utilizar a sintaxe JSON que armazena os dados utilizando pares de chaves/valor. O MongoDB possui dois tipos de construções separadas para topologias multi nodes, replica sets e replica sets distribuídos. Quando se aumenta o número de instancias em uma replica set, aumenta a tolerância a falhas, enquanto aumentar o número de shards pode-se distribuir os dados para processos mongodb separados, o que provê uma escalabilidade horizontal para desempenho de leitura e escrita.
3.1.4 Configurações do Servidor
O sistema operacional utilizado pelo servidor é o linux server, pois processos do Linux rodam separadamente e isso faz com que não haja a necessidade de reiniciar o sistema inteiro caso um deles apresente qualquer problema. Juntamente com o sistema operacional foi utilizado o BIND, um servidor de protocolos DNS mais utilizado na internet, criado para sistemas Unix. Foi instalado o RAID (redundant array of independent disks), que tem como objetivo melhorar o desempenho e segurança dos arquivos. Foram feitas as configurações de RAID (espelhamento) que utiliza um ou mais discos em conjunto para que os dados sejam espelhados em tempo real, mas as funções de segurança é o Iptables, uma ferramenta para criar e administrar regras e assim filtrar pacotes de redes, podendo funcionar baseado no endereço, porta de origem, destino do pacote, prioridade. Para o servidor web, foi utilizado o Nginx que tem como objetivo suportar um tráfego intenso de serviços, por isso utiliza uma arquitetura orientada a eventos, possibilitando uma taxa de conexão maior e de mais eficiência, exigindo menos esforço de hardware.
3.2 TAQUI CLOUD
O TaquiCloud é um sistema de Computação em nuvem, no qual, os usuários fazem o seu cadastro, podendo assim, ter acessibilidade à todas as funções do sistema, que concerne em armazenar os arquivos no servidor, uma vez salvos, eles ficam acessíveis de quaisquer lugar, contando que haja internet.
3.2.1 Descrição do sistema.
O sistema desenvolvido tem como objetivo utilizar ao máximo todas as vantagens da plataforma Node.js. No sistema o usuário tem as funcionalidades básicas de um sistema de armazenamento em nuvem. Sendo implementadas as funcionalidades download e upload. As funções têm a mesma finalidade da forma convencional, no download o usuário pode escolher qual arquivo ele já previamente enviou para o servidor e assim baixá-lo para seu dispositivo e manipulá-lo. Enquanto no upload ele enviará um arquivo de seu dispositivo para o
e/ou diretório, onde a mesma recebe o caminho que será apagado, caso for um diretório ele primeiramente verifica se ele esta vazio, pois por se tratar de um servidor Linux existe esta permissão por definição, caso o diretório esteja vazio a função retorna em callbak para que seja apagada.
Figura 5. Função para deletar arquivo
Quando esse evento é acionado é enviado para o event-loop que monitora e executa esse evento durante o processo, esperando uma resposta do sistema para dar continuidade ao processo, esse conceito de tratamento de evento só é possível graças ao Node.js ser executado em modo single-theread.
3.3 Angular
Diferentemente de outros frameworks JavaScript, ele adota uma abordagem mais ligada à sintaxe HTML, funcionando como uma espécie de extensão da linguagem. Para interação com a plataforma são gerados os JavaScripts então quando necessário é criado este para a interação do script com o HTML. Foi utilizado para fazer a verificação de login no sistema conforme demonstra a Fig. 6.
Fig. 6. Função angular para verificar login Onde o app.controller verifica o login e senha e depois repassa ao HTML a validação ou erro para que o usuário possa ou não acessar sua conta.
3.4 Mongo
O MongoDB foi utilizado para armazenar as informações do usuário como se observa na Fig. 7.
Figura 7. Campos do banco de dados
O MongoDB, no desenvolvimento da aplicação obteve grande desempenho graças a sua estrutura Orientado a objeto, onde a cada novo usuário que é cadastrado no sistema um novo objeto é criado para ele, como pode-se ver na Fig. 8.
Figura 8. Estrutura do banco de dados
Outro conceito que se pode destacar do MongoDB, como já explicado anteriormente é o seu trabalha com o sistema NoSQL.
3.5 Utilização do Taqui Cloud
A ferramenta tem como objetivo o armazenamento em nuvem, e para separação dos arquivos de cada usuário foi utilizado o controle de acesso por usuário, onde o mesmo fará a autenticação com um Login e Senha que serão verificados e seu acesso liberado. Na tela de acesso ele preenchera conforme pedido, ou ate mesmo criar uma nova conta.
Figura 9. Tela de acesso
Se o usuário não estiver cadastrado no sistema este poderá fazer um cadastro para acesso, devendo preencher alguns campos obrigatórios para que a conta seja liberada.
Figura 10. Tela de cadastro
Com acesso concedido antes ou depois do cadastro o usuário poderá ver seus arquivos que já estão armazenados e assim manipulá-los da maneira que desejar, podendo ter as opções de baixar para sua máquina local ou deletar, onde será excluído permanentemente. Os arquivos de cada
O tempo de resposta para a criação de 200.000 arquivos de forma assíncrona foi de 156 milissegundos mostrando um desempenho de pouco mais de 7 vezes maior que de forma síncrona como pode ser comprovado no tempo abaixo (Fig. 15).
Figura 15. Tempo de criação de arquivos de forma assíncrona
Outro comparativo feito foi a leitura destes arquivos utilizando o método a partir de um script para a leitura de todos os 200.000 arquivos. Para melhor análise realizaram-se 3 leituras e uma média entre estas foram comparadas.
Figura 16. Script de leitura síncrona
A média de leitura depois de três análises foi de 26309 milissegundos de forma síncrona como pode ser visto na figura 17.
Figura 17. Tempos de leituras síncrona
Foi realizado o mesmo teste de forma assíncrona utilizando o Script da Fig. 18, sendo o mesmo utilizado na aplicação para leitura do diretório do usuário.
Figura 18. Script de leitura assíncrona
O tempo de leitura destes arquivos foi feita uma média a partir de 3 análises e teve como média 12057 milissegundos, uma diferença de 2 vezes na leitura dos mesmos 200.000 arquivos visto anteriormente. Na Fig. 19 pode-se observar os tempos comprovando as leituras assíncronas.
Figura 19. Tempos de leituras assíncrona
Pode-se ver o grande impacto que a ferramenta trabalha em maiores escalas. Tanto o tempo de leitura quanto de gravação teve um desempenho superior quando foi submetido aos testes assíncrono.
5 CONCLUSÃO
Pode-se concluir que utilizando a ferramenta Node.js, para a criação da aplicação, tem-se um desempenho muito superior comparado com outras ferramentas síncronas convencionais, pois ele se baseia no conceito de programação assíncrona. Tal conceito possibilita o aumento de desempenho na leitura dos arquivos/diretórios, com isso o servidor consegue processar mais requisições simultâneas. Seu aumento no desempenho prove da utilização do tempo ocioso do processamento no servidor, sem interferir no seu SO. Com os testes realizados o tempo de geração e leitura dos arquivos, foi extremamente satisfatório, com isso, a aplicação de armazenamento em nuvem se tornou viável e pensando no atendimento de requisições em larga escala, o seu ganho de processamento e sua alta escalabilidade, fez do Node.js a melhor escolha para este projeto.
5 REFERENCIAS
ANGULAR MATERIAL. Getting started. Disponível em: https://material.angularjs.org/latest/getting-started. Acesso em: 20 ago. 2016.
NODESOURCE. Understanding the node.js event loop. Disponível em: https://nodesource.com/blog/understanding-the-nodejs-event-loop/. Acesso em: 06 ago. 2016.
PABLO JUAN MSP. Configurando ambiente mongodb no windows. Disponível em: <https://pablojuancruz.wordpress.com/2014/09/03/configurando-ambiente-mongodb-no- windows/>. Acesso em: 16 jul. 2016.
RCDEV LABS. 12 feb como criar uma api restfull em nodejs e autenticar usando json web token jwt?. Disponível em: <http://rcdevlabs.github.io/2015/02/12/como-criar-uma-api-restfull- em-nodejs-e-autenticar-usando-json-web-token-jwt/>. Acesso em: 18 ago. 2016.
RUSCHEL, Henrique; ZANOTTO, Mariana Susan; MOTA, Wélton Costa Da. Computação em Nuvem. PPGIA , [S.L], abr. 2010. Disponível em: <http://www.ppgia.pucpr.br/~jamhour/RSS/TCCRSS08B/Welton%20Costa%20da%20Mota%20- %20Artigo.pdf>. Acesso em: 05 ago. 2016.
SILVA, Daniel Da; FRANCO, Carla E. De Castro; Diogo Florenzano Avelino. Implementação de sockets e threads no desenvolvimento de sistemas cliente / servidor: um estudo em VB.NET. Inf aedb , [S.L], abr. 2010. Disponível em: http://inf.aedb.br/seacIV/SI/Artigos/G3.pdf. Acesso em: 05 ago. 2016.
SITEPOINT. Accessing the file system in node.js. Disponível em: https://www.sitepoint.com/accessing-the-file-system-in-node-js/. Acesso em: 23 jul. 2016.
SLIDEPLAYER. Thead. Disponível em: http://slideplayer.com.br/slide/1870257/. Acesso em: 06 ago. 2016.
SOUSA, Flávio R. C.; MACHADO, Leonardo O. Moreira E Javam C.. Computação em Nuvem: Conceitos, Tecnologias,Aplicações e Desafios. Rechargate , [S.L], set. 2015. Disponível em: <https://www.researchgate.net/publication/237644729_Computacao_em_Nuvem_Conceitos_Tecno logias_Aplicacoes_e_Desafios>. Acesso em: 05 ago. 2016.
TABLESS. Raspagem de dados com o node.js. Disponível em: <http://tableless.com.br/raspagem- de-dados-com-node-js/>. Acesso em: 26 set. 2016.
TAURION, Cezar. Transformando o mundo da tecnologia da informação. [S.L.]: Brasport,
TUTORIALS POINT. Node.js file system. Disponível em: http://www.tutorialspoint.com/nodejs/nodejs_file_system.htm. Acesso em: 23 jul. 2016.
UNDERGROUND WEBDEV. Trabalhando com validators no node.js. Disponível em: https://udgwebdev.com/trabalhando-com-validators-no-node-js. Acesso em: 18 ago. 2016.
WBRUNO. Validando formulários apenas com html5. Disponível em: http://wbruno.com.br/html/validando-formularios-apenas-com-html5/. Acesso em: 18 ago. 2016.
YOUTUBE. Node.js - #1 - introdução - rodrigo branas. Disponível em: https://www.youtube.com/watch?v=ktdwdoxql4a. Acesso em: 22 jul. 2016.