Veronika Consultora ITVeronika

Consultora IT
imagen alfresco Alfresco argentina Consultora documentum java jee consultora argentina java alfresco Implementaciones alfresco
Consultora Alfresco Argentina
  • Consultora Alfresco Argentina
  • Alfresco versiones 3.x 4.x y 5
  • Alfresco Share
  • Workfow BPM y Activiti
  • Alfresco Webscripts REST Full API
  • Alfresco Subsistemas
  • FTP, LDAP, SAMBA, AD, CAS, CIFS
  • Apache Lucene y SOLR
  • javascript API
  • Java Foundation API
  • Open CMIS y Apache Chemistry
  • Modelos, Aspectos, Reglas
  • Alfresco tunning performance
  • Migraciones críticas
  • Spring SURF, Freemarker
  • Integraciones Google DOC
  • Integraciones Facebook y twiter
  • Grandes volúmenes
  • Buscadores inteligentes
  • Customizaciones complejas
  • Clientes angular por CMIS
  • Reportes a medida
  • Dashboards y dashlets a medida

Cobertura
Gestión documental
Alfresco
Documentum

Articulos

Elegir Alfreco: "¿Por qué elegir Alfresco?"

Alta performance: Hacia una nueva generación en desarrollo



Consultora Alfresco argentina

Artículo de Investigación | 1 Junio 2014 | Ing. Rafael Benedettelli

Alta Performance: Hacia una nueva generación en desarrollo.

Alfresco Buenos Aires

Abstract

Las soluciones de software no están siempre orientadas a objetivo o entornos parecidos dado que algún software debe acentuar el foco en diversas propiedades como la alta disponibilidad, la robustez, la amigabilidad, etc. Existen diversos escenarios donde se exigen soluciones de alta performance como aeropuertos, finanzas, censos, etc. Estos son escenarios donde existe alta concurrencia, o sea, un número alto de accesos en un mismo intervalo de tiempo.

Este tipo de entornos son muy comunes por ejemplo en sistemas o webs gubernamentales o de empresas que tienen un patrimonio de usuarios muy elevados como telefónicas, proveedoras de internet o simplemente sitios webs de alto tráfico.

Imaginemos un país donde se acaba de realizar un proceso electoral y todos los ciudadanos desearan ingresar a un sitio web gubernamental donde se publicaran, paulatinamente, los resultados parciales de la elección. Por supuesto que para plantear un entorno como el mencionado no bastara con tomar un server, un lenguaje y programar. Sino, que se deberá plantear seriamente la respuesta del soft o site ante tanta demanda de manera concurrente.

En el siguiente paper abordaremos sobre el requerimiento de alta performance proponiendo el uso de PLAY + SCALA + MONGO


Introducción

Las tecnologías propuestas por la industria del software de índole comercial presentan amplias ventajas para el desarrollo ágil de soluciones focalizándose en la diversos aspectos como la estandarización, la facilidad de uso, la documentación y la gran cantidad de desarrolladores que la sustentan entre otros factores.

No obstante, estas soluciones, presentan grietas o no son del todo eficaces para la construcción de software de alta performance. Para solventar este tipo de problemática a veces se suele recurrir a plataformas más orientadas de laboratorio o de sistemas legacy.

El inconveniente de estos tipos tecnologías (más de laboratorio) es que carecen de las facultades necesarias para competir en la industria del software comercial, cual maneja tiempos un tanto diferentes a los académicos o de laboratorio.
Una solución tecnológica que permita:
o Lenguaje de alto nivel o Fácil uso o Rápido aprendizaje o Gran cantidad de documentación o Gran comunidad de programadores o Existencia de frameworks, estándares, etc. o Lenguaje de modelado. o Tiempos rápidos de implementación o Librerías graficas o Manejo automático de memoria.

Si bien Java [4] es el lenguaje standard de la industria del software por sus ventajas en cuanto al manejo automático de memoria, la interoperabilidad y su simpleza presenta debilidades notables en cuanto a performance se refiere.

El código binario generado por las clases escritas en el lenguaje Java responde de manera poco efectiva cuando se someten a un gran caudal de concurrencia tomando de manera excesiva recursos como memoria y CPU.

Los beneficios de la gestión automática de memoria en JAVA, cobran su precio con la velocidad de ejecución. La memoria principal se ve fuertemente afectada durante una ejecución de la “Garbage collector”.

Scala pertenece a una nueva generación de lenguajes que además de haber demostrado un porcentaje superior de performance en la ejecución de código es a su vez también, una solución que cumple de manera efectiva con los requerimientos también demandados por los “tiempos” de la industria.

Scala es un lenguaje de programación muy símil a JAVA, que de hecho su código compilado binario corre sobre la JVM (Java Virtual Machine) que ha sido creado con el propósito de mantener los beneficios de JAVA pero transformar sus debilidades para mejorar en purismo y performance.

El marco de solución que se propone es:
AppServer + Lenguaje + Database
Dónde:

App Server: debe ser ágil y flexible para permitir cambios “en caliente”. Lenguaje: debe ser un lenguaje de performantes tiempos de ejecución pero a su vez que mantenga los beneficios de los lenguajes de la industria. Database: La performance de las bases de datos no-sql ya son una realidad. Facebook, twitter, Amazon entre otras viven de ellas. Son una fuerte alternativa ante las bases relacionales.

La especificación que se propone para este tipo de solución es: PLAY + SCALA + MONGODB.


Aspectos tecnológicos

Los cambios de plataforma, no son decisión fáciles de tomar a la hora de migrar hacia diferentes soluciones y herramientas de las que habitualmente operamos.

Si alguien menciona que en su trabajo que tiene una base de datos nadie le preguntara: “¿Es relacional la base de datos con la que trabajas?”.

En sistemas estamos tenemos por entendido que una base de datos es relacional. Y esto es debido a que en la mayoría de empresas se utilizan este tipo de soluciones. Pero existen otros tipos de motores de base de datos tales como no relacionales, Documentales, en grafo, clave/valor, orientadas a objetos, de geo localización, etc.

También, cuando preguntamos con que lenguaje se desarrolló tal aplicación esperamos en la respuesta oír java, lenguaje c, php, phyton, ruby, pascal, Fortran o cobol en otras épocas. O algún otro tipo de lenguaje Mobile como objective c. Pero no estamos preparados para escuchar Scala, ADA, Alice o ApectJ. [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]

Esto nos suena bastante raro, extraño y de alguna manera lo es. También nos veremos en la situación frecuente de encontrar servidores de aplicación Apache , Tomcat, JBOSS, etc. Pero difícil encontraremos ocurrencias importantes de sistemas en producción soportados bajo un aplicattion server como Play Framework.

Que no esté de moda no significa que no sea nuestra solución a medida o aquello que estemos necesitando para algún tipo de especificación.

Es importante entender que no todos los tipos de lenguaje, base de datos y Servidores de aplicaciones sirven o solucionan lo mismo.

Entender este concepto, será el primer paso que deberán dar aquellos arquitectos de software para tomar la decisión de producir un cambio. Si bien esto no significa que optará instantáneamente por Scala-Play-Mongo, si recién entonces podremos ofrecer una solución original, ya que nos encontramos con una mente más expeditiva que comprendió que no todo es un “clavo” que ha de resolverse con un martillo.


Detalles

Ya entendimos el contexto, los problemas y las posibles soluciones. Ahora si podemos pasar a lo específicamente técnico para poder entender las cualidades tecnológicas de estos tres artefactos de software que de uso junto se propone.


Scala fue diseñado por Martin Odersky [16] y pertenece a la familia de lenguajes de paradigma funcional-orientado a objetos (es por esto que se suele decir que Scala es multiparadigma).

Surgió en 2003 así que es de temprana edad comparado con otros competidores, no obstante, cuenta con más de 10 años de uso, pruebas y casos de éxito en su espalda.
En cuanto a su paradigma de objetos es “puro” O.O. [17] ya que todo valor es un objeto (a diferencia de java que contamos con los primitivos).

Por su lado funcional, las funciones son valores de primera clase, soportando funciones anónimas, currificacion y funciones anidadas.
Es importante que Scala fue creado con el objetivo de ser una alternativa a JAVA, siendo así que su marketing y su divulgación remarca diferencias contra este lenguaje.
Pero uno de los aspectos más importantes de Scala es que no solo compite con JAVA sino que se complementa de manera amigable, ya que se puede:
o programar en JAVA. o mesclar código de ambos lenguajes en una misma función. o Llamar funciones de escala a métodos java y viceversa. o Las aplicaciones SCALA se compilan para ejecutarse sobre una Virtual Machine.

Este tipo de aspectos, son los que tientan a aquellos desarrolladores JAVA a animarse a probar un poco el sabor de este nuevo mundo. Los desarrolladores pueden, en este sentido, aprovechar que el salto no es tan violento y la transición es lenta.

Pueden resultar un tanto simpáticas las experiencias de programadores que dicen haber realizado proyectos en Scala y cuando se obtiene acceso al código fuente, se puede apreciar que en un 90% es código java embebido en clases Scala.

Este dato no solo es simpático, sino que nos da a entender que uno puede “migrar sin migrar”, o ir migrando de a poco, de manera tal de no perder tiempos de calendario debido a la línea de aprendizaje de una nueva tecnología.

Y lo más importante de todo: Scala maneja tiempos de ejecución rápidos. Lo que lo hace un lenguaje ideal para implementar sistemas que requieren velocidad de respuesta.



Hablar de bases de datos no relacionales le podrá sonar extraño a más de uno. Pero la realidad dice que colosos como Facebook, Twitter, Google, Amazon y Linkedin por solo nombrar algunos, han utilizado este tipo de soluciones.

Estas empresas manejan caudales de usuarios extremadamente alto y su concurrencia de acceso no se queda atrás.

Solo hace falta relajar la mente y pensar en cuanto usuarios están subiendo una foto en Facebook en este preciso momento, o “twitteando” un texto, o subiendo un aspecto de su curriculum en Linkedin, nos hará entender que estas plataformas no pueden dejar a un costado el tema de la alta performance y los tiempos de respuesta.

Imaginemos que el hecho de visualizar unas imágenes en Facebook le lleve 1 minuto. La probabilidad de que vuelva a visitar Facebook.com sería muy baja.

Es por eso que estas empresas debieron poner a la velocidad de respuesta como eje principal y protagonista de su solución tecnológica. Es asimismo, que optaron por bases de datos no relacionales ponderando el tiempo de respuesta por sobre la estructura u orden de datos.

Las bases de datos relacionales favorecen los tiempos de acceso a datos hasta 10 veces más que los sistemas relacionales. Ya que se comportan como “Bolsas de contenido”. Esto significa que no manejan claves foráneas, Triggers, complejas contraints, joins, etc.

Para ganar en velocidad por supuesto pierden en atomicidad, coherencia, aislamiento y durabilidad –ACID-.
Las ventajas más importantes son:

o Escalabilidad horizontal. o Enormes cantidad de datos. o Formatos JSON. [18]

Mongo db particularmente tiene la característica, que además de estar altamente testeado y probado en diversos sistemas en producción es que contiene un Grid FS, aspecto por el cual podremos administrar archivos físicos con metadata.

El GRID FS es importante para persistir imágenes, documentos words, etc haciendo las veces de un sistema de gestión documental sin tener que recurrir a alternativas como Alfresco, Documentum, Nuxeo o FileNet que son de alto costo y mantenimiento.

Scala puede conectarse a una base de datos MONGO a través del API CASBAH.


Una visión clara y transparente tuvo el diseñador de software Guillaume Bort acerca de los problemas con los que tienen que lidiar frecuentemente los desarrolladores de aplicaciones Web.

Play framework no solo se jacta de ser un servidor de aplicaciones java o Scala que puede reconocer cambios de código en “caliente” (sin tener que reiniciarlo como Tomcat) sino que también es un poderoso marco de trabajo que ayuda a los programadores en el desarrollo de este tipo de aplicaciones.



Play Framework permite:
o Crear proyecto en Java o Scala. o Potente manejo de plantillas web. o Propone el uso de Twitter Bootstrap para el front end. o Induce al diseño de aplicaciones en arquitectura MVC siendo más simplificado que la propuesta del conocido Struts. [19] o Permite la administración e independización de librerías haciendo las veces de Apache Maven. o Permite configuraciones globales tanto para acceso a datos, internacionalización, filtros web, etc.

Play framework propone la centralización en un único punto de todos aquellos recursos a los cuales debían recurrir los programadores para generar proyectos webs.

También es importante remarcar que tanto mongo, Scala y play comprenden proyectos de terceros como herramientas IDE para la gestión.

Por ejemplo Mongo contiene varios proyectos para poder visualizar la DB y crear colleciones de datos a través interfaces amigables sin tener que recurrir al Shell propio.

En el caso de Scala, este ya cuenta con un “Eclipse“ modificado.


Solicite entrevista