Sincronización de instancias de OpenCms

Uno de los temas sobre los que más se habló en la tarde tecnológica de OpenCms fue sobre los problemas que existían a la hora de poner OpenCms en clúster sin contar con el módulo de pago OCEE, pues bien, desde hace algún tiempo vengo trabajando, en mis ratos libres, en un módulo para este CMS que permita disponer de varias instancias del gestor de contenidos, consumiendo los datos de una base de datos común, de forma que los cambios que realice en una instancia se propaguen a las demás. Por defecto, OpenCms dispone de una serie de funcionalidades de caché que no permiten el comportamiento anterior, dificultando de esta forma la posibilidad de disponer de un clúster de instancias de OpenCms.

Para paliar este problema he desarrollado el módulo “org.opencms.free.balance” cuya base de funcionamiento es sencilla, cada vez que se realice una modificación de los contenidos, desde cualquiera de las instancias de OpenCms, todas las demás se actualizan, a través de un servicios web, de forma que el contenido está disponible y listo para ser servido por cualquiera de los nodos.

La anatomía del módulo es la siguiente:

  1. admin: Componente encargado de llevar a cabo la administración de los nodos, en esta primera versión alpha sólo CRUD de los nodos del cluster.
  2. action: Componente encargado de interceptar las acciones que se realizan sobre OpenCms y en función de dicha acción creación, modificiación, etc le pedirá a los demás nodos del clúster que se actualicen para que puedan disponer de los cambios realizados.
  3. client: Componente que se encarga de realizar la llamada de sincronización del servicio web.
  4. webservice: Componente que se encarga de atender las peticiones de los clientes y de sincronizar, borrando la caché de OpenCms del servidor que se encuentra alojado.

Para llevar a cabo su instalación es necesario, además de desplegar el módulo, instalar un servicio web en el contexto de OpenCms.

He creado un proyecto en Google Code donde os podréis descargar el módulo, por supuesto, cualquiera que se anime a colaborar será bienvenido 😉

Anuncios

17 respuestas a Sincronización de instancias de OpenCms

  1. Roger Frauca dice:

    Hola Ángel,
    Me parece una solución excelente y un gran trabajo.
    Como solución a securizar las peticiones de los webservices, no la veo muy clara. La idea de mantener la seguridad con el propio Opencms, la veo un pelín difícil. Lo he mirado i es sencillo conseguir el CmsUser des de el CmsObject, i de allí se podría conseguir el I_CmsPrincipal… pero no consigo encontrar como conseguir la cookie validada del I_CmsPrincipal. Otra idea serai consiguir la HTTPRequest i reenviar todas las cookies de la misma, pero tampoco veo como conseguirla desde ele evento. Así que otra alternativa seria un sistema de tikets. Es decidir generas un tiket aleatoriamente i lo apuntas en la base de datos, cuando el servidor tenga que procesar la petición de limpiar la cache, le llegara ese tiket por parámetro i lo valida consultando en la base de datos.
    Otro tema interesante es el tipo de eventos a escuchar. Como lo tienes configurado es perfecto para más de una editora en cluster. Pero si tienes una editora i N lectoras se podría mejorar solo escuchando al evento de publicación ya que funcionaria correctamente y se ganaría en rendimiento. Tal como lo tienes es muy sencillo reprogramarlo según las necesidades del proyecto. Configurarlo se podría hacer mediante parámetros del modulo. Otra opción también muy simple seria poder extender la clase BalanceListener y configurar en el modulo que clase debe implementar dicha acción. Así la nueva clase que extienda dicho BalenceListener solo tendría que indicar que eventos escuchar.

    Otra mejora de más largo término seria usar el JMS en lugar de webservices. El cambio seria costoso a nivel de reprogramación. La ventaja seria que al lanzar un JMS el Opencms no tendría que esperar a la respuesta de la petición http como sucede en webservices i se ganara en rendimiento. Ya que al escuchar todos los eventos las peticiones por http pueden resultar un cuello de botella.

    • Ángel Cristóbal Lázaro Ríos dice:

      Muchas gracias por tu aportación Roger, es muy interesante todo lo que comentas, me lo apunto.

      Un abrazo

  2. Ummmm, creo que no entendi bien el problema de la seguridad, donde está realmente el problema?

    A ver si lo entendí, el receptor del WS, debe limpiar la Cache, y esto debe hacerlo siendo un usuario con permisos, no es así? es aquí el problema?

    Saludos.

  3. Ángel Cristóbal Lázaro Ríos dice:

    Hola Sergio,

    Realmente el problema de esta primera versión alpha del módulo es que no realiza ningún tipo de validación de quién realiza la petición de limpieza de la cache de los nodos del clúster, la idea que comenta Roger es que la validación la realice en base a los usuarios definidos en OpenCms.

    Por cierto, muchas gracias por la noticia en OpenCms Hispano (http://www.opencmshispano.es/nav/noticias/noticia_0073.html), estoy seguro que ahora la idea del módulo llegará a mucha más gente.

    Un saludo.

    Ángel C. Lázaro

  4. Ahmmm, ok ok, ahora entiendo. Hombre, yo quizas lo que haría sería seguir el estandar de WS para estos casos, no? se usa el WSS con certificado digital, de forma que generamos un certificado propio y que solo las peticiones que se hagan con nuestro certificado sean las aceptadas, no?? Si os digo la verdad no sé la complejidad que esto puede tener, pero sería cuestión de echarle un vistazo.

    Saludos.

  5. ¡Bravo por la iniciativa!

    Le estoy echando un vistazo al svn del google code del proyecto, ¡y la verdad es que pinta muy bien! Si veo que puedo aportar en algo, lo haré encantado, es algo de lo que realmente nos podemos beneficiar todos (menos Alkacon xDDDDDDDDDD).

    • Ángel Cristóbal Lázaro Ríos dice:

      Muchas gracias por tu comentario Francisco,
      Este fin de semana intentaré crear las tareas que se han de realizar de cara a la versión beta del módulo, así que estate atento por si hay algo que te apetezca hacer 😉
      Un saludo

  6. Manuel Merino dice:

    Hola Ángel! Estuve realizando hace poco una revisión al código fuente (en aquel entonces vi que faltaba el código del Action entre otras cosas quizás), pero tiene buena pinta y si hay algo que pueda ayudarte me dices y me pongo con ello desde ya! 😀

    • Ángel Cristóbal Lázaro Ríos dice:

      Hola Manuel,
      Efectivamente el action está vacío porque la acción se ha incluido en el paquete listener, aunque es un action :-(, me lo apunto para arreglarlo en la próxima release. Por favor, si ves cualquier otra cosa o crees que existe alguna forma de mejorar el módulo no dudes en ponerte en contacto conmigo para que pueda solucionarlo, muchas gracias por tu aportación.
      Un saludo.

  7. OpenCMS dice:

    Angel, tiene buena pinta ese modulo!!

    Yo tengo quiero tener 2 servidores, cada uno con su base de datos (con replicacion), y replicar el contenido de un “master” al otro “slave” (similar al modulo OCEE de cluster).
    Deberia ser trivial adaptar tu fuente a eso, no crees?
    Un saludo,

    • Ángel Cristóbal Lázaro Ríos dice:

      Hola,

      Como comentas no debería ser muy difícil, lo más trabajo me costó al implementar el módulo fue averiguar cómo OpenCms vacía la caché para sincronizar los datos, lo que sí debes tener claro es que en la arquitectura que me comentas la escritura de nuevos contenidos sólo la podrás realizar a través de la instancia que ataca contra el master, ésta es una de las deficiencias que entiendo que tiene el módulo OCEE.

      Si tienes claro lo que quieres coméntamelo a ver si te puedo echar una mano.

      Un saludo.

      • OpenCMS dice:

        Exactamente. Las publicaciones se realizarian solo desde una instancia.

        Se me hace arriesgado dejar una unica instancia de bbdd ya que es para un sitio que va a tener mucha carga, publicaciones que se realizan con alta frecuencia y que requiere de alta disponibilidad de servicio.

      • Ángel Cristóbal Lázaro Ríos dice:

        Bajo esas premisas, está claro que la utilización de un clúster de BD es la mejor opción, ya me contarás que tal la experiencia, por supuesto si tienes algún problema y te puedo ayudar, no dudes en decirlo a ver si te podemos echar una mano.

        Suerte!!!

  8. Laura dice:

    Hola Ángel,
    enhorabuena por el módulo, aún no lo he usado pero me parece interesante y no se si me solucionaria un problema que tengo. Tengo un entorno simila un bd común y una instancias de administración y dos en las q se sirve el contenido que se añade en la de administración. están sobre bea weblogic y la versión de opencms es la 6. en este entorno la sincronización sin un módulo extra funciona. el problema, hemos migrado a opencms 7 y no se refresca el contenido!sólo actualiza cada vez q reinicias instancias,cuando compilado la jsp… que diferencias hay entre estas versiones, la 6 y la 7.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: