Gestores de repositorios Maven

0
19166

Gestores de repositorios Maven

1. Introducción

Desde hace ya unos años el mundo Java utiliza una herramienta llamada Maven que facilita el proceso de gestión y construcción en los proyectos. Entre los aspectos más importantes a destacar se encuentra la gestión de dependencias que nos permite saber qué librerías y qué versiones son necesarias en el proyecto para ejecutarse.

Maven utiliza una matriz de repositorios remotos que le permite localizar y descargar todo lo necesario para generar nuestro proyecto de forma transparente al desarrollador. Además de los repositorios remotos también existe un repositorio local que lo utiliza como caché evitando la descarga en las siguientes generaciones del proyecto y así reducir el tiempo que supondría volver a descargarse todos las librerías.

En determinados entornos, Maven puede ser más que suficiente pero en grandes organizaciones puede que no. La restricción de acceso a Internet, el control de acceso a los repositorios, la exclusión de ciertas librerias, la reducción del consumo del ancho de banda o la administración de los repositorios de la propia organización son aspectos que quedan fuera del alcance de Maven. Debido a estas necesidades aparecieron en el mercado los Gestores de Repositorios Maven.

En la actualidad podemos destacar tres: Archiva, Artifactory y Nexus. El objetivo de este tutorial es analizarlos para seleccionar la mejor opción en función de los resultados obtenidos. Para el análisis se han utilizado la distribución standalone con su configuración por defecto que se distribuyen con cada una ellas. Las versiones analizadas en este tutorial son:

  • Archiva 1.3.5
  • Artifactory 2.4.2
  • Nexus 1.9.2.4

2. Entorno

Entorno utilizado para escribir este tutorial:

  • Hardware: Mac Book Pro (Core 2 Duo 2,8 Ghz, 8 GB RAM, 128 GB SSD)
  • Sistema Operativo: Lion 10.7.0
  • JDK: 1.6
  • Acceso a internet: ADSL 6 Mbits

3. Espacio en disco

El espacio de utilización en disco es uno de los aspectos importantes a analizar de los gestores de repositorio sobre todo cuando vayamos a gestionar un número importante de ellos (remotos o propietarios). La diferencia de que un gestor utilice un 2% más de espacio para almacenar el mismo número de artefactos puede suponer mucho. Por ejemplo si nuestros repositorios ocupasen 1T de espacio un 2% sería 20G, espacio muy a tener en cuenta.

En la actualidad los gestores de repositorio utilizan dos formas de gestionar el almacenamiento de los artefactos. Existen unos que sólo utilizan el disco y otros que además del almacenamiento en disco usan una base de datos. En el primero se encuentra Nexus y en el segundo están Archiva y Artifactory. Estos dos últimos utilizan por defecto una base de datos Derby aunque pueden ser configurados para ser utilizados con los gestores de base de datos más importantes del mercado.

Una característica importante a destacar en Artifactory es que a pesar de que por defecto utiliza esta manera de gestionar los repositorios también ofrece la posibilidad de usarse sin una base de datos.

Para este punto hemos utilizado un proyecto web multimódulo generado a partir del arquetipo appfuse-basic-spring-archetype (2.1.0) en el que sus librerías ocupan un total de 28M. Una vez ejecutado el proyecto contra cada gestor el espacio utilizado por cada uno de ellos es el que se muestra en la tabla siguiente.

Gestor de repositorios Maven Tamaño de ocupación (Mbytes) Porcentaje respecto al tamaño original
Archiva 40 43%
Artifactory 37 32%
Nexus 34 21%

Como se puede ver la aplicación que menor consumo de disco es Nexus seguido de Artifactory y por último Archiva. Tomando como referencia Nexus, Artifactory consume un 11% más de espacio, mientras Archiva un 22%.

4. Rendimiento

Para la prueba de rendimiento hemos decidido medir el tiempo que se tarda en generar el proyecto web multimódulo utilizado anteriormente. Hemos realizado dos medidas con las siguientes situaciones:

  1. Con repositorios vírgenes. Ni en el repositorio local ni en el repositorio proxy del gestor existen artefactos almacenados.
  2. Con repositorio local vacío. Sólo el repositorio local esta vacio, el repositorio proxy del gestor se encuentra todos los artefactos necesarios en el proyecto.

Los resultados obtenidos son:

Gestor de repositorios Maven Tiempo con repositorios vírgenes (m:s.ms) Tiempo con repositorio local vacío (s.ms)
Archiva 4:18.162 16.760
Artifactory 5:03.855 20.165
Nexus 4:08.447 19.349

Como se puede apreciar la aplicación más rápida con repositorios vírgenes es Nexus seguido de cerca por Archiva y finalmente Artifactory. Respecto a los tiempos una vez cacheados los artefactos por cada uno de los gestores son muy similares habiendo una diferencia de 3 o 4 segundos entre una y otra.

Las diferencias tan significativas en la primera medida se deben principalmente al número de acciones que cada gestor realizan a la hora de almacenar un artefacto y al tipo de tecnologías utilizadas internamente para funcionalidades como la indexación, etc…

Con el objetivo de reducir el tiempo de Artifactory activamos en los repositorios la opción «Eagerly Fetch Jars», lo que conseguimos con esta opción es que Artifactory se baje todas las dependencias de las que depende el artefacto que estemos solicitando al gestor. Pero mi sorpresa fue que activando dicha opción el tiempo de construcción seguía practicamente siendo el mismo.

5 Memoria.

El consumo de memoria es otro aspecto a tener en cuenta. En este punto Nexus sigue siendo el mejor sólo necesita una maquina virtual con una memoria inicial de 28M a diferencia de los otros dos que necesita 128M.

También se ha observado la memoria que consume una vez arrancado y en este punto también Nexus es el mejor 149M, respecto a 177M de Archiva y 317M de Artifactory.

6 Búsquedas

Las características de búsqueda que ofrecen todos los gestores son muy similares, permiten navegar por los artefactos mediante un árbol jerárquico, realizar búsquedas por palabras clave, nombre clase/paquete dentro de los artefactos y por grupo, artefacto y versión. Adicionalmente, Nexus y Archiva ofrecen otra opción muy útil que permite conocer la versión de un artefacto del que no sabemos nada utilizando los ficheros checksum. En cambio Artifactory permite realizar búsquedas en los POMs y metadatos XML utilizando XPath.

Todos ellos utilizan los índices de repositorios remotos para las búsqueda locales y ante cualquier actualización de estos son capaces de realizar una descarga incremental.

7 Repositorios

En este apartado ninguno de ellos destaca sobre los demás, todos trabajan con los mismos tipos de repositorios y proporciona las mismas características básicas necesarias para su gestión, como el control de acceso, posibilidad de manejar repositorios maven1/maven2 o la gestión de repositorios snapshot o release.

La gestión de repositorios snapshot o release es algo peculiar en Nexus porque no permite que en el mismo repositorio se almacene artefactos del tipo snapshot o releases cosa que los otros sí. Esto no supone ningún problema ya que Nexus permite agrupar repositorios para que se comporten como uno solo.

Otra característica interesante que ofrecen todas las herramientas es la posibilidad de definir patrones de inclusión o exclusión que permiten restringir el acceso a ciertos artefactos o jerarquía del repositorio.

A pesar de llamarlos de forma diferente todos ellos trabajan con los mismos tipos de repositorios:

  • Repositorios Locales: son los repositorios internos de la organización y deben estar en la misma máquina donde se encuentre desplegada la aplicación. Pueden llamarse Hosted Repositories (Nexus), Local Repository (Artifactory) o Managed Repository (Archiva).
  • Repositorios Remotos: son aquellos que se encuentran en Intenet y que queremos cachear en nuestra organización. Lo podemos encontrar como Proxy Repository (Nexus) o Remote Repository (Artifactory, Archiva).
  • Grupo Repositorios: son repositorios que agrupan otros repositorios a los que se accede mediante una única URL. Nexus y Archvia lo llaman Group Repository y Virtual Repository en Artifactory.

Nexus define además otro tipo al que llama Virtual Repository que nos permite transformar un repositorio maven1 en maven2 o viceversa. Esta característica también la ofrecen los otros pero en forma de opción en los tipos de repositorios vistos anteriormente.

Una desventaja de Artifactory es la imposibilidad de indicar la ruta a un repositorio local obligando a tener todos los repositorios de cualquier tipo en la misma ruta. El resto nos da la opción de almacenarlo en el directorio de repositorios de la aplicación o en otra ruta diferente del servidor.

8 Auditoría y notificaciones

De los tres gestores los únicos que nos proporcionan capacidades de auditoría dentro de la aplicación son Artifactory y Archiva. Con Artifactory podemos acceder a varios logs: peticiones, importación/exportación, accesos y aplicación. En cambio Archiva a pesar de disponer un buscador de eventos por repositorio, grupo, artefacto, versión y fechas la información que nos ofrece no es muy relevante: creación/eliminación/modificación de ficheros y directorios, copiado de un directorio o subida de ficheros mediante la interfaz web.

Respecto a las notificaciones sólo Nexus y Archiva tienen esta características. Nexus ofrece varias RSS que nos notifican de determinados eventos en cualquier repositorio como artefactos deplegados o descargados, accesos al sistema, cambios de configuración, etc. En cambio Archiva nos afrece RSS de cada repositorio local notificandonos de cualquier evento que se produzca en él.

9 Conclusión

Desde el punto de vista de las funcionalidades cualquier gestor que seleccionemos nos aportará prácticamente los mismo, por tanto la selección de uno u otro se debe centrar en los resultados de rendimiento, memoria y espacio en disco. Analizando estos resultados la elección parece clara. Nexus es el mejor seguido de Archiva y Artifactory.

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad