Arquitecturas en Alfresco

alfresco_repository_architecture_diagram1_coloredCon este post me gustaría hacer una pequeña introducción a los diferentes diseños de arquitecturas que podemos llevar a cabo con Alfresco dependiendo del uso, usuarios, rendimiento, concurrencia y almacenamiento requerido.

Alfresco es un producto que acaba de cumplir 5 años, tras pasar por varias etapas con versiones más o menos estables, podemos decir, que desde hace un tiempo contamos con un producto confiable, robusto, estable y escalable. Preparado para pequeños proyectos con decenas de usuarios y unos cuantos miles de contenidos y para entornos con miles de usuarios y millones de contenidos. Y cada vez nos encontramos más y más instalaciones consolidadas.

Algo muy común que veo en las implantaciones de Alfresco, salvo casos muy concretos, es que muchas veces se instala la aplicación, base de datos y content store en la misma máquina, tanto para un piloto, desarrollo, test o producción. Para un piloto y desarrollo o incluso test es válido, o para producción si los requisitos no son demasiado exigentes. Teniendo todas las capas de la aplicación en la misma máquina (física o virtual), cuando el entorno pasa a producción y empieza a crecer considerablemente en número de usuarios y contenidos se suele experimentar un problema de rendimiento. Tiempos de respuesta elevados en el acceso, reglas, workflows, etc.

Vamos a ver, de forma resumida, algunos conceptos a tener en cuenta a la hora de hacer despliegues de Alfresco que nos permita crecer tanto horizontal como verticalmente.

Antes de seguir, para entender bien todo esto, veamos los componentes de la infraestructura que debemos conocer y diferenciar para diseñar una correcta arquitectura:

  • Repositorio Alfresco: hablamos de la aplicación principal de Alfresco (alfresco.war) que gestiona todo el repositorio (contenidos) y el core, así como las diferentes interfaces de acceso como CIFS, FTP, WebServices, Alfresco Explorer y muchas otras más.
  • Alfresco Share: aplicación (share.war) que es interfaz web de Alfresco y nos permite acceder al repositorio una interfaz ligera y potente para gestión de contenidos y colaboración. Mediante Share podemos activar sitios favoritos para su posterior acceso por IMAP. Este componente puede estar en una capa diferente al repositorio y escalar de forma separada tanto vertical como horizontalmente.
  • Aplicaciones de terceros: nos referimos a las aplicaciones que necesita Alfresco para funcionar al 100% como OpenOffice, ImageMagik y Pdftools. Recuerda que desde la versión 3.2, OpenOffice funciona como un subsistema y podemos instalarlo en una máquina diferente al repositorio.
  • Base de datos: será el motor de base de datos a usar por el software, como ya sabemos, pueden ser de varios tipos y “sabores” como MySQL, MS SQL Server, PostgreSQL, Oracle, etc. Alfresco almacena en la base de datos toda la información (metadatos, reglas, permisos… todo) excepto los índices y los ficheros físicos. Dicho esto, podemos adivinar que el uso de base de datos que hace Alfresco es importante.
  • Almacén de contenido o content store: será el sistema de ficheros, directorio o directorios del sistema operativo donde Alfresco deposita los ficheros que maneja, los ordena por diferentes niveles de directorios (año/mes/dia/hora/minuto). Por defecto se almacena dentro de alf_data/contentstore. En contentstore.deleted tendremos los ficheros borrados, tras 15 días de ser eliminados, y audit.contentstore que será la información extra que genera la aplicación si activamos las auditorías.
  • Índices: hablamos de la información que genera el motor de indexación y búsqueda que incorpora Alfresco, Lucene. Esta información se almacena en un directorio del sistema operativo llamado lucene-indexes dentro de alf_data por defecto. Diariamente a las 3 AM se genera un backup automático de los índices en el directorio alf_data/lucene-indexes.backup. Como decía, ahí se almacenan todos los índices de los contenidos del repositorio y tendrá un puntero a los mismos desde la base de datos. Podemos imaginar que cuanto más rápido sea el disco o discos donde residan los índices, más rápido funcionará nuestro sistema a nivel general.

Dicho lo anterior y conociendo el funcionamiento de Alfresco, podemos averiguar donde tenemos los cuellos de botella en las implantaciones.

Por ejemplo, tener el content store y la base de datos en la misma máquina sobre el mismo disco duro supone que cada vez que subimos un fichero o realizamos alguna acción con el mismo se escribe simultáneamente en base de datos y content store; moraleja: el disco duro debe escribir al mismo tiempo en varios sitios diferentes = sistema lento. Claro está, esto nos pasará si estamos haciendo un uso intensivo del sistema.

Todos esos componentes los podemos implementar de diferentes formas, dependiendo de la ubicación de cada componente hablaremos de diferentes capas o niveles.

  • Una capa única: es el despliegue por defecto que podemos realizar con los instaladores bundle de Alfresco. Todos los elementos de la infraestructura los tendríamos en la misma máquina. ¿Para qué es válido este tipo de despliegue? Para pruebas piloto, desarrollos o incluso pequeñas instalaciones orientadas a departamentos. Por supuesto, este tipo de despliegues no se recomiendan para sistemas críticos o con grandes expectativas por razones obvias de escalabilidad y rendimiento.
  • Dos capas: en este despliegue podemos empezar a usar una arquitectura realmente empresarial y escalable. Aquí separaremos en capas independientes:

Capa de contenidos: repositorio, Share, índices y aplicaciones de terceros que necesita Alfresco.
Capa de almacenamiento: Base de datos en una máquina dedicada a la que accede la aplicación vía JDBC y content store en una SAN o NAS.

Esta arquitectura permite más escalabilidad y rendimiento, configuración simple y la gestión del crecimiento del contenido es transparente para la aplicación. Si añadimos que en este caso los índices estarán en la capa de contenidos tendremos como resultado un entorno que imprima un rendimiento considerable para entornos de tipo medio que incluso pueden ponerse en alta disponibilidad, pero ojo, si crecen mucho los contenidos también crecerán los índices y en ese casos podríamos necesitar hacer cambios en la infraestructura o en la configuración de los servidores (asignar más almacenamiento, etc.).

  • Tres capas distribuidas: en versiones 3.X podemos separar en varias capas componentes de la capa web de Alfresco, es decir, separar Alfresco Share del repositorio. Este caso será el más escalable y nos permitirá implementar entornos con una gran carga y altas exigencias en cuanto a rendimiento. Esta arquitectura añade a la de dos capas la distribución de la capa web. Las capas serían las siguientes:

Capa web: donde tendríamos Alfresco Share o/y otras aplicaciones frontales que podamos tener para trabajar con Alfresco (Liferay, Joomla, Drupal, etc.) u otras hechas desde cero y opcionalmente un servidor web que proteja al servidor de aplicaciones vía mod_proxy, Varnish o similares.

Capa de contenidos: repositorio, índices y aplicaciones de terceros que necesita Alfresco.

Capa de almacenamiento: Base de datos en una máquina dedicada a la que accede la aplicación vía JDBC y content store en una SAN o NAS.

Podríamos añadir una capa extra entre la capa web y capa de contenidos que nos permita hacer caché, control de acceso o balanceo de carga. Como vemos, esta es la mejor forma de ofrecer el máximo rendimiento tanto de lectura como de escritura, que además podemos configurar en alta disponibilidad en todas las capas. Este tipo de arquitectura no es recomendada para pequeños despliegues departamentales y necesita un alto grado de conocimiento de Alfresco, sistemas y redes en general. Salvo uso de software específico, no se recomienda separar cada una de las capas de forma geográfica ya que una alta latencia entre capas puede influir negativamente en el rendimiento.

Nuevo libro de Alfresco: Professional Alfresco

pro-alfrescoBueno, reconozco que este post y el anterior no son muy técnicos pero creo que también puede ser interesante. Alfresco ha publicado un libro llamado “Professional Alfresco: Practical Solutions for Enterprise Content Management”. Ha sido escrito por la gente que ha creado el producto, principalmente por David Caruana, Arquitecto Jefe, aunque también han colaborado John Newton (CEO y Presidente), Mike Farman, Michael Uzquiano y Kevin Roast.

El libro empieza con una presentación general sobre Alfresco e incluye información detallada sobre sus componentes, servicios y seguridad, así como una explicación de su funcionamiento en conjunto. También se explican las distintas maneras de implementar Alfresco según determinados requisitos, como la integración con Liferay, Drupal o Joomla. Se pueden encontrar ejemplos detallados de código, complejos casos reales e incluso una web donde podremos descargar los ejemplos del código fuente que aparece en el libro.

Ya se puede comprar en Amazon por unos 30€ . También puedes descargar el primer capítulo y el índice detallado desde aquí.

Recuerda que ya hay 3 libros en el mercado que tratan sobre Alfresco cubriendo varios aspectos, además son muy recomendables, éstos son ordenados por fecha de publicación:

Cambio de aires

powered_by_alfrescoDijo una vez Steve Jobs a unos recién licenciados en Stanford: “Si hoy fuera en último día de mi vida, ¿querría hacer lo que estoy haciendo? Si la respuesta es “No” varios días seguidos, es porque necesitas cambiar algo”.

Muchas veces, lo mejor es escuchar al corazón y no temer a equivocarse, que es la antesala de la experiencia.

Después de un poco más de tres años en Intecna Soluciones, he decidido dar un cambio, nuevos retos, nuevas ilusiones, en Alfresco Software, para el que no lo sepa (que si eres lector de este blog, me extraña), Alfresco es una compañía inglesa con sede en Maidenhead (Londres) y creadores del software ECM Alfresco producto Enterprise Open Source líder en su sector a nivel mundial, y que recientemente ha cumplido 5 años de vida.

Mi nuevo rol en Alfresco será Senior Solutions Engineer para España y Portugal.

Antes de mi llegada a Intecna, mantuve varias conversaciones con Máximo Martin, entonces Director de I+D de Intecna y ahora en Kandor Moon, al que siempre agradeceré su interés en mí. Él fue uno de los artífices para que aterrizara en Granada de nuevo, tras mi periplo madrileño.

Desde mi llegada a Intecna y a la Fundación I+D del Software Libre en febrero de 2007, he tendido la suerte de trabajar con un equipo magnífico, gente joven con mucha ambición, ganas de trabajar y hacer bien las cosas. Éramos escasas 20 personas y ahora, entre ambas organizaciones casi 90 y además formando parte de un gran grupo empresarial como es Oesía Networks.

Tuve la suerte de crear, desde cero, los departamentos de Sistemas, Soporte y Formación, y contar con un equipo de once amigos en Granada y Sevilla. He colaborado en parte de la génesis de lo que ahora es Intecna tanto interna como externamente y también me dieron la oportunidad de recorrer varios países contando lo que somos capaces de hacer y abriendo nuevos mercados, de lo que estoy muy agradecido. Todo un reto que ahora continuan otras personas. Han sido años muy duros y muy productivos, apasionantes, de los que me siento muy orgulloso haber formado parte.

Si hay algo que tengo que decir a todos mis compañeros en Intecna es GRACIAS, en mayúsculas y en negrita. He aprendido tanto que aún estoy colocando el conocimiento en su sitio y siempre os tendré en mi corazón. Estoy convencido del éxito de vuestros proyectos, os merecéis lo mejor.

Alfresco me ofrece una oportunidad fabulosa y estas oportunidades no se pueden desaprovechar, uno necesita seguir creciendo. Es un nuevo reto para mi y los retos me apasionan.

Ahora me toca seguir aprendiendo inglés, supongo que más rápido ya que practicaré a diario. En principio tendré mi cuartel general en cualquier parte, donde me necesiten, movilidad total, es lo que tienen las empresas modernas. Así que nos vemos o leemos en Skype y nos seguimos leyendo en mi blog, ahora con más razón, escribiendo sobre Alfresco.

Suerte. Nos vemos en el camino.

Integración de Alfresco con Google Docs

En la próxima versión evolutiva de Alfresco 3.3 Community, que será etiquetada como 3.3g, tendremos disponible la integración con Google Docs. Con dicha integración podremos hacer Check Out desde Alfresco Share a Google Docs y así poder compartir documentos para, por ejemplo, trabajo concurrente con otras personas ajenas a nuestro entorno colaborativo y con nuestra cuenta de Google. Posteriormente, desde el propio Share podremos hacer Check In y generar una nueva versión en Alfresco.

Interesante ¿verdad? Lo podemos ver en este video (calentito, calentito).

Transfer Service: la respuesta de Alfresco a la federación de repositorios

Algo que se venía demandando desde hace tiempo a Alfresco es la posibilidad de federar repositorios o espacios. Si analizamos el roadmap del 2010 podemos ver esa opción en la versión 3.3, prevista para el Q2 (tanto Community como Enterprise).

Haciendo una traducción libre de la entrada sobre este tema en la Wiki de Alfresco, vamos a ver qué es y para qué sirve el Transfer Service.

A través del Transfer Service podremos enviar información desde un repositorio de Alfresco a uno o varios targets definidos, siendo estos targets otros Alfrescos (por ahora).

Como en otros casos, lo podremos hacer a través de la configuración de unos beans que encontraremos en el fichero transfer-service-context.xml. También incorporará una API que permitirá las siguientes características:

  • Registrar un nuevo target.
  • Enviar un nodo nuevo por primera vez (sin que exista en el target).
  • Enviar un nodo que ya exista en la misma ruta del target.
  • Enviar una actualización a un nodo existente en un target.
  • Enviar múltiples nodos.
  • Enviar un nodo borrado o restaurado.
  • Especificar que tipos de asociaciones hay que tener en cuenta para una transferencia.
  • Localizar targets disponibles.
  • Configurar los targets para usar HTTP o HTTPS.
  • Cancelar una transferencia.
  • Verificar los detalles de un target.
  • Ver un registro de los intentos de transferencias.
  • Ver registros de transferencias de un target determinado.
  • Posibilidad de hacer transferencias asíncronas bajo demanda.
  • Editar los atributos de un target.
  • Ver el estado de una transferencia.
  • Restringir una transferencia por clase de contenido.
  • Eliminar targets configurados.

En resumen, el Transfer Service nos permitirá transferir nodos (contenidos) de un repositorio a otro. Alfresco deja las puertas abiertas a nuevas características en este sentido ya que se podrían soportar en el futuro otros elementos e incluso otros tipos de targets como por ejemplo un filesystem cualquiera, etc. Esta nueva característica permitirá a Alfresco dar un salto importante en cuanto a nivel de implantación en entornos con grandes necesidades de replicación y geograficamente distribuidos.

Hablando sobre Alfresco y SAP en la WhyFLOSS 2010

El próximo jueves 18 de Marzo estaré en Madrid para hablar sobre la integración de Alfresco con SAP como caso de éxito en un proyecto reciente, será en la conferencia WhyFLOSS que organizan los amigos de Neurowork. WhyFLOSS es un evento muy interesante que se celebra anualmente en Madrid, este año en la EOI. En esta conferencia se mezcla negocio y Open Source, donde se dan cita profesionales de diferentes empresas y organismos para hablar de casos de éxito, presente y futuro de tecnologías relacionadas con el Software Libre.

En leer más puedes ver la agenda de actividades.

Read More

Lecturas recomendadas si quieres estar al día con Alfresco

A veces me preguntan cómo me entero de esto o aquello en relación con la parte técnica de Alfresco. Es fácil, leyendo todo lo posible en relación a la tecnología de turno, y procurando leerlo de los que más saben de la misma. Hoy en día, teniendo las fuentes de información correctas podemos tener datos casi en tiempo real de cualquier cosa que nos interese. Bien, aquí os dejo una colección de enlaces que leo a diario desde mi Universo de Netvibes.

Blyx Universe en Netvibes

Seguro que se me escapan muchos más que también son interesantes, así que cualquier comentario es bienvenido.

El Software Libre no es sólo un puñado de licencias, libertades y ficheros, también es una actitud.

Alfresco Hack: cómo sacar un informe rápido de los contenidos del repositorio

Ya lo vi hace tiempo en Think Alfresco y sabía que algún día lo iba a necesitar, ahora quiero compartirlo con vosotros. Sabemos lo que ocupa el repositorio, sería tan fácil como hacer un du -sh contentstore, pero ¿qué tipo de archivos almacena ese repositorio y cuantos de cada tipo? Saber ese dato es importante al hacer migraciones, optimizar Lucene, etc. Es tan fácil como ejecutar el siguiente comando desde el directorio superior al contentstore de turno:

$ find ./contentstore -type f -exec file -inb {} \;| sort |uniq -c|sort -nr

Este comando nos dará como resultado algo parecido a lo siguiente:

    378 application/msword
    147 application/pdf
     72 text/plain; charset=us-ascii
     58 text/x-c++; charset=iso-8859-1
     12 text/plain; charset=utf-8
      8 text/html
      2 application/x-zip
      2 text/plain; charset=iso-8859-1
      2 image/jpeg
      2 application/x-empty
      2 text/x-c; charset=utf-8
      1 text/x-c++; charset=utf-8
      1 image/png

Fácil ¿no? Claro que también se puede hacer con un JavaScript y ejecutarlo como acción pero pienso que así es más rápido, además es el “Sys Admin way”.

Acceder al todo el repositorio desde Alfresco Share (3.2r Enterprise)

access-to-repositoryUna nueva funcionalidad en Alfresco 3.2r Enterprise, es la capacidad de poder acceder al repositorio completo desde Alfresco Share y también a la navegación por categorías o etiquetas. Esto va reafirmando algo ya comentado por Alfresco en algun webinar, es decir, lo que conocemos como Alfresco Explorer o Web Client desaparecerá en futuras versiones (posiblemente en la 4.0) y en la versión 3.3 de Alfresco ya podremos hacer todo tipo de tareas directamente con Share.

Para activar esa característica (gracias Paul), simplemente hay que editar el fichero shared\classes\alfresco\web-extension\share-config-custom.xml

Busca la siguiente sección y cambia <visible>false</visible> por <visible>true</visible>:

<config evaluator="string-compare" condition="RepositoryLibrary" replace="true">
     <!--
        Whether the link to the Repository Library appears in the header component or not.
     -->
     <visible>true</visible>

Reinicia Alfresco y ya deberás tener acceso al repositorio a través del enlace como el que se ve en la captura de pantalla.