Skip to main content

El arte de explotar portales de alto rendimiento con Liferay

Existe mucha lectura sobre Liferay, pero no resulta fácil encontrar contenido que trate de una forma clara y sencilla los aspectos que tenemos que controlar en una instalación o bien las que nos implante un proveedor, cuando abordamos un proyecto cuya pieza principal es Liferay, de forma que, desde el primer momento, tengamos la garantía de que el resultado final será una plataforma robusta y escalable, sin necesidad de asumir riesgos innecesarios.

Si has llegado a este post es porque estas convencido que Liferay es la mejor solución Java como plataforma web empresarial para construir portales de tipo colaborativo, e-commerce, e-learning, corporativo, social media, etc.

Y es muy probable que tengas claro que Liferay es la solución que nos permite desarrollar rápidamente nuevas funcionalidades y que, además, está alineado con los estándares de portales actuales, así como a las tendencias tecnológicas, pero no descuides los aspectos que vamos a tratar en este post 😉

El análisis preliminar sobre la arquitectura Liferay requerida

No me considero un experto en Liferay, pero desde el punto de vista de operación, sigo viendo que muchos de los problemas que actualmente existen en entornos web productivos, se deben a que no somos rigurosos con todos los elementos que deben ser tratados durante la implantación de una solución empresarial web, sobre la que depende, posiblemente, gran parte de mi negocio e ingresos.

¿Que importancia tienen los aspectos de sistemas y arquitectura frente a los desarrollos?

Para tener una respuesta objetiva, a continuación expongo una lista con 20 cuestiones que yo me pregunto y siempre tengo en mente al arrancar un proyecto, en general para cualquier solución web y, más concretamente, para un proyecto basado en Liferay:

  1. ¿Se requiere integración con otros sistemas backend (ERP, CRM, etc.) y qué implicaciones podemos tener a nivel de seguridad, arquitectura y rendimiento?
  2. ¿Necesito alta disponibilidad y/o tolerancia a fallos en las diferentes capas tradicionales de un desarrollo web: presentación, lógica y datos?
  3. ¿Estamos evaluando lo que nos puede penalizar la sincronización continua entre los diferentes nodos de un cluster?
  4. ¿Necesito una solución hardware de balanceo para mi plataforma Liferay o puedo optar por una solución software?
  5. ¿Es una base de dados relacional la mejor opción para hacer persistencia de todos los contenidos y recursos multimedia o incluimos también un sistema de ficheros compartido?
  6. ¿Qué tipo de cache de segundo nivel voy a necesitar para no penalizar el rendimiento?
  7. ¿Qué sistema operativo debo usar y que tipo de configuración óptima debo realizar sobre el mismo?
  8. ¿Estamos evaluando cómo dimensionar correctamente la maquina virtual Java y que tipo de configuración voy a necesitar?
  9. ¿Qué aspectos de configuración de la plataforma vamos a considerar para intentar influenciar en una mejora del posicionamiento web?
  10. ¿Necesito elementos para realizar analítica web y un sistema para medir conversiones por determinados objetivos preconfigurados?
  11. ¿Cómo vamos a realizar la monitorización de los diferentes servicios y elementos implicados de la plataforma para verificar que la mantenemos saludable?
  12. ¿Qué efectos colaterales negativos y legales puede tener una inadecuada configuración de las cookies de mi plataforma?
  13. ¿Conocemos los diferentes procesos implicados cuando la plataforma esta en ejecución y cómo debemos realizar una parada ordenada de los diferentes servicios en una arquitectura clusterizada que requiere  sincronización constante entre nodos?
  14. ¿Voy a tener en cuenta cómo aplicar futuras actualizaciones de Liferay y la aplicación de parches con garantías?
  15. ¿Puedo tener una plataforma Liferay empresarial completa sin coste de licencias?
  16. ¿Me puede interesar usar como repositorio de los metadatos una solución privativa sin coste alguno, como puede ser el caso de determinadas versiones de Oracle que no requieren licencia?
  17. ¿Como debo desarrollar para conseguir que mis despliegues se puedan hacer siempre en caliente y no comprometan la plataforma?
  18. ¿Plataforma virtualizada, física o en la nube?
  19. ¿Voy a realizar un análisis de rendimiento de los diferentes elementos implicados antes de salir a producción o, como ahora parece que los recursos son ilimitados, lo pasamos por alto?
  20. ¿Tenemos la seguridad física y lógica deseada? Mejor arquitectura no siempre significa mejor seguridad y, ojo con la instalación por defecto de Liferay, que nos podemos ver seriamente comprometidos 🙁

Muchas de las cuestiones anteriores están condicionadas al uso e importancia que va a tener el portal dentro de mi organización, aunque soy de la opinión que independientemente del tipo de portal que usemos, siempre debemos intentar respetar unos mínimos.

GFI y Liferay

La optimización Liferay para el “despegue”

Si os parece, vamos ahora a bajar a un nivel más técnico para dar algunas pinceladas sobre aspectos de tuning y optimización que nuestro técnico o proveedor debería tener en mente cuando nos vaya a realizar una implantación Liferay en productivo:

  • Ajuste fino del pool de thread y máxima conexiones en los diferentes componentes implicados.
  • Ajuste fino del pool JDBC para la base de datos.
  • Desactivar filtros, contextos y conectores que no vamos a usar para agilizar el arranque y consumo de recursos.
  • Configuración de parámetros JVM y del GC.
  • Determinar el tipo de cache de segundo nivel.
  • Reconsiderar si remplazar el motor de indexación Lucene por Solr si vamos a tener un volumen importante de datos a indexar.
  • Configuración óptima del indexador de búsquedas y sobre todo en un entorno clusterizado para minimizar el reindexado y los bloqueos, así como el tipo de persistencia requerida.
  • Optimizar el incremento de contador en Liferay que está relacionado con las claves primarias de la base de datos.
  • Determinar si se usar un CDN.
  • Incluir en la arquitectura un servidor web para el contenido estáticos correctamente configurado.
  • Usar la técnica database sharding para escalar nuestra base de datos horizontalmente.
  • Comprobar si durante el desarrollo se ha usado la técnica CSS/JS Sprites.
  • Eliminamos portlets que no se usen en Liferay, agilizando el tiempo de arranque y el uso de recursos del sistema.
  • Eliminamos aplicaciones web y servicios que no se usen por la misma razón del punto anterior.
  • También es posible aligerar el contenido de la base de datos que se instala por defecto.
  • Definir compresión y unión de todos los JS y CSS para reducir el tiempo de ejecución y de peticiones HTTP.
  • Para los filtros más importantes (HeaderFilter, MinifierFilter y GzipFilter), realizar una correcta configuración.
  • Configuración correcta para tener conexiones https en las urls que se requieran.
  • Realicemos un mínimo test de seguridad y hashing de password.
  • Definir una red privada para el tráfico multicast, definir correctamente tabla de rutas y deshabilitar IPv6, así como verificar la topología de red de la organización y sus latencias.
  • Establecer correctamente los niveles de log.
  • Optimización a nivel de sistema operativo (nivel de arranque, servicios innecesarios, parámetros kernel, limites de recursos, tamaño de buffers, etc.) y base de datos (análisis de bloqueos y rendimiento).

Y otras buenas prácticas antes de salir a productivo

  • Comprobar que no existe cacheado de páginas con datos sensibles cuando el usuario no esta logado.
  • Comprobar, en un entorno clusterizado si la caída de un nodo es transparente para el usuario y no existe perdida de sesión, así como el balanceo de peticiones.
  • Comprobar, activando el modo debug en las clases más críticas relacionadas con el cluster y la cache, para verificar que todo funciona correctamente.
  • Comprobar dependencias de librerías, para evitar problemas en la serialización y deserialización de objetos Java durante el proceso de replicación de objetos en sesión.
  • Comprobar la correcta configuración del cluster para que no pueda recibir mensajes a través del canal TCP.
  • Comprobar el correcto funcionamiento del proceso de reindexación evitando inconsistencias en los datos.
  • Comprobar que los despliegues sobre la plataforma son limpios y sin errores.
  • Evaluemos el rendimiento de las páginas principales con herramientas tipo: speed de google, yslow,  gxtmetrix, pindoon, woorkank, entre otras.

Aviso a los equipos de desarrollo

Los equipos de desarrollo no deberían olvidar los siguientes aspectos básicos:

  • Como parte del aseguramiento de calidad debemos automatizar las tareas de compilación, paquetización y despliegue evitando esa dependencia con el IDE de desarrollo.
  • Si hemos definido una arquitectura clusterizada, recordemos a los equipos de desarrollo los aspectos que deben tener en cuenta.
  • El arquitecto de desarrollo debe definir claramente las buenas practicas en el uso de determinados frameworks para una correcta optimización, así como la configuración del IDE a usar, profiler, etc…
  • Avisemos al equipo desarrollo de usar la técnica CSS/JS Sprites durante los desarrollos.
  • Recordemos cual sería la posición óptima del código JavaScript durante los desarrollos de Portlets para no penalizar el rendimiento.
  • Evitemos desarrollar haciendo uso de las Liferay extension y cuando sea necesario que se justifique.
  • Definamos desde el principio los procedimientos y herramientas requeridos para el proceso de entrega y la comunicación con los equipos de test y explotación.
  • Deben tener siempre a la mano dos guías básicas: guía de optimización para motores de búsqueda y las mejores prácticas para mejorar el rendimiento de tu portal.
  • Y copiar de los que saben para “presumir” de la doble A :). Mis dos referencias destacadas:
Conoce la calidad de tu portal con gtmetrix.com y te sorprenderás :(
Conoce la calidad de tu portal con gtmetrix.com y te sorprenderás…

¿Cómo podemos ayudarte desde GFI?

En resumen:

  • Auditar implantaciones realizadas por terceros para mejorarlas.
  • Acompañamiento durante todo el ciclo de vida de un proyecto Liferay.
  • Colaboración durante la fase de explotación para reducir riesgo, coste y tiempo.

Nos gusta compartir el conocimiento. No dudes en dejar tu comentario sobre cualquier punto 😉

 

 

Jesús Pérez Franco

Jesús Pérez Franco

Gerente de Operaciones en gfi.es con más de 17 años de experiencia en el sector, con perfil tecnológico mixto combinando conocimientos técnicos, negocio y de gestión. Seguidor de las tendencias #devops #agile #lean #cloud #aws #bigdata #iot #ecommerce

Jesús Pérez Franco ha escrito 3 entradas


Jesús Pérez Franco

Jesús Pérez Franco

Gerente de Operaciones en gfi.es con más de 17 años de experiencia en el sector, con perfil tecnológico mixto combinando conocimientos técnicos, negocio y de gestión. Seguidor de las tendencias #devops #agile #lean #cloud #aws #bigdata #iot #ecommerce

Un comentario en “El arte de explotar portales de alto rendimiento con Liferay

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *