Capitulo 2. Api Rest Nodejs Con Loopback
Total Page:16
File Type:pdf, Size:1020Kb
TRABAJO FINAL DE GRADO TÍTULO: API REST LoopBack (Node.JS) vs. Rust TITULACIÓN: Grado en Ingeniería Telematica AUTOR: Maksym Pryshchepa Pryshchepa DIRECTOR: Roc Meseguer DATA: 15 Septiembre del 2017 Título: API REST LoopBack (Node.JS) vs. Rust Autor: Maksym Pryshchepa Pryshchepa Director: Roc Meseguer Data: 15 Septiembre del 2017 Resumen El motivo que me impulsó a realizar este proyecto es analizar el uso actual del lenguaje de programación JavaScript, el cual nació hace 20 años para satisfacer unas necesidades determinadas y en un ámbito de programación, que difiere con notabilidad al uso al que JavaScript está sometido hoy en día. Con tal de demostrar que el uso de JavaScript en servidor puede acarrear pérdidas de rendimiento y hábitos incorrectos, voy a realizar una comparativa entre JavaScript y otro lenguaje más apropiado o especializado como es Rust para el ámbito de servidor. Después de realizar una introducción conceptual de cada lenguaje, voy a realizar unas pruebas de rendimiento en diferentes campos como las peticiones por segundo, la robustez, velocidad de cálculo, latencia y caudal. A todo esto he podido comprobar que no es bueno estirar demasiado las posibilidades de un lenguaje de programación, por muy práctico que este pueda resultar, ya que JavaScript resulta tener un rendimiento bastante inferior a Rust. Esto hace que en algunos ámbitos, como el de servidor web, el rendimiento se intente solventar con mayor hardware cuando simplemente se puede solucionar haciendo un uso correcto del código en el lugar adecuado. Título: API REST LoopBack (Node.JS) vs. Rust Autor: Maksym Pryshchepa Pryshchepa Director: Roc Meseguer Data: 15 Septiembre del 2017 Overview The reason that led me to carry out this project is to analyze the current use of the JavaScript programming language, which was born 20 years ago to meet certain needs and in a programming environment, which nowadays highly differs from the use that is done out of JavaScript. In order to demonstrate that the use of JavaScript on the server can lead to performance losses and incorrect habits, I will make a comparison between JavaScript and another more appropriate or specialized language such as Rust for the server scope. After performing a conceptual introduction of each language, I will perform performance tests in different fields such as requests per second, robustness, calculation speed, latency and flow. To all this I have been able to prove that it is not good to stretch too much the possibilities of a programming language, however practical this may be, since JavaScript turns out to have a much lower performance than Rust. This makes in some areas, such as the web server, where in order to solve performance issues hardware will be increased when you can simply solve it by making a correct use of the code in the right place. ÍNDEX CAPITULO 1. INTRODUCCIÓN ....................................................................... 1 1.1. Motivación del proyecto ...................................................................................................1 1.2. Estructura del Proyecto ...................................................................................................2 1.3. Objetivos del Proyecto .....................................................................................................3 1.4. Objetivos Específicos ......................................................................................................4 1.5. Introducción a API REST .................................................................................................5 CAPITULO 2. API REST NODEJS CON LOOPBACK ..................................... 6 2.0. Introducción ......................................................................................................................6 2.1. Arquitectura: LoopBack, NodeJS y JavaScript .............................................................6 2.2. Características y Posibilidades .......................................................................................8 2.2.1. LoopBack ...............................................................................................................9 2.2.2. NodeJS ................................................................................................................12 2.2.3. JavaScript ............................................................................................................14 2.3. Adaptabilidad de código nuevo ....................................................................................16 2.3.1. Código .................................................................................................................16 2.3.2. Aportaciones de Usuarios nuevos .......................................................................18 2.4. Escalabilidad y Paralelismo ClassPip ..........................................................................19 2.4.1. Escalabilidad con LoopBack ................................................................................19 2.4.2. Paralelismo para múltiples usuarios ....................................................................19 2.4.3. Implementación en ClassPip ...............................................................................20 2.5. Comunidad y Futuro de la plataforma ..........................................................................20 2.6. Conclusiones ..................................................................................................................22 CAPITULO 3. API REST RUST ...................................................................... 23 3.0. Introducción ....................................................................................................................23 3.1. Arquitectura: Rust REST ...............................................................................................23 3.2. Características y Posibilidades .....................................................................................25 3.2.1. Rust .....................................................................................................................25 3.2.2. Creación API’s .....................................................................................................27 3.3. Adaptabilidad de código nuevo ....................................................................................29 3.3.1 Código ..................................................................................................................29 3.3.2 Aportaciones de Usuarios nuevos ........................................................................29 3.4. Escalabilidad y Paralelismo ClassPip ..........................................................................30 3.4.1. Escalabilidad con RUST ......................................................................................30 3.4.2. Paralelismo para múltiples usuarios ....................................................................31 3.4.3. Implementación en ClassPip ...............................................................................31 3.5. Comunidad y Futuro de la plataforma ..........................................................................32 3.6. Conclusiones ..................................................................................................................33 CAPITULO 4. RUST VS NODEJS EN CLASSPIP ......................................... 34 4.0. Introducción ....................................................................................................................34 4.1. Pruebas de Rendimiento ...............................................................................................35 4.1.1. Peticiones por segundo ......................................................................................35 4.1.2. Computación .......................................................................................................37 4.1.3. Latencia y Caudal ...............................................................................................39 4.1.4. Robustez.............................................................................................................42 4.2 Conclusiones a partir de las pruebas efectuadas .......................................................45 CAPITULO 5. PROPUESTAS DE CARA A CLASSPIP ................................. 46 5.1. Propuesta de mejora de API ..........................................................................................46 5.2. Consejos para trabajar con Rust ..................................................................................46 CAPITULO 6. CONCLUSIONES .................................................................... 47 6.1. Resultados del Proyecto ................................................................................................47 6.2. Conclusiones Personales ..............................................................................................47 6.3. Recomendaciones de cara al proyecto final ................................................................48 CAPITULO 7. REFERENCIAS ....................................................................... 49 CAPITULO 8. ÁNEXO .................................................................................... 53 8.1. Código API Rust para los test .......................................................................................53 8.2. Tabla comparativa previa a la elección de alternativa ................................................53 8.3. Resultados del test de Peticiones/s..............................................................................55