Trabajo frontal en el desarrollo de back-end de los portales más grandes en software de código abierto: compartir experiencias

Una de las áreas del grupo de empresas de Diseño digital es la creación de soluciones de portal que brinden a los usuarios finales un gran conjunto de servicios personalizados dentro de un solo sitio. Los servicios pueden ser diferentes: noticias, foros, repositorios de documentos, estadísticas, eventos, etc. — esto es lo que llamamos el portal. En este artículo me gustaría contar cómo el equipo y yo creamos soluciones de portal: qué usamos, qué ventajas y desventajas de nuestra implementación son posibles.




En general, la idea de un portal con sus propias manos no surgió por casualidad. Recientemente, Rusia introdujo restricciones en el uso de software propietario, que afectó principalmente a las grandes empresas de TI que trabajan en estrecha simbiosis con el sector público. Nuestra experiencia trabajando en portales en el entorno externo e interno de los empleadores más grandes en Rusia y en el extranjero nos permitió evaluar las mejores prácticas y estandarizar muchas cosas.

Por ejemplo, el sitio de RosstandartEstá en el dominio público, tiene un gran flujo de visitantes, por lo que buscamos y creamos soluciones que funcionen de manera estable en condiciones de alta carga instantánea. También debe tener en cuenta que muchos elementos del portal deben indexarse ​​en los motores de búsqueda (desde el punto de vista de una solución de portal autoescrita, esto no es tan simple y obvio como parece), pero no utilizamos soluciones preparadas y CMS (ya que no todos podían manejarlo) tareas establecidas por el cliente).

El principal interés de la implementación para nosotros como desarrolladores es que cada servicio de portal es una unidad autónoma que puede existir sin saber nada sobre los servicios vecinos. Debido a esto, se pueden desarrollar, actualizar y escalar independientemente uno del otro.

Este artículo es la primera parte de una serie de artículos: describe cómo se ve todo desde el lado del backend, qué tecnologías usamos, cómo se organiza la arquitectura, qué dificultades y ventajas tiene nuestro enfoque. Los siguientes artículos también describirán el lado del desarrollo frontend.

Vamos a empezar.

Arquitectura


El objetivo principal era desarrollar una plataforma basada en soluciones de código abierto, que sea fácil de escalar y mantener.

Esta plataforma tiene dos opciones de implementación en las instalaciones del cliente:

1) La primera opción requiere más capacidades, pero le permite escalar y admitir fácilmente múltiples sistemas al mismo tiempo debido a la arquitectura de microservicio. Hay muchas formas de implementarlo, pero elegimos el marco Spring Cloud (Gateway, Discovery) junto con Spring Boot (basado en la experiencia, nuestro arquitecto Java decidió que esta pila de tecnología sería la más adecuada para estas tareas).



2) La segunda opción es modular. Se considera si se planea admitir solo un sistema (portal). Esta opción es buena porque toda la infraestructura se puede implementar en uno o dos servidores.



Tecnologías utilizadas


Abra JDK 8

Wildfly -

Servidor de aplicaciones PostgreSQL - DBMS. Todos los módulos se implementan sobre la base de tecnologías ORM, por lo tanto, en teoría, facilitará la migración a otro DBMS.

ExoPlatform es una plataforma de portal que le permite combinar varios módulos en una sola aplicación web, administrar su ubicación en la página, administrar derechos de acceso y mucho más. La versión comunitaria se puede descargar en el sitio web oficial , pero solo para el servidor de aplicaciones Tomcat. Puede tomar las fuentes y modificar el ensamblaje de la plataforma para Wildfly. Holivar en este artículo sobre el tema: "por qué no eligió Liferay" no organizará.

Módulos- estos son los llamados portlets, se ejecutan en el contenedor del portlet y son responsables de dibujar su área en la página. Los portlets se están desarrollando de acuerdo con la especificación JSR ( JSR 362 ).

Spring Framework es la base de todas las aplicaciones desarrolladas en diseño digital desde el punto de vista del desarrollo de Java ( https://spring.io/ ). El marco tiene muchos módulos para implementar diversas tareas (Spring MVC, Spring Mail, Spring Data (JPA), Spring JMS y mucho más).

Spring Cloud : la base para el desarrollo de microservicios (Discovery, Gateway, Ribbon, Config Server).

Capa clave- servidor de autorización y control de acceso (IDM \ IAM). El servidor admite varios protocolos de autorización (OpenId, SAML, Oauth, Kerberos). Esto le permite administrar fácilmente las estrategias de autorización, configurar los derechos de acceso y garantizar la seguridad del acceso a los recursos del sistema. (https://www.keycloak.org/).

Kurento es un servidor de medios. Se utilizó para desarrollar transmisiones de video y audio entre usuarios que utilizan el protocolo WebRTC (https://www.kurento.org/).

Elasticsearch es un servidor de búsqueda de texto completo. Para buscar en el portal, se desarrolló su propio rastreador, que recopiló datos del portal para su indexación, así como un analizador para extraer el contenido de los archivos.

Swagger es una guía autodocumentada para interactuar con la API Rest.

Jasperepors- Marco de informes. JasperStudio se utiliza para crear plantillas de informes.

Graylog es un servidor para recopilar registros de aplicaciones.

Todos los módulos están construidos con Maven y CI \ CD (Jenkins).

Módulos y Servicios


Los microservicios que aseguran el funcionamiento de los módulos incluyen:

  • Servicio de administración de archivos : un microservicio que le permite almacenar datos en un solo almacenamiento, analizar los contenidos, convertir archivos a otros formatos para reproducirlos o mostrarlos en la interfaz web, descargarlos y adjuntarlos a otros sistemas. Así como la coedición de archivos y sus versiones.
  • – , . , , Elasticseach ( , ..). Apache Tika, .
  • – , - \- WebRTC - Kurento.
  • – , . ElasticSearch, JasperReports.
  • \ – , .
  • – , , , .
  • - – , Workflow BPMN. JBPM.



  • WCM – .
  • – , , .
  • – .
  • – .
  • – .
  • – .
  • — - c .
  • – -. , , .
  • Estructura organizativa : varios directorios e informes.
  • Módulo administrativo : gestión de derechos de acceso al portal, sitios, páginas, retratos y configuraciones de visualización para portlets, páginas y portales virtuales.
  • Navegación : le permite crear una navegación personalizada en el portal y los nodos del portal.
  • Encuestas y pruebas : un módulo grande con la capacidad de crear pruebas y encuestas de varios tipos (desde una sola opción, hasta bucles de preguntas y diferenciales). Diseñado para probar, capacitar y realizar encuestas entre los usuarios del portal.

Y hay muchos otros módulos específicos y no muy con procesos de negocio para clientes específicos. Hay alrededor de 30 de ellos.

Dificultades y ventajas

Beneficios de esta solución.


  • , .
  • , , , .
  • JNDI, . .
  • , .
  • , , .
  • .
  • , , open-source , .
  • .
  • open-source , .

,


  • API – .
  • – ABAC .
  • – - .
  • Almacenamiento en caché de datos centralizado: se planea introducir un servidor de almacenamiento en caché centralizado (esto es necesario para la recopilación centralizada de registros para el trabajo de los equipos de prueba de desarrollo para monitorear correctamente la estabilidad y la corrección de nuestro ecosistema).

Total


Este conjunto de tecnologías, junto con la solución arquitectónica elegida, nos permite plantear el problema del desarrollo de soluciones de portal, intranet y externas "en el transportador": hacerlo de manera rápida, eficiente, con diferentes configuraciones y utilizar las mejores prácticas.

Y en el próximo artículo diremos cómo está organizada nuestra interfaz: sobre el ensamblaje y cómo logramos una gran reutilización.

Continuó muy pronto ...

All Articles