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.

42 thoughts to “Arquitecturas en Alfresco”

  1. Gracias Paco. Victor si, de hecho lo hemos hablado internamente para ampliar alguna documentación en ese sentido, contemplar los usuarios en otro repositorio. Ya trataré la parte de autenticación y los subsistemas de seguridad más detalladamente.

    Gracias!

  2. OK Toni, pero a parte del SSO y demas… recuerdo que las pruebas con OpenDS y Centos DS fueron bastante bien, tanto en formato multimaster como replica simple consummer-supplier.

    Por otro lado al margen de la parte de Seguridad (autenticacion mayormente), como ya hemos comentado en mas de una ocasion podriamos hacer lo mismo con la parte de Almacenamiento.

    Salu2.

  3. Buenas Toni,
    ante todo decir que me parece muy útil este artículo, pero hay una cosa que no tengo clara y es la diferencia entre el repositorio y el almacen de contenidos. No sé si con respecto al content store te refieres al servidor de aplicaciones.
    Un saludo y gracias de antemano.

  4. Gracias José María, la verdad es que puede confundir, pero es importante diferenciar los componentes para entender bien a la hora de desacoplarlos. Cuando hablo de repositorio me refiero a la aplicación como tal, es decir, el software que gestiona la información. Y esa información (los ficheros/contenidos) son el almacén de datos o content store. ¿Mejor ahora?
    Saludos.

  5. Buenas Toni
    Saliendo un poco del tema, te queria preguntar algunas cosas, ya que veo que dominas mucho alfresco, aca te digo mis preguntas.

    tengo instalada la version comunity 3.2 corre en linux, autentifica contra un servidor openldap en linux mi pregunta es, como puedo hacer para que puedan acceder por CIFS al repositorio de alfresco, es posible eso?? y si es asi me podrias recomedar alguna web?

    la otra pregunta es, sobre el versionamiento de documentos, cuando hago un export del directorio este no contienen el versionamiento, como puedo lograr exportar ese versionamiento.

    Un saludo y muchas gracias de antemano

    Pedro

  6. Gracias por tu ayuda toni
    lo del CIFS me quedo muy claro, solo una duda sobre el export
    como podria sacar ese version history de los documentos???
    hay alguna manera aparte del export??

    Me seria de mucha ayuda =)

    Un saludo y muchas gracias de antemano
    Pedro

  7. Buenas tardes, la información está muy clara, pero donde podríamos encontrar ejemplos de configuración de cada uno de los servicios para adoptar alguna de esas arquitecturas?

  8. Hola Francisco, es configuración de los diferentes componentes, en la wiki de Alfresco puedes encontrar toda esa información. Para arquitecturas complejas de grandes entornos, los clientes Enterprise tiene acceso a guias específicas.

    Saludos.

  9. Hola Toni, primero debo felicitarte por el gran aporte que haces al relolver consultas tan puntuales. Eso es muy valorable 😉

    Bueno, ahora quisiera consultarte sobre la migración de Alfresco 3.2 de una máquina a otra.
    Leyendo por allá y por acá hablan de respaldar la Base de Datos y copiar el directorio alf_data y con eso estaríamos listos, pero tambien habla de los índices (que se encuentran también en alf_data)… corrígeme si me equivoco por favor.

    tu me podría explicar un poco esa parte de los índices de Lucene ¿que significa esos index?, ¿qué implica si no están bien configurados? y si hay alguna herramienta para hacer copia de seguridad o tiene que ser todo a manito?

    Desde ya muchisimas gracias y saludos cordiales.

  10. Gracias Jose,
    En los índices se almacena la información referente a los contenidos (metadatos, nombre, contenido de los ficheros, etc), para poder localizarlos posteriormente haciendo búsquedas. No tener bien configurados los índices pueden hacer que Alfresco no funcione correctamente o que el rendimiento no sea óptimo. Cada noche se hace automáticamente una copia de seguridad de los índices (a las 3AM, hora del servidor), los ficheros que genera ese backup son los que debes copiar en tu copia de seguridad junto a la base de datos y contentstore (alf_data).
    Saludos.

  11. Hola Toni.

    En primer lugar quería felicitarte no sólo por este post, sino por el blog en sí. Desde mi desconocimiento total sobre instalaciones Alfresco quería hacerte algunas preguntas que me han surgido al leer este post.

    1) Ubicación de los índices y el content store

    Comentas que un posible cuello de botella puede ser el tener el content store y la base de datos en la misma máquina sobre el mismo disco duro porque eso supone que cada vez que se suba un fichero o realizamos alguna acción sobre algún fichero se escribe simultáneamente en base de datos y content store, por lo que el disco duro debe escribir al mismo tiempo en varios sitios diferentes, lo que repercute en tener un sistema lento.

    Sin embargo, en los modelos de dos capas y de tres capas explicas que en la capa de almacenamiento deben ir estos dos elementos (base de datos y content store). ¿Es un error o es que no es posible tenerlos separados?.

    2) ¿Hay otras soluciones para mejorar la velocidad o rendimiento de una instalación?. No sé, por ejemplo colocando los índices y la base de datos en el mismo sitio.

    Un saludo y muchas gracias.

  12. Hola, gracia a ti por participar.
    1) Cuando hablo que la base de datos y el content store están en otra capa por debajo no significa que deban estar en la misma máquina. De hecho, algo muy común puede ser tener el contentstore en una cabina de almacenamiento tipo NAS (NFS, CIFS, etc) o SAN. Y la base de datos en su servidor de base de datos dedicado, que generalmente no es un servidor de bbdd dedicado a Alfresco sino uno corporativo con más bases de datos.

    2) Es recomendable tener los índices siempre en local (mismo servidor que el repositorio, es decir, mismo servidor que el alfresco.war) y en los discos más rápidos que tengamos disponibles. También podemos usar content store selector para acelerar la escritura en disco dependiendo del tipo o tamaño de los ficheros. Haciendo tuning de la base de datos y de la JVM, etc.

    Saludos.

  13. Hola me podrian indicar o explicar las diferencias entre alfresco share y explorer, estoy por implementar el mismo para gestionar actas de examenes , me gustaria saber cual es mas conveniente creo que me inclino mas por share.
    Gracias

  14. Hola Julia,

    Alfresco Explorer es la interfaz web que está dentro de Alfresco Repository (alfresco.war), está hecha en JSF y no se sigue evolucionando aunque se mantiene. Alfresco Share es una interfaz web dedicada para interactuar con Alfresco y que sustituye Alfresco Explorer, de hecho Share ya tiene más funcionalidades y es la que se evoluciona.

    Te recomiendo que uses Share para tus aplicaciones, seguro que a los usuarios le parece más sencillo, amigable y además tiene características de valor añadido.

    Saludos.

  15. Hola buen día,

    Alguno de ustedes sabrá las tablas que tienen relacion para las etiquetas?

    Tengo instalado Alfresco v4.0 en un equipo. Se le dieron mantenimiento a las etiquetas, pues había algunas que eran de prueba y ahora al realizar búsquedas no me aparecen resultados.

    Cuando trato de administrar las eqtiquetas desde share aparece el siguiente error:

    07220044 Wrapped Exception (with status template): 07223086 Failed to execute script ‘classpath*:alfresco/templates/webscripts/org/alfresco/repository/tagging/tags.get.js’: 07223085

    Me he documentado en el tema y al parecer el problema se debe a que se borraron carpetas y documentos que aún contaban con etiquetas. Mi idea es buscar las etiquetas de la tabla alf_prop_string_value en la tabla de relación para borrar los registros que sobran.

    Muchas gracias por toda la yuda que me puedan proporcionar

  16. Si tienes mysql puedes usar http://dev.mysql.com/workbench/ para generar un diagrama gráfico con las tablas de la BBDD y ver donde se almacenan, aunque lo ideal es hacerlo mediante la API.

    Recuerda que las etiquetas y las categorías se indexan en SOLR y debes esperar 15 segundos cuando haces un cambio para verlo reflejado en el panel de administración.

    Saludos.

  17. La BD está en postgres podría utilizar alguna otra herramienta?

    Te agradezco.

    Saludos.

  18. Buenos días, ante todo disculparme por la pregunta, soy un chico que se encuentra haciendo practicas de empresa y al que le han pedido búsqueda de información sobre Alfresco, y estoy algo verde con esto la verdad, mi pregunta es la siguiente:

    He implementado Alfresco community 4.2.c en una maquina virtual con Windows 2008 server, he estado buscando información si Alfresco puede hacer de intermediario entre la gestión de los archivos , pero estando estos alojados en el servidor de la empresa , ¿es posible esto?

    Cualquier respuesta o guía , me vendría genial , gracias de antemano , y disculpen mi ignorancia, si no me he explicado muy bien.

    Un cordial saludo

  19. Tony utilizo en ambiente de producción de 2 empresas una arquitectura de 2 capas sin inconveniente.

    Estas dos empresas utilizan Alfresco comunnity 4.2.e (empresa X 2 capas y empresa Y 2 capas) y que se fusionaron recientemente, desean consolidar en una única arquitectura de 2 capas.

    Como migro la data y BBDD??? y consolido todo en una sola empresa XY. O es imposible esta consolidacion y deberan mantener por separado Alfresco tal cual lo tenían antes de fusionarse.

  20. Hola Alfred, la respuesta a lo que preguntas no es facil ya que depende mucho del nivel de personalización que tengas en ambas instalaciones, pero básicamente deberías hacer algo como lo siguiente.
    -Decidir cual de los dos entornos va a ser el soporte la consolidación.
    -Dimensionarlo acorde a los nuevos requerimientos de tener más usuarios, concurrencia, documentos, etc.
    -Configurar o añadir las personalizaciones del sistema que vas a desechar al sistema consolidado.
    -Migrar los contenidos mediante CMIS posiblemente. Para ello mira aquí: http://blyx.com/2012/08/29/migrar-a-alfresco-estrategia-soluciones/

    Saludos

  21. Toni, muy bueno tu articulo, estoy en Argentina y tengo en mi empresa Alfresco Community 4.2.e y enfrentamos problemas de ralentizacion a mitad del dia, tal vez esto se debe a que tengo toda la aplicacion en una capa? Tengo 50 usuarios y aprox 1M de documentos, no encontre la manera de saber si esto es mucho para alfresco en cant de usuarios o documentos.

  22. Hola Federico,

    Necesitaría más detalles de la arquitectura del despliegue pero todo apunta a un problema de configuración, memoria, etc. Recuerda que no es una buena práctica tenerlo todo en la misma máquina, por ejemplo deberías tener al menos el servidor de aplicaciones en un servidor y la base de datos en otro. Y no dejes nunca la configuración por defecto de la JVM, base de datos, etc. Ya que esa configuración no está destinada para producción.

    Saludos.

  23. Toni, gracias por la respuesta!! Por desgracia por estos pagos no encontre gente que sepa de Alfresco y Alfresco Oficial no nos ha contestado los mail 🙁

    Cuento con un server con 4 cores 8 gb de ram (6 asignados a jvm) 1tb de disco. Gracias a tu post ya comunique la urgencia de separar al menos la DB a otro server.

    Podrias indicarme alguna configuración standard optima de JVM – DB (postgres) para producción para saber por donde empezar a testear?

    Saludos y gracias por tu aporte!!

  24. Alfresco no da soporte a la version community esa es la razon de no responder. Recuerda tambien ajustar el db.pool.max en alfresco y en el lado de la db. Saludos!

  25. buenas noches

    soy nueva en esto de alfresco mi problema es el siguiente: tengo instalado alfresco en un equipo virtual centos y base de datos mysql en un servidor remoto, funciona correctamente pero quisiera instalar otro alfresco que use la misma base de datos, he dado los privilegios de usuario en el servidor mysql pero no logro que el segundo alfresco se conecte a la base de datos

  26. Hola Adri, deberias tener algún tipo de error en el nuevo alfresco que estas levantando. También puedes probar usando mysql client desde el servidor nuevo de alfresco a ver si realmente conectas con el servidor mysql remoto para descartar que sea un problema de conectividad o permisos en mysql.

    Si quieres montar un cluster de Alfresco recuerda que no solo debes usar una misma base de datos en ambos alfrescos sino también el mismo contentstore, y recuerda que cluster en Alfresco Community no está soportado.

    Saludls.

  27. consulta amigo instale alfresco en un equipo pero no logro que se vea en mi red LAN le agruegue la ip desde el comienzo cuando se configura, reviso el archivo properties.ini lo dejo con la ip local que quiero lo busco en otro equipo y no me funca me podrias ayudar coppn ese problema? desde ya gracias

  28. Buenas noches.
    Donde puedo conseguir información referente a la estructura de la base de datos alfresco. como esta constituida, cuantas tablas tiene y cuales son sus características. nombre de cada tabla, atributos y función dentro del sistema. diccionario de datos. Muchas gracias. soy estudiante y requiero la información para concretar un trabajo.

  29. Muchas gracias hermano. Solo estoy preparando el diccionario de datos completo de alfresco como asignación en la universidad donde estudio. Muy agradecido. saludos. <si sabes de otra pagina donde pueda obtener la descripción de cada una de las tablas con sus atributos te lo agradecería. saludos.

  30. para lograr conectar el alfresco con otra pc tengo que desabilitar el firewall. Como puedo configurar para conectarme utilizando el firewall activado?

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.