SlideShare uma empresa Scribd logo
1 de 17
Baixar para ler offline
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
             FACULDADE DE SISTEMAS DE INFORMAÇÃO




UTILIZANDO JAVASCRIPT NO SERVIDOR PARA CONSTRUIR
APLICAÇÕES EM TEMPO REAL E ALTA CONCORRÊNCIA NA
             INTERNET COM NODE.JS




                               AUTOR

             LUCAS SIMON RODRIGUES MAGALHÃES

MONOGRAFIA DE CONCLUSÃO DO CURSO DE SISTEMAS DE INFORMAÇÃO

                          Orientador(a):
                 Pasteur Ottoni de Miranda Júnior

                Belo Horizonte, 25 de Fevereiro de 2013.
        LUCAS SIMON RODRIGUES MAGALHÃES
UTILIZANDO JAVASCRIPT NO SERVIDOR
           PARA CONSTRUIR
   APLICAÇÕES EM TEMPO REAL E ALTA
CONCORRÊNCIA NA INTERNET COM NODE.JS




                                 Monografia apresentada ao Departamento de
                                 Sistemas de Informação da Pontifícia
                                 Universidade Católica de Minas Gerais, como
                                 exigência parcial para a obtenção do título de
                                 Bacharel em Sistemas de Informação.




        Profª orientadora: Pasteur Ottoni de Miranda Júnior
             Belo Horizonte, 25 de Fevereiro de 201
Sumário
Sumário.......................................................................................................................3
Sumário.......................................................................................................................3
Sumário.......................................................................................................................3
1 Tema..........................................................................................................................4
2 Área de conhecimento............................................................................................7
3 Justificativa..............................................................................................................8
4 Problema a ser abordado.......................................................................................9
5 Objetivos................................................................................................................10
6 Resultados Esperados..........................................................................................11
7 Contextualização...................................................................................................12
8 Metodologia...........................................................................................................13
9 Cronograma...........................................................................................................15
10 Bibliografia...........................................................................................................16
4


1 Tema

     Pretende-se com esta proposta de pesquisa investigar e elaborar aplicações em tempo
real, para a internet, utilizando a linguagem JavaScript no servidor -Node.Js-.
     Atualmente a internet tem crescido mais depressa que o rádio e a televisão. Hoje a Inter-
net, como mídia de comunicação, tem o mais amplo de todos os alcances do que as mídias ci-
tadas anteriormente. E para continuar a oferecer serviços e informações, com rapidez e até
mesmo em tempo real, é necessário nos preocupar com a quantidade de milhões de usuários
simultâneos, que cresce exponencialmente, e vencermos barreiras tecnológicas de escalabili-
dade e desempenho nos servidores.
     Segundo TILKOV (2010) para resolver problemas de que lidam com múltiplas entradas e
saídas (E/S), como manipular múltiplas requisições de clientes em servidores, os programado-
res adotaram utilizar técnicas de programação multithread, ou técnicas de programação para-
lela, dividindo o processamento da aplicação em vários núcleos dos processadores da CPU ou
até mesmo utilizando computação distribuída. Até então este modelo de programação para
atender múltiplas entradas e saídas é fácil de entender, implementar e permite executar os
processos de forma rápida e eficiente. Porém este modelo apresenta algumas falhas, por
exemplo, quando uma thread consome um recurso X de processamento ou operação de entra-
da e saída e em seguida o aplicativo executa uma nova thread que necessita consumir este
mesmo recurso, teremos um deadlock (bloqueio) o qual é necessário esperar a primeira thre-
ad terminar sua execução, liberar o recurso e então prosseguir com o processamento da se-
gunda thread. Como dito por TILKOV:
                         Mesmo que muitos desenvolvedores tenham tido sucesso em usar multithread em
                         aplicações de produção, muitos concordam que a programação multithread é nada
                         fácil. É cheia de problemas que podem ser difíceis de serem isolados e corrigidos,
                         assim como bloqueios e falhas em proteger recursos compartilhados entre as threads.
                         Os desenvolvedores também perdem algum grau de controle quando desenvolvem
                         em multithreading porque o sistema operacional normalmente decide qual thread
                         será executa e por quanto tempo.(TILKOV, 2010, p.80)


     Além do fator descrito anteriormente temos um complemento e um novo problema apre-
sentado por Abernethy:
                         Em linguagens como Java™ e PHP, cada conexão cria uma nova thread que potenci-
                         almente tem um acompanhamento de 2 MB de memória com ele. Em um sistema

     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
5

                         que possui 8 GB de memória RAM, que coloca teoricamente o numero máximo de
                         conexões concorrentes em cerca de 4.000 usuários. Como sua base de clientes au-
                         mentou, se você quiser que seu aplicativo web suporte mais usuários, você tem de
                         adicionar mais e mais servidores. Somando-se a estes custos, temos os possíveis pro -
                         blemas técnicos - um usuário pode usar diferentes servidores para cada requisição,
                         portanto, qualquer recurso compartilhado tem de estar compartilhado entre todos os
                         servidores. Por todas essas razões, o gargalo em toda a arquitetura da aplicação web
                         (incluindo a velocidade de tráfego, velocidade do processador, e velocidade da me -
                         mória) estaria associado ao número máximo de conexões concorrentes que um servi -
                         dor pode manipular.(ABERNETHY, 2011)


     Portanto, vemos que o escalonamento horizontal, adicionando novos servidores, além do
custo altíssimo, torna a arquitetura do sistema complexa pois será necessário acrescentar ser-
vidores de balanceamento, uma rede bem estruturada de um datacenter confiável, capaz de
suportar um alto tráfego e acompanhamento dos processos do sistema de perto para que os
deadlocks sejam consertados em tempo hábil. A utilização de escalonamento vertical, ou me-
lhor, atualização de hardware - colocando mais processadores ou memória - pode inviabilizar
a arquitetura do sistema, visto que teremos uma barreira de hardware, mais especificamente
placas-mãe que não suportam mais de 8 slots de memória ou determinados modelos de me-
mória RAM, suporte a processadores com mais de 7 núcleos. Além dessas limitações tecnoló-
gicas, temos o agravante do alto custo para atualizar este hardware, processadores com 7 nú-
cleos são caros e dependendo dos casos é necessário trocar todo o equipamento – hardware -
para garantir o devido funcionamento dos componentes.
     Pelos problemas citados acima surge a necessidade de resolver este problema, em nível
de software, que permita receber um grande número de conexões simultâneas nos servidores,
capaz de ser escalável e consumir menores índices de memória RAM. Um paradigma adotado
para esta solução é a programação orientada a eventos, onde tudo gira em torno de eventos,
indicando que exite um produtor do evento e um consumidor daquele evento. (Junior, 2012)
     Pesquisando sobre as linguagens que suportam o paradigma de programação orientada a
eventos, encontramos o JavaScript como linguagem de programação que fornece o modelo de
eventos assíncronos, funções anônimas e callbacks. Como JUNIOR citou um programa as-
síncrono pode ser exemplificado de tal forma:
                         Já em um programa assíncrono, ao ser feita uma requisição a um banco de dados,
                         será especificado o que deve ser feito com os resultados da requisição. O programa
                         não espera a finalização da requisição, e passa para outras atividades. E apenas quan-
                         do o resultado é retornado, a lógica de manipulação dos resultados que foi especifi -
     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
6

                         cado no momento da requisição é executada [11]. A essa lógica que é executada
                         após a finalização da requisição dá-se o nome de callback.(JUNIOR, 2012, p.2)
     A partir dessa necessidade descrita em paragráfos anteriores surge o ambiente de desen-
volvimento Node.Js, que é melhor descrito por JUNIOR at. al como uma plataforma cujo o
objetivo é a fácil construção de rápidas e escaláveis aplicações de rede. Para isto o Node.Js
emprega o paradigma de programação orientada a eventos utilizando o JavaScript Engine V8
do Google, operações de entradas e saídas em eventos (assíncronos) e não bloqueantes. Abe-
nerthy cita que:
                         Ao invés de criar novas threads no sistema operacional para cada conexão ( e alocar
                         a memória RAM que acompanha com as threads), cada conexão dispara um evento
                         executado no processo motor do Node.JS. Node também afirma que ele nunca irá ter
                         deadlocks -impasse-, já que bloqueios não são permitidos, e não bloqueia direta -
                         mente chamadas de entrada e saídas. Node.Js afirma que um servidor pode suportar
                         dezenas de milhares de conexões simultâneas.(ABENERTHY, 2011)


     Isso ocorre porque ao ser invocado um nó de servidor de processos (node server
process), ele roda apenas em uma thread que suporta um alto número de conexões, isso é pos-
sível, pois há um loop implícito que cobre o código, esse loop é denominado de event loop e
tem como função esperar os eventos e repassá-los ao manipulador de eventos. (OLIVEIRA,
2012)
     Por fim, buscamos com o Node.Js, o qual será a base para esta proposta de pesquisa, de-
monstrar uma aplicação Web capaz de mostrar, em tempo real, a localização de pessoas ou
dispositivos móveis através das coordenadas de latitude e longitude utilizando o paradigma de
orientação a eventos, com alta concorrência de conexões através desta plataforma de desen-
volvimento.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
7


2 Área de conhecimento

     O trabalho se insere na área de engenharia de software, pois propomos solucionar proble-
mas de rede de computadores (altos números de conexões) e escalabilidade (infraestrutura)
com técnicas de programação de software orientadas a eventos.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
8


3 Justificativa
     Acreditamos que ao estudar técnicas de programação orientadas por eventos no Node.Js
possa contribuir com o avanço dessa tecnologia e a forma de comunicação da informação
para a população. Hoje, temos a necessidade de obtermos informações em tempo real para to-
mada de decisões eficientes dos nossos negócios e ao processo de ensino e aprendizagem no
setor tecnológico.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
9


4 Problema a ser abordado
     No cenário atual, em termos de desenvolvimento web, para garantirmos informações em
tempo real é necessário investimento alto em infraestrutura e largura de banda para receber e
enviar respostas aos clientes. Uma maneira de fazer um simples sistema em tempo real é utili-
zar chamada Ajax a cada 5 segundos para atualizar os dados. Esta não é a maneira mais inteli-
gente de se realizar isso, porque continuaremos a ter consumo de memória no servidor e sere-
mos limitados pelo tamanho da memória RAM.
     Como exemplo, durante o desenvolvimento desta pesquisa, propomos desenvolver um
aplicativo em Node.JS capaz de receber os dados da localização (latitude e longitude) de um
celular ou qualquer outro dispositivo e atualizar sua posição em tempo real no Google Maps,
serviço do Google. Este exemplo, similar à um GPS, tem como base os sistemas de rastrea-
mento veiculares que traçam uma rota pelo caminho percorrido do veículo e que necessitam
recarregar a página para visualizar sua posição atual.
     Não pretendemos fazer um sistema complexo como os já existentes no mercado de rastre-
amento veicular, mas sim um aplicativo simples capaz de aceitar inúmeras conexões e visuali-
zar os resultados em tempo real. Com isso atingiremos nosso objetivo de demonstrar a capaci-
dade do Node.Js de resolver este problema de conexões em servidores .




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
10


5 Objetivos

     Intentamos com esta pesquisa investigar e demonstrar como o paradigma da linguagem
orientada a eventos no Node.Js é capaz de realizar funcionalidades em tempo real em conjun-
to com a biblioteca JavaScript Socket.Io.
     Um segundo objetivo que procuramos demonstrar é a capacidade do Node.Js responder a
milhares de requisições com um simples servidor web, sem a necessidade de uma infraestru-
tura (escalonável) de alta tecnologia.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
11


6 Resultados Esperados

     Apresentar o software executando corretamente, demonstrando mudanças de comporta-
mento e execuções no processamento em tempo real para os entrevistadores através de uma
simples aplicação com o poucos usuários conectados a aplicação. Em seguida, demonstrar/si-
mular uma quantidade massiva de usuários conectados ao servidor tendo respostas as requisi-
ções. Para isso, utilizar simuladores de teste de carga com uma quantidade alta de conexões
entrantes e exibir os testes de processamento/benchmark dos servidores e da aplicação.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
12


7 Contextualização
     Utilizaremos o livro Getting Started with GEO, CouchDB, and Node.js, de Mick Thomp-
son, como base do desenvolvimento do aplicativo e da proposta de pesquisa que se segue pois
ele se propõe a criar um aplicativo resgatando os dados da geo localização e API’s de dispo-
sitivos móveis e então manipular esses dados com o conjunto de ferramentas a seguir: No-
de.Js, banco de dados CouchDB, GeoJSON, Geohash¹, e GDAL ( Geospatial Data Abstracti-
on Library).
     Também utilizaremos outras referências bibliográficas para assegurar o entendimento e a
qualidade do servidor Node.Js, como What is Node? (Brett McLaughlin), Node: Up and Run-
ning (Tom Hughes-Croucher e Mike Wilson, 2012), Learning Node (Shelley Powers, 2012) e
em particular Construindo aplicações Node com MongoDB e Backbone (Mike Wilson, 2013)
que possui demonstrações do uso da biblioteca JavaScript Socket.Io responsável por aplicati-
vos em tempo real nos navegadores e dispositivos móveis.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
13


8 Metodologia

      Iremos dividir o processo de desenvolvimento da arquitetura e do sistema como um todo
em cinco etapas.
      A primeira etapa, consistem em, desenvolver um sistema em Node.Js, utilizando o siste-
ma arquitetural RESTFul. Seguindo o conceito da arquitetura REST, iremos descrever atra-
vés de API’s as URI’s ( Identificador Uniforme de Recurso) de acesso e manipulação do(s)
recurso(s), que em primeiro momento será somente identificado como dispositivos móveis.
Como base inicial para o projeto proposto, teremos uma URI para cadastrar os celulares que
estão utilizando o sistema, salvando os dados em um banco de dados NoSQL, a ser definido.
Outra nova URI será utilizada com o objetivo de identificar quando o aplicativo Android ini-
ciar e transmitir os dados iniciais da geo localização do dispositivo, salvando os dados no
banco. E por fim e o mais importante, criar uma URI capaz de receber as coordenadas do dis-
positivo móvel, e atualizar as coordenadas do dispositivo móvel no banco de dados de acordo
com o id daquele dispositivo, data timestamp e claro as coordenadas.
      Feito todo o desenvolvimento em ambiente de desenvolvimento, iremos hospedar o siste-
ma Node.Js em um servidor web em produção.
      A segunda etapa, compreende em construir uma aplicação Android utilizando sua API in-
terna de geo localização para coletar os dados e transmiti-los para o servidor Node.Js criado
na etapa anterior. Descrevendo brevemente o funcionamento deste aplicativo, teremos um en-
vio de dados de latitude, longitude, e os dados do aparelho assim que o aplicativo iniciado. E
a cada mudança das coordenadas na API de geo localização os dados serão transmitidos para
o servidor com a finalidade de atualização das coordenadas conforme descrito na etapa anteri-
or.
      Na terceira etapa iremos construir a visão exibindo e traduzindo os dados coletado pelo
dispositivo móvel e renderizar no Google Maps.
      A quarta etapa será os testes do sistema como um todo. Primeiramente iremos distribuir o
aplicativo Android para amigos e familiares, que possuem um smartphone com este sistema
operacional , e estejam disponíveis para contribuir com os testes. Terá como pré-requisito um
plano de pacote de dados para transmitir os dados. Com esta etapa concluiremos o nosso pri-
meiro objetivo.



      ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
14




     A quinta etapa, consiste em realizar um teste de carga no servidor Node.Js simulando a
conexão de vários dispositivos móveis, em coordenadas aleatórias, dentro de um raio pré fixa-
do. Em seguida atualizar as coordenadas a cada 7 segundos, por exemplo, para atingir o se-
gundo objetivo. Com a simulação citada poderemos quantificar a porcentagem uso da CPU e
da memória RAM no servidor e tê-los como base de prova do Node.Js e seu propósito.




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
15


9 Cronograma

Atividade   Produto     Resposável                     Entrega            Data         Valor
Alocação de - Cronogra- Coordenação                    Disponível         De 04/2/2013 N/A
alunos e pla- ma        do    se- de TCC               no SGA             a 15/02/2013
nejamento do mestre
semestre          - Alunos alo-
              cados
1.   Elabora- - Proposta de Aluno, sob a Em                      papel Até                     20
ção da pro- monografia,             supervisão         (orientador)       01/04/2013
posta de mo- cf. modelo             do orientador      e no SGA
nografia
3. Redação -           Resenhas Aluno, sob a N/A                          Até                  20
de   resenhas (mínimo          de supervisão                              06/05/2013
de textos in- 5), cf. mode- do orientador
dicados pelo lo
orientador
4. Produção - Monografia Aluno, sob a Em                         papel Até                     60
da versão 1 versão 1, for- supervisão                  (orientador)       10/06/2013
da monogra- matada             no do orientador        e no SGA
fia (referen- padrão PUC
cial teórico e Minas.
metodologia)




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
16


10 Bibliografia


ABERNETHY,Michael. JustwhatisNode.js?. Abril/2011. Disponível em: <http://www.ibm.-
com/developerworks/library/os-nodejs/index.html> Acesso em: 29 MAR. 2013.


Construindo aplicações Node com MongoDB e Backbone, de Mike Wilson (O'Reilly). Copy-
right 2013 Mike Wilson, 978-1-449-33739-1


CouchDB – Apache CouchDB. Disponível em: <http://couchdb.apache.org/> Acesso em: 30
MAR. 2013


Gdal - Geospatial Data Abstraction Library. Disponível em: <http://www.gdal.org/> Acesso
em: 30 MAR. 2013


GeoJson - JSON Geometry and Feature Description. Disponível em: <http://www.geoj-
son.org/> Acesso em: 30 MAR. 2013


Getting Started with GEO, CouchDB, and Node.js, de Mick Thompson (O'Reilly). Copyright
2011,                     Mick                       Thompson,                        978-1-4493-0752-3
http://shop.oreilly.com/product/0636920020806.do


JAVASCRIPT V8. Disponível em <https://developers.google.com/v8/> Acesso em: 25 MAR.
2013


JUNIOR, Francisco de Assis Ribeiro. Programação Orientada a Eventos no lado do servidor
utilizando Node.js. 2012. Disponível em: <http://www.infobrasil.inf.br/userfiles/16-S3-3-
97136-Programa%C3%A7%C3%A3o%20Orientada___.pdf > Acesso em: 20 ABR. 2013.


Learning Node, de Shelley Powers (O'Reilly). Copyright 2012, Shelley Powers, 978-1-449-
32307-3



     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
17


Node: Up and Running, de Tom Hughes-Croucher and Mike Wilson (O'Reilly). Copyright
2012, Tom Hughes-Croucher and Mike Wilson, 978-1-449-39858-3


OLIVEIRA, Rômulo Reis. Desenvolvimento de jogos eletrônicos online em tempo real, para
múltiplos jogadores e multiplataformas. 2012. 80f. Monografia (Conclusão do curso) - Insti-
tuto Federal Sul-Rio-Grandense, Campus Passo Fundo, Passo Fundo.


Socket.Io. Disponível em: <http://socket.io/> Acesso em: 30 MAR. 2013


Tilkov. S, S. “Node.js: Using Javascript to Build Gugh Performance Network Programs”.
Internet Computing IEEE, 2010.


What is Node? de Brett McLaughlin Published by O'Reilly Media, Inc., 1005 Gravenstein
Highway North, Sebastopol, CA 95472, 978-1-449-31005-9




     ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu-
de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode
então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.

Mais conteúdo relacionado

Destaque

Aula de reposição 8,9,10
Aula de reposição 8,9,10Aula de reposição 8,9,10
Aula de reposição 8,9,10Paulo Mattos
 
Pequeño proyecto unidad 6 de lengua castellana
Pequeño proyecto unidad 6 de lengua castellanaPequeño proyecto unidad 6 de lengua castellana
Pequeño proyecto unidad 6 de lengua castellanaEDUCACIÓN TOLEDO
 
子报告三:杭州市单向交通实行效果调查问卷
子报告三:杭州市单向交通实行效果调查问卷子报告三:杭州市单向交通实行效果调查问卷
子报告三:杭州市单向交通实行效果调查问卷Yunhe Ding
 
II Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;Alexandria
II Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;AlexandriaII Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;Alexandria
II Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;Alexandriainsllicamunt2
 

Destaque (9)

Aula de reposição 8,9,10
Aula de reposição 8,9,10Aula de reposição 8,9,10
Aula de reposição 8,9,10
 
Eqipo
EqipoEqipo
Eqipo
 
Pequeño proyecto unidad 6 de lengua castellana
Pequeño proyecto unidad 6 de lengua castellanaPequeño proyecto unidad 6 de lengua castellana
Pequeño proyecto unidad 6 de lengua castellana
 
子报告三:杭州市单向交通实行效果调查问卷
子报告三:杭州市单向交通实行效果调查问卷子报告三:杭州市单向交通实行效果调查问卷
子报告三:杭州市单向交通实行效果调查问卷
 
II Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;Alexandria
II Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;AlexandriaII Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;Alexandria
II Concurs de Fotografia Matemàtica a l&rsquo;INS Hipàtia d&rsquo;Alexandria
 
Encuesta al director
Encuesta al directorEncuesta al director
Encuesta al director
 
3.2 síntesis fin
3.2 síntesis fin3.2 síntesis fin
3.2 síntesis fin
 
A12v17n3
A12v17n3A12v17n3
A12v17n3
 
Raquel!
Raquel!Raquel!
Raquel!
 

Semelhante a Utilizando JavaScript no servidor para construir aplicações em tempo real com Node.js

Relatorio de estagio tecnico em informatica
Relatorio de estagio tecnico em informaticaRelatorio de estagio tecnico em informatica
Relatorio de estagio tecnico em informaticaLucianaFerreira163
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de MicroservicesDeep Tech Brasil
 
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4Adilson Nascimento
 
Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1
Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1
Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1Denis Storti da Silva
 
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...DouglasAmmirantedaCu
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...Paulo Steinhauser
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...Paulo Steinhauser
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Flávio Lisboa
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosCharles Fortes
 
Caracterizacao de sistemas distribuidos
Caracterizacao de sistemas distribuidosCaracterizacao de sistemas distribuidos
Caracterizacao de sistemas distribuidosPortal_do_Estudante_SD
 
ThingProvider-Proposal
ThingProvider-ProposalThingProvider-Proposal
ThingProvider-ProposalKevin Martins
 
Artefato final
Artefato finalArtefato final
Artefato finalrafahreis
 
Artefato final PETIC
Artefato final PETICArtefato final PETIC
Artefato final PETICLucas Aquino
 
Apresentação Monografia
Apresentação MonografiaApresentação Monografia
Apresentação MonografiaLeon Homar
 
201406Carvalho
201406Carvalho201406Carvalho
201406CarvalhoAfonso Pra
 

Semelhante a Utilizando JavaScript no servidor para construir aplicações em tempo real com Node.js (20)

Relatorio de estagio tecnico em informatica
Relatorio de estagio tecnico em informaticaRelatorio de estagio tecnico em informatica
Relatorio de estagio tecnico em informatica
 
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
[DTC21] Thiago Lima - Do Zero ao 100 no Mundo de Microservices
 
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
Portfolio Grupo 4 ADS Unopar Desafios1-2-3-4
 
Protocolos logicos de_comunicacao
Protocolos logicos de_comunicacaoProtocolos logicos de_comunicacao
Protocolos logicos de_comunicacao
 
World Wide Web
World Wide WebWorld Wide Web
World Wide Web
 
Net framework
 Net framework Net framework
Net framework
 
Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1
Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1
Monografia_AWS_ProtocolosIOT_DenisStorti_v1.1
 
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
Servidor com processamento paralelo utilizando CUDA aplicado em uma urna elet...
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
 
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
E-OBRAS: Proposta de Desenvolvimento do Protótipo de Sistema para Secretarias...
 
Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3Escalabilidade via Software no ExpressoV3
Escalabilidade via Software no ExpressoV3
 
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e ExercíciosSistemas Operacionais - Aula 4 - Revisão e Exercícios
Sistemas Operacionais - Aula 4 - Revisão e Exercícios
 
Caracterizacao de sistemas distribuidos
Caracterizacao de sistemas distribuidosCaracterizacao de sistemas distribuidos
Caracterizacao de sistemas distribuidos
 
ThingProvider-Proposal
ThingProvider-ProposalThingProvider-Proposal
ThingProvider-Proposal
 
Artefato final
Artefato finalArtefato final
Artefato final
 
Artefato final PETIC
Artefato final PETICArtefato final PETIC
Artefato final PETIC
 
Semac
SemacSemac
Semac
 
Tcc plataforma telemedicina de baixo custo
Tcc plataforma telemedicina de baixo custoTcc plataforma telemedicina de baixo custo
Tcc plataforma telemedicina de baixo custo
 
Apresentação Monografia
Apresentação MonografiaApresentação Monografia
Apresentação Monografia
 
201406Carvalho
201406Carvalho201406Carvalho
201406Carvalho
 

Utilizando JavaScript no servidor para construir aplicações em tempo real com Node.js

  • 1. PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS FACULDADE DE SISTEMAS DE INFORMAÇÃO UTILIZANDO JAVASCRIPT NO SERVIDOR PARA CONSTRUIR APLICAÇÕES EM TEMPO REAL E ALTA CONCORRÊNCIA NA INTERNET COM NODE.JS AUTOR LUCAS SIMON RODRIGUES MAGALHÃES MONOGRAFIA DE CONCLUSÃO DO CURSO DE SISTEMAS DE INFORMAÇÃO Orientador(a): Pasteur Ottoni de Miranda Júnior Belo Horizonte, 25 de Fevereiro de 2013. LUCAS SIMON RODRIGUES MAGALHÃES
  • 2. UTILIZANDO JAVASCRIPT NO SERVIDOR PARA CONSTRUIR APLICAÇÕES EM TEMPO REAL E ALTA CONCORRÊNCIA NA INTERNET COM NODE.JS Monografia apresentada ao Departamento de Sistemas de Informação da Pontifícia Universidade Católica de Minas Gerais, como exigência parcial para a obtenção do título de Bacharel em Sistemas de Informação. Profª orientadora: Pasteur Ottoni de Miranda Júnior Belo Horizonte, 25 de Fevereiro de 201
  • 3. Sumário Sumário.......................................................................................................................3 Sumário.......................................................................................................................3 Sumário.......................................................................................................................3 1 Tema..........................................................................................................................4 2 Área de conhecimento............................................................................................7 3 Justificativa..............................................................................................................8 4 Problema a ser abordado.......................................................................................9 5 Objetivos................................................................................................................10 6 Resultados Esperados..........................................................................................11 7 Contextualização...................................................................................................12 8 Metodologia...........................................................................................................13 9 Cronograma...........................................................................................................15 10 Bibliografia...........................................................................................................16
  • 4. 4 1 Tema Pretende-se com esta proposta de pesquisa investigar e elaborar aplicações em tempo real, para a internet, utilizando a linguagem JavaScript no servidor -Node.Js-. Atualmente a internet tem crescido mais depressa que o rádio e a televisão. Hoje a Inter- net, como mídia de comunicação, tem o mais amplo de todos os alcances do que as mídias ci- tadas anteriormente. E para continuar a oferecer serviços e informações, com rapidez e até mesmo em tempo real, é necessário nos preocupar com a quantidade de milhões de usuários simultâneos, que cresce exponencialmente, e vencermos barreiras tecnológicas de escalabili- dade e desempenho nos servidores. Segundo TILKOV (2010) para resolver problemas de que lidam com múltiplas entradas e saídas (E/S), como manipular múltiplas requisições de clientes em servidores, os programado- res adotaram utilizar técnicas de programação multithread, ou técnicas de programação para- lela, dividindo o processamento da aplicação em vários núcleos dos processadores da CPU ou até mesmo utilizando computação distribuída. Até então este modelo de programação para atender múltiplas entradas e saídas é fácil de entender, implementar e permite executar os processos de forma rápida e eficiente. Porém este modelo apresenta algumas falhas, por exemplo, quando uma thread consome um recurso X de processamento ou operação de entra- da e saída e em seguida o aplicativo executa uma nova thread que necessita consumir este mesmo recurso, teremos um deadlock (bloqueio) o qual é necessário esperar a primeira thre- ad terminar sua execução, liberar o recurso e então prosseguir com o processamento da se- gunda thread. Como dito por TILKOV: Mesmo que muitos desenvolvedores tenham tido sucesso em usar multithread em aplicações de produção, muitos concordam que a programação multithread é nada fácil. É cheia de problemas que podem ser difíceis de serem isolados e corrigidos, assim como bloqueios e falhas em proteger recursos compartilhados entre as threads. Os desenvolvedores também perdem algum grau de controle quando desenvolvem em multithreading porque o sistema operacional normalmente decide qual thread será executa e por quanto tempo.(TILKOV, 2010, p.80) Além do fator descrito anteriormente temos um complemento e um novo problema apre- sentado por Abernethy: Em linguagens como Java™ e PHP, cada conexão cria uma nova thread que potenci- almente tem um acompanhamento de 2 MB de memória com ele. Em um sistema ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 5. 5 que possui 8 GB de memória RAM, que coloca teoricamente o numero máximo de conexões concorrentes em cerca de 4.000 usuários. Como sua base de clientes au- mentou, se você quiser que seu aplicativo web suporte mais usuários, você tem de adicionar mais e mais servidores. Somando-se a estes custos, temos os possíveis pro - blemas técnicos - um usuário pode usar diferentes servidores para cada requisição, portanto, qualquer recurso compartilhado tem de estar compartilhado entre todos os servidores. Por todas essas razões, o gargalo em toda a arquitetura da aplicação web (incluindo a velocidade de tráfego, velocidade do processador, e velocidade da me - mória) estaria associado ao número máximo de conexões concorrentes que um servi - dor pode manipular.(ABERNETHY, 2011) Portanto, vemos que o escalonamento horizontal, adicionando novos servidores, além do custo altíssimo, torna a arquitetura do sistema complexa pois será necessário acrescentar ser- vidores de balanceamento, uma rede bem estruturada de um datacenter confiável, capaz de suportar um alto tráfego e acompanhamento dos processos do sistema de perto para que os deadlocks sejam consertados em tempo hábil. A utilização de escalonamento vertical, ou me- lhor, atualização de hardware - colocando mais processadores ou memória - pode inviabilizar a arquitetura do sistema, visto que teremos uma barreira de hardware, mais especificamente placas-mãe que não suportam mais de 8 slots de memória ou determinados modelos de me- mória RAM, suporte a processadores com mais de 7 núcleos. Além dessas limitações tecnoló- gicas, temos o agravante do alto custo para atualizar este hardware, processadores com 7 nú- cleos são caros e dependendo dos casos é necessário trocar todo o equipamento – hardware - para garantir o devido funcionamento dos componentes. Pelos problemas citados acima surge a necessidade de resolver este problema, em nível de software, que permita receber um grande número de conexões simultâneas nos servidores, capaz de ser escalável e consumir menores índices de memória RAM. Um paradigma adotado para esta solução é a programação orientada a eventos, onde tudo gira em torno de eventos, indicando que exite um produtor do evento e um consumidor daquele evento. (Junior, 2012) Pesquisando sobre as linguagens que suportam o paradigma de programação orientada a eventos, encontramos o JavaScript como linguagem de programação que fornece o modelo de eventos assíncronos, funções anônimas e callbacks. Como JUNIOR citou um programa as- síncrono pode ser exemplificado de tal forma: Já em um programa assíncrono, ao ser feita uma requisição a um banco de dados, será especificado o que deve ser feito com os resultados da requisição. O programa não espera a finalização da requisição, e passa para outras atividades. E apenas quan- do o resultado é retornado, a lógica de manipulação dos resultados que foi especifi - ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 6. 6 cado no momento da requisição é executada [11]. A essa lógica que é executada após a finalização da requisição dá-se o nome de callback.(JUNIOR, 2012, p.2) A partir dessa necessidade descrita em paragráfos anteriores surge o ambiente de desen- volvimento Node.Js, que é melhor descrito por JUNIOR at. al como uma plataforma cujo o objetivo é a fácil construção de rápidas e escaláveis aplicações de rede. Para isto o Node.Js emprega o paradigma de programação orientada a eventos utilizando o JavaScript Engine V8 do Google, operações de entradas e saídas em eventos (assíncronos) e não bloqueantes. Abe- nerthy cita que: Ao invés de criar novas threads no sistema operacional para cada conexão ( e alocar a memória RAM que acompanha com as threads), cada conexão dispara um evento executado no processo motor do Node.JS. Node também afirma que ele nunca irá ter deadlocks -impasse-, já que bloqueios não são permitidos, e não bloqueia direta - mente chamadas de entrada e saídas. Node.Js afirma que um servidor pode suportar dezenas de milhares de conexões simultâneas.(ABENERTHY, 2011) Isso ocorre porque ao ser invocado um nó de servidor de processos (node server process), ele roda apenas em uma thread que suporta um alto número de conexões, isso é pos- sível, pois há um loop implícito que cobre o código, esse loop é denominado de event loop e tem como função esperar os eventos e repassá-los ao manipulador de eventos. (OLIVEIRA, 2012) Por fim, buscamos com o Node.Js, o qual será a base para esta proposta de pesquisa, de- monstrar uma aplicação Web capaz de mostrar, em tempo real, a localização de pessoas ou dispositivos móveis através das coordenadas de latitude e longitude utilizando o paradigma de orientação a eventos, com alta concorrência de conexões através desta plataforma de desen- volvimento. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 7. 7 2 Área de conhecimento O trabalho se insere na área de engenharia de software, pois propomos solucionar proble- mas de rede de computadores (altos números de conexões) e escalabilidade (infraestrutura) com técnicas de programação de software orientadas a eventos. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 8. 8 3 Justificativa Acreditamos que ao estudar técnicas de programação orientadas por eventos no Node.Js possa contribuir com o avanço dessa tecnologia e a forma de comunicação da informação para a população. Hoje, temos a necessidade de obtermos informações em tempo real para to- mada de decisões eficientes dos nossos negócios e ao processo de ensino e aprendizagem no setor tecnológico. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 9. 9 4 Problema a ser abordado No cenário atual, em termos de desenvolvimento web, para garantirmos informações em tempo real é necessário investimento alto em infraestrutura e largura de banda para receber e enviar respostas aos clientes. Uma maneira de fazer um simples sistema em tempo real é utili- zar chamada Ajax a cada 5 segundos para atualizar os dados. Esta não é a maneira mais inteli- gente de se realizar isso, porque continuaremos a ter consumo de memória no servidor e sere- mos limitados pelo tamanho da memória RAM. Como exemplo, durante o desenvolvimento desta pesquisa, propomos desenvolver um aplicativo em Node.JS capaz de receber os dados da localização (latitude e longitude) de um celular ou qualquer outro dispositivo e atualizar sua posição em tempo real no Google Maps, serviço do Google. Este exemplo, similar à um GPS, tem como base os sistemas de rastrea- mento veiculares que traçam uma rota pelo caminho percorrido do veículo e que necessitam recarregar a página para visualizar sua posição atual. Não pretendemos fazer um sistema complexo como os já existentes no mercado de rastre- amento veicular, mas sim um aplicativo simples capaz de aceitar inúmeras conexões e visuali- zar os resultados em tempo real. Com isso atingiremos nosso objetivo de demonstrar a capaci- dade do Node.Js de resolver este problema de conexões em servidores . ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 10. 10 5 Objetivos Intentamos com esta pesquisa investigar e demonstrar como o paradigma da linguagem orientada a eventos no Node.Js é capaz de realizar funcionalidades em tempo real em conjun- to com a biblioteca JavaScript Socket.Io. Um segundo objetivo que procuramos demonstrar é a capacidade do Node.Js responder a milhares de requisições com um simples servidor web, sem a necessidade de uma infraestru- tura (escalonável) de alta tecnologia. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 11. 11 6 Resultados Esperados Apresentar o software executando corretamente, demonstrando mudanças de comporta- mento e execuções no processamento em tempo real para os entrevistadores através de uma simples aplicação com o poucos usuários conectados a aplicação. Em seguida, demonstrar/si- mular uma quantidade massiva de usuários conectados ao servidor tendo respostas as requisi- ções. Para isso, utilizar simuladores de teste de carga com uma quantidade alta de conexões entrantes e exibir os testes de processamento/benchmark dos servidores e da aplicação. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 12. 12 7 Contextualização Utilizaremos o livro Getting Started with GEO, CouchDB, and Node.js, de Mick Thomp- son, como base do desenvolvimento do aplicativo e da proposta de pesquisa que se segue pois ele se propõe a criar um aplicativo resgatando os dados da geo localização e API’s de dispo- sitivos móveis e então manipular esses dados com o conjunto de ferramentas a seguir: No- de.Js, banco de dados CouchDB, GeoJSON, Geohash¹, e GDAL ( Geospatial Data Abstracti- on Library). Também utilizaremos outras referências bibliográficas para assegurar o entendimento e a qualidade do servidor Node.Js, como What is Node? (Brett McLaughlin), Node: Up and Run- ning (Tom Hughes-Croucher e Mike Wilson, 2012), Learning Node (Shelley Powers, 2012) e em particular Construindo aplicações Node com MongoDB e Backbone (Mike Wilson, 2013) que possui demonstrações do uso da biblioteca JavaScript Socket.Io responsável por aplicati- vos em tempo real nos navegadores e dispositivos móveis. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 13. 13 8 Metodologia Iremos dividir o processo de desenvolvimento da arquitetura e do sistema como um todo em cinco etapas. A primeira etapa, consistem em, desenvolver um sistema em Node.Js, utilizando o siste- ma arquitetural RESTFul. Seguindo o conceito da arquitetura REST, iremos descrever atra- vés de API’s as URI’s ( Identificador Uniforme de Recurso) de acesso e manipulação do(s) recurso(s), que em primeiro momento será somente identificado como dispositivos móveis. Como base inicial para o projeto proposto, teremos uma URI para cadastrar os celulares que estão utilizando o sistema, salvando os dados em um banco de dados NoSQL, a ser definido. Outra nova URI será utilizada com o objetivo de identificar quando o aplicativo Android ini- ciar e transmitir os dados iniciais da geo localização do dispositivo, salvando os dados no banco. E por fim e o mais importante, criar uma URI capaz de receber as coordenadas do dis- positivo móvel, e atualizar as coordenadas do dispositivo móvel no banco de dados de acordo com o id daquele dispositivo, data timestamp e claro as coordenadas. Feito todo o desenvolvimento em ambiente de desenvolvimento, iremos hospedar o siste- ma Node.Js em um servidor web em produção. A segunda etapa, compreende em construir uma aplicação Android utilizando sua API in- terna de geo localização para coletar os dados e transmiti-los para o servidor Node.Js criado na etapa anterior. Descrevendo brevemente o funcionamento deste aplicativo, teremos um en- vio de dados de latitude, longitude, e os dados do aparelho assim que o aplicativo iniciado. E a cada mudança das coordenadas na API de geo localização os dados serão transmitidos para o servidor com a finalidade de atualização das coordenadas conforme descrito na etapa anteri- or. Na terceira etapa iremos construir a visão exibindo e traduzindo os dados coletado pelo dispositivo móvel e renderizar no Google Maps. A quarta etapa será os testes do sistema como um todo. Primeiramente iremos distribuir o aplicativo Android para amigos e familiares, que possuem um smartphone com este sistema operacional , e estejam disponíveis para contribuir com os testes. Terá como pré-requisito um plano de pacote de dados para transmitir os dados. Com esta etapa concluiremos o nosso pri- meiro objetivo. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 14. 14 A quinta etapa, consiste em realizar um teste de carga no servidor Node.Js simulando a conexão de vários dispositivos móveis, em coordenadas aleatórias, dentro de um raio pré fixa- do. Em seguida atualizar as coordenadas a cada 7 segundos, por exemplo, para atingir o se- gundo objetivo. Com a simulação citada poderemos quantificar a porcentagem uso da CPU e da memória RAM no servidor e tê-los como base de prova do Node.Js e seu propósito. ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 15. 15 9 Cronograma Atividade Produto Resposável Entrega Data Valor Alocação de - Cronogra- Coordenação Disponível De 04/2/2013 N/A alunos e pla- ma do se- de TCC no SGA a 15/02/2013 nejamento do mestre semestre - Alunos alo- cados 1. Elabora- - Proposta de Aluno, sob a Em papel Até 20 ção da pro- monografia, supervisão (orientador) 01/04/2013 posta de mo- cf. modelo do orientador e no SGA nografia 3. Redação - Resenhas Aluno, sob a N/A Até 20 de resenhas (mínimo de supervisão 06/05/2013 de textos in- 5), cf. mode- do orientador dicados pelo lo orientador 4. Produção - Monografia Aluno, sob a Em papel Até 60 da versão 1 versão 1, for- supervisão (orientador) 10/06/2013 da monogra- matada no do orientador e no SGA fia (referen- padrão PUC cial teórico e Minas. metodologia) ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 16. 16 10 Bibliografia ABERNETHY,Michael. JustwhatisNode.js?. Abril/2011. Disponível em: <http://www.ibm.- com/developerworks/library/os-nodejs/index.html> Acesso em: 29 MAR. 2013. Construindo aplicações Node com MongoDB e Backbone, de Mike Wilson (O'Reilly). Copy- right 2013 Mike Wilson, 978-1-449-33739-1 CouchDB – Apache CouchDB. Disponível em: <http://couchdb.apache.org/> Acesso em: 30 MAR. 2013 Gdal - Geospatial Data Abstraction Library. Disponível em: <http://www.gdal.org/> Acesso em: 30 MAR. 2013 GeoJson - JSON Geometry and Feature Description. Disponível em: <http://www.geoj- son.org/> Acesso em: 30 MAR. 2013 Getting Started with GEO, CouchDB, and Node.js, de Mick Thompson (O'Reilly). Copyright 2011, Mick Thompson, 978-1-4493-0752-3 http://shop.oreilly.com/product/0636920020806.do JAVASCRIPT V8. Disponível em <https://developers.google.com/v8/> Acesso em: 25 MAR. 2013 JUNIOR, Francisco de Assis Ribeiro. Programação Orientada a Eventos no lado do servidor utilizando Node.js. 2012. Disponível em: <http://www.infobrasil.inf.br/userfiles/16-S3-3- 97136-Programa%C3%A7%C3%A3o%20Orientada___.pdf > Acesso em: 20 ABR. 2013. Learning Node, de Shelley Powers (O'Reilly). Copyright 2012, Shelley Powers, 978-1-449- 32307-3 ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.
  • 17. 17 Node: Up and Running, de Tom Hughes-Croucher and Mike Wilson (O'Reilly). Copyright 2012, Tom Hughes-Croucher and Mike Wilson, 978-1-449-39858-3 OLIVEIRA, Rômulo Reis. Desenvolvimento de jogos eletrônicos online em tempo real, para múltiplos jogadores e multiplataformas. 2012. 80f. Monografia (Conclusão do curso) - Insti- tuto Federal Sul-Rio-Grandense, Campus Passo Fundo, Passo Fundo. Socket.Io. Disponível em: <http://socket.io/> Acesso em: 30 MAR. 2013 Tilkov. S, S. “Node.js: Using Javascript to Build Gugh Performance Network Programs”. Internet Computing IEEE, 2010. What is Node? de Brett McLaughlin Published by O'Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472, 978-1-449-31005-9 ¹ Geohash é um algoritmo que foi criado por Gustavo Niemeyer em 2008. Intercalando latitude e longitu- de de um modo bit a bit, é gerada uma string composta que identifica um ponto geográfico. Esta cadeia pode então ser facilmente armazenadas ou usadas para transmitir os dados de ponto de localização.