Whitepaper Estrategia de Evolución Tecnológica Combinando la tecnología clásica con las nuevas tendencias NoSQL, Big Data y Lean Development. Punto de partida El escenario típico que nos encontramos en la mayor parte de las organizaciones es el de arquitecturas tecnológicas en aplicaciones web en tres capas (presentación, lógica y persistencia) que ofrecen interfaces ligeros en la presentación, implementan gran parte de la lógica en servicios web y delegan las transacciones en una capa de acceso a datos. Nuevas tecnologías para desarrollo de aplicaciones web frontend Durante los últimos años han surgido nuevos frameworks y herramientas para la construcción de aplicaciones web SinglePage, que mejoran no solo la experiencia de usuario y la usabilidad de la aplicación sino también suponen un cambio en la forma de diseñar, desarrollar y mantener este tipo de aplicaciones. Frameworks como AngularJS, Ember, Meteor, Backbone o Knockout entre otros, permiten estructurar y organizar el código bajo el paradigma MVC , separando el modelo de datos de la capa de presentación y de la lógica de negocio. En algunos casos se habla de MVVM o simplemente MV*, en donde * se refiere a esa tercera pieza de la aplicación que permite que el modelo de datos y su representación puedan funcionar juntos. Whitepaper Las diferencias entre estas tecnologías residen en su filosofía, framework vs librerías, o en su implementación MV*, bien basadas en templating sobre el DOM vs templating basado en Strings. Sin embargo, comparten puntos interesantes como: Están basados en el lenguaje JavaScript, aprovechándose, entre otros, de importantes beneficios como: la programación basada en eventos que evita bloqueos en procesos E/S, el menor uso de recursos en el browser y la encapsulación de código en módulos mediante JavaScript Clousures. Existen stacks tecnológicos con un mucha actividad en la comunidad de desarrolladores, basados en estas herramientas, que simplifican y agilizan el desarrollo de aplicaciones Web, a la vez que potencian aspectos como la testabilidad o la integración continua con plataformas Cloud como Herok. Angular.js Desarrollado por Google en 2009, angularJS es un framework para el desarrollo de aplicaciones web dinámicas, en entorno cliente basado en un modelo declarativo que permite extender el lenguaje HTML para crear componentes de una forma sencilla y eficiente. Angular.js incorpora funcionalidades para reducir drásticamente los tiempos de desarrollo y el código de aplicaciones web dinámicas: Para la generación de aplicaciones CRUD: Data binding, directivas de templating, validación de formularios, enrutamiento, inyección de dependencias, componentes reusables, deeplinking. Automatización de tests: unit-testing, e2e testing, mockups Plantilla de aplicación con una estructura de directorios y scripts de prueba predefinidos. Angular.js simplifica el desarrollo de aplicaciones con un nivel superior de abstracción. Como cualquier abstracción, tiene un coste en flexibilidad. No todas las aplicaciones se ajustan al modelo de Angular. Angular está diseñado, principalmente, para el desarrollo de aplicaciones CRUD, gestionando de forma transparente el tratamiento del DOM y las comunicaciones AJAX. No obstante, existe otro interesante caso de uso de angularJS: las aplicaciones analíticas ad-hoc. Caso de uso I: Aplicaciones CRUD La filosofía de AngularJS es mantener el core lo más sencillo y eficiente posible, dejando cualquier funcionalidad no esencial en módulos externos. Estos módulos le permiten al desarrollador incorporar la funcionalidad necesaria en la aplicación registrándolos en el bootstrapping, y manteniendo de ésta forma el código bien estructurado. Es la filosofía Lean. AngularJS se puede incorporar a soluciones ya existentes, reemplazando únicamente el entorno cliente y manteniendo la arquitectura del servidor independiente de la tecnología utilizada (J2EE, PHP, etc.). Un buen ejemplo son las aplicaciones CRUD, en donde se gestionan datos que persisten en el servidor mediante operaciones de creación, consulta, actualización y borrado de registros. Estrategia de Evolución Tecnológica. Pag. 3 Caso de uso II: Aplicaciones analíticas Existen dos módulos que se integran con AngularJS especialmente interesantes por sus posibilidades analíticas: D3.js (o Data-Driven Documents) y crossfilter.js. D3.js es una librería para la manipulación de documentos basados en datos. Permite representar multitud de tipos de gráficos via HTML, SVG y CSS, y dotarles de una interactividad especialmente útil para la analítica de datos. D3.js se integra con AngularJS mediante el uso de directivas y controladores, desacoplando la lógica, especialmente las interacciones con el usuario, de su presentación. Crossfilter.js es una librería para la exploración multi-variable de datasets en el browser. Soporta interacciones en tiempo real (< 30ms) sincronizando las vistas con datasets de millones de registros, para operaciones de filtrado, agrupación y ordenación sobre los datos. En definitiva, provee capacidades OLAP sobre grandes volúmenes de datos en el entorno cliente. Estrategia de Evolución Tecnológica. Pag. 4 Convivencia de nuevas tecnologías web front-end con tecnologías clásicas back-end Una de las mayores ventajas de estos JS frameworks, es que son agnósticos con la solución back-end utilizada. Nos permiten comunicar el browser con el servidor mediante diferentes mecanismos, como web sockets para aplicaciones en tiempo o servicios REST para aplicaciones CRUD, y mantener toda la agilidad de una aplicación SPA sin necesidad de cambiar la arquitectura del servidor. Desde el punto de vista IT, la incorporación de estas tecnologías conlleva los siguientes beneficios: Menor time-to-market: desarrollo más ágil de aplicaciones Web basado en una programación declarativa en vez de funcional. Mayor calidad del software: se integran herramientas para automatizar las pruebas unitarias y pruebas de integración, que permiten asegurar la calidad del software. Mayor mantenibilidad del software: la organización modular del código simplifica el mantenimiento de las aplicaciones. Rendimiento y menor uso de recursos: optimización del uso de recursos mediante librerías como Browserify, gestión de estáticos, ficheros minimizados, etc. Acerca de Indizen T echnology & Business Confluence Fundada en 2001, Indizen es una compañía de consultoría de negocio, ingeniería algorítmica y desarrollo tecnológico con una clara vocación por la innovación y por los sistemas orientados a la computación distribuida.. Hace más de 10 años fuimos pioneros en la implantación de los primeros sistemas GRID en España por lo que nuestra evolución hacia el desarrollo ágil basados en Cloud, tecnologías Big Data y NoSQL ha sido natural. Indizen ofrece una alta especialización en el análisis, diseño, implementación y despliegue de arquitecturas y procesos orientados a la ingesta, transformación, normalización, almacenamiento, análisis y visualización de grandes datos, a través de nuestra experiencia y conocimiento sobre casos de uso del mundo real (modelos predictivos y estadísticos) desde una perspectiva realista que combina conocimiento del negocio y de la tecnología que son clave para toma de decisiones y para la mejora de la eficiencia de los procesos empresariales e industriales. Desde 2011 nos hemos volcado en la construcción de soluciones basadas en arquitecturas lambda (Hadoop, Storm, Hbase, etc.) y NoSQL como componentes principales de nuestro stack tecnológico, para impulsar la innovación tecnológica tanto propia como de nuestros clientes. Indizen Paseo de la Castellana, 130 28046 Madrid España [email protected] T (34) 91 535 85 68 http://www.indizen.com