anonymous Log in
Search
Recents:
v3.0
java-l
Ejecución de procesos en ambiente Cluster (JBoss)
24/03/21 13:48

dtorress

Replies: 10

Que tal compañeros de la comunidad,
Estamos en proceso de implementación de un sistema desarrollado con GX17 U2 generador Java Web el cual utiliza GAM como plataforma de accesos que se instala en un clúster JBoss EAP 7.0 con 2 nodos en balanceo (paralelo) y su ejecución es correcta, sin embargo estamos detectando algo importante.
Nuestro sistema ejecuta procedimientos que se encargan de agregar, actualizar registros en la base de datos cuando es requerido (ya sea facturación, generación de cuentas, pólizas, etc.). El usuario al dar clic a un botón ejecuta el procedimiento pero el servidor al tener dos nodos (cluster) éste se llama dos veces y nos generan duplicidad de registros, esto ya que nuestros New tienen autonumérico o sacan un ID controlado, pero esta forma de clúster hace que se ejecuten en paralelo y agregue dos registros, supongo que si tuviésemos mas de 2 nodos se ejecutarían tres o mas veces los mismos procedimientos!.
Nuestro llamado es sencillo desde un evento de usuario:
Event 'Agregar'
AgregarRegistro.call(&Var1,Var2)
EndEvent
El procedimiento es también trivial, el ID es autonumérico.
New
Var1 = &Var1
Var2 = &Var2
EndNew
El procedimiento AgregarRegistro se ejecuta 2 veces y por consiguiente agrega dos registros al solicitar 1 solo evento, esto por el balanceo de carga entre ambos.
Esta situación nos complica el correcto funcionamiento del sistema ya que se corre el riesgo de duplicar registros críticos; ya se intentó hacerlo por BC, webservice, submit, etc y siempre lo ejecuta 2 veces.
¿Alguna sugerencia o experiencia que hayan tenido con respecto a ejecución de una aplicación GX en un cluster con comportamiento similar?
¿Cómo podemos solucionar esta situación?
Agradezco sus respuestas.
Saludos cordiales.
Grupo Financiero Actinver
C.F. Montes Urales 620, Piso 2.
Lomas de Chapultepec, Ciudad de México
55 1103 6600 Ext: 1985 / 800 705 5555
dtorress@actinver.com.mx<mailto:dtorress@actinver.com.mx>
actinver.com
La información contenida en este correo electrónico es confidencial y para uso exclusivo de la(s) persona(s) a quien(es) va dirigida. Está prohibido difundir la información aquí contenida si la ha recibido por error, y le suplicamos notificar inmediatamente al remitente. Actinver o sus subsidiarias, no garantizan la integridad del presente correo electrónico o archivos adjuntos, ni que el mismo esté libre de interferencias o virus, por lo que su lectura, recepción y retransmisión será responsabilidad de quién lo haga. Gracias.
[cid:image001.jpg@01D72098.D6643C10]
Replies

tor1968uy

24/03/21 19:17
No me parece que el problema sea tu aplicación, sino el “Balanceo de carga”. El software de balanceo de carga debería lanzar la solicitud recibida a uno de los jboss y no a ambos. Parecería que la configuración es como alta disponibilidad.. y a ambos les llega l a solicitud para en caso que uno caiga el otro continúe con la operativa. Por lo que describes es lo que parece. Saludos Gabriel

dtorress

24/03/21 19:35
Que tal Gabriel Es lo que estamos pensando en concreto ya que la aplicación corre perfectamente, salvo los disparos de los procesos en ambos servidores en paralelo ocasionándonos duplicidad de datos, intentamos buscar en la documentación de GX si había algo para configurar ese comportamiento pero como bien dices, parece ser esto un tema de balanceo de carga; por ello mi duda si algunos de los integrantes de este foro ha tenido un comportamiento similar, para descartar un problema de compatibilidad de GX con ambientes distribuidos. Saludos Daniel Grupo Financiero Actinver C.F. Montes Urales 620, Piso 2. Lomas de Chapultepec, Ciudad de México 55 1103 6600 Ext: 1985 / 800 705 5555 dtorress@actinver.com.mx actinver.com La información contenida en este correo electrónico es confidencial y para uso exclusivo de la(s) persona(s) a quien(es) va dirigida. Está prohibido difundir la información aquí contenida si la ha recibido por error, y le suplicamos notificar inmediatamente al remitente. Actinver o sus subsidiarias, no garantizan la integridad del presente correo electrónico o archivos adjuntos, ni que el mismo esté libre de interferencias o virus, por lo que su lectura, recepción y retransmisión será responsabilidad de quién lo haga. Gracias. [cid:image001.jpg@01D720CB.688474C0]

tor1968uy

24/03/21 20:00
Que tenes “delante” de los jboss que haga ese balanceo de carga? apache?

dtorress

24/03/21 21:04
Tenemos un F5 con un NGINX Saludos cordiales. [cid:image002.png@01D720D8.1D1291E0] DANIEL TORRES SILVA Sistemas Grupo Financiero Actinver C.F. Montes Urales 620, Piso 2. Lomas de Chapultepec, Ciudad de México 55 1103 6600 Ext: 1985 / 800 705 5555 dtorress@actinver.com.mx actinver.com La información contenida en este correo electrónico es confidencial y para uso exclusivo de la(s) persona(s) a quien(es) va dirigida. Está prohibido difundir la información aquí contenida si la ha recibido por error, y le suplicamos notificar inmediatamente al remitente. Actinver o sus subsidiarias, no garantizan la integridad del presente correo electrónico o archivos adjuntos, ni que el mismo esté libre de interferencias o virus, por lo que su lectura, recepción y retransmisión será responsabilidad de quién lo haga. Gracias. [cid:image003.jpg@01D720D8.1D1291E0]

tor1968uy

24/03/21 21:29
Lo tenés configurado que el balanceo lo haga por ip-hashasi las conexiones de un usuario las atiende siempre el mismo.. capaz con eso se te soluciona De todas maneras tanto como least-connected o round-robin no debería enviar las conexiones a ambos servidores… sino solo a uno. En el nginx deberías tener la sección upstream app { ip_hash; server app1:8080; server app2:8080; } O similar para la configuración haga balanceo por ip-hash Saludos gabriel

dtorress

24/03/21 22:23
Correcto Gabriel, permíteme revisar el tema con el área de Infraestructura y que nos den la definición de como está configurado el NGINX y el F5. Dada esta cuestión, en el lado desarrollo GeneXus, ¿Tendremos que realizar alguna configuración adicional? Es decir, cambiar alguna propiedad en el modelo, objeto, forma de llamado de los procedimientos, etc.? Te comento que trabajamos con casi la mayoría de las propiedades por default en GeneXus (salvo configuración de Datasources y propiedades del compilador), y se agregaron algunos archivos al WEB-INF donde controla el tema de la distribución de la sesión para que funcione en clúster, esta información está en su wiki https://www.genexus.com/es/developers/websac?data=47815;; https://wiki.genexus.com/commwiki/servlet/wiki?46032,Deploying+a+Java+application+on+a+JBoss+server, Esto para descartar algún esfuerzo adicional por parte de desarrollo y dirigir el tema mas por el lado de infra. Agradezco tu apoyo y quedo atento a tus comentarios. Saludos cordiales. [cid:image001.png@01D720E2.878BC1E0] DANIEL TORRES SILVA Sistemas Grupo Financiero Actinver C.F. Montes Urales 620, Piso 2. Lomas de Chapultepec, Ciudad de México 55 1103 6600 Ext: 1985 / 800 705 5555 dtorress@actinver.com.mx actinver.com La información contenida en este correo electrónico es confidencial y para uso exclusivo de la(s) persona(s) a quien(es) va dirigida. Está prohibido difundir la información aquí contenida si la ha recibido por error, y le suplicamos notificar inmediatamente al remitente. Actinver o sus subsidiarias, no garantizan la integridad del presente correo electrónico o archivos adjuntos, ni que el mismo esté libre de interferencias o virus, por lo que su lectura, recepción y retransmisión será responsabilidad de quién lo haga. Gracias. [cid:image002.jpg@01D720E2.878BC1E0]

tor1968uy@gmail.com

25/03/21 00:58
La verdad no tengo app generadas en GX en cluster, pero si desarrollso en java bajo esa configuración… Realmente creo q la configuracion de gx por defecto, salvo los cambios q marcas debería funcionar…. No hay mucho cambio del lado de la app Como prueba te diría q pruebes a eliminar del webinf https://www.genexus.com/es/developers/websac?data=47815;; Ya q esa configuración es para alta disponibilidad y no para balanceo de carga… Si sigue comportándose igual, vuelves a colocarla.. pero… es un cambio pequeño y no lleva mucho ratos modificar el archivo ese…. Solo como prueba al menos… tal vez eso esta complicándote la vida pq tenes en nginx como balanceo y el webinf dice q la app es alta disponibilidad Saludos Gabriel

dtorress

25/03/21 02:08
Hola Gabriel, De hecho al agregar al final del web.xml que está dentro del WEB-INF el siguiente elemento: Según la documentación https://docs.jboss.org/jbossas/docs/Clustering_Guide/beta422/html/clustering-http-app.html le indica a la app que va a correr en un ambiente clúster así como la configuración del archivo jboss-web.xml (en caso de JBoss debe existir ese archivo), ya que al no tener el elemento anterior la app se cae en todo momento, la sesión se pierde en segundos, me imagino que por la naturaleza del clúster, al ponerle ese elemento y como lo menciona la documentación la app anda muy bien, salvo el detalle de la ejecución doble o paralela al mismo tiempo de ciertos procedimientos. Tomo nota de lo que me comentas con respecto a la configuración del balanceador, espero que pueda ser la solución a nuestro problema, te lo haré saber si es así. Muchas gracias Saludos cordiales. [cid:image001.png@01D72102.7DD066E0] DANIEL TORRES SILVA Sistemas Grupo Financiero Actinver C.F. Montes Urales 620, Piso 2. Lomas de Chapultepec, Ciudad de México 55 1103 6600 Ext: 1985 / 800 705 5555 dtorress@actinver.com.mx actinver.com La información contenida en este correo electrónico es confidencial y para uso exclusivo de la(s) persona(s) a quien(es) va dirigida. Está prohibido difundir la información aquí contenida si la ha recibido por error, y le suplicamos notificar inmediatamente al remitente. Actinver o sus subsidiarias, no garantizan la integridad del presente correo electrónico o archivos adjuntos, ni que el mismo esté libre de interferencias o virus, por lo que su lectura, recepción y retransmisión será responsabilidad de quién lo haga. Gracias. [cid:image002.jpg@01D72102.7DD066E0]

tor1968uy@gmail.com

25/03/21 03:07
Es que eso es lo raro.. en un ambiente de alta disponibilidad… es entendible que te pase eso.. las solicitudes de una sesión van y vienen a un servido ro al otro si la configuracion es ACTIVO/ACTIVO…. pero en balanceo de carga eso no debería pasar pq tu sesión no va de un servidor a otro…. Se conecta y la conexión queda en un servidor….. o eso esperaría uno.. Q el sistema replique las conexiones en ambos servidores para q ante una caída se recupere de cualquiera.. es entendible… pero en balanceo de cargas no debe funcionar asi.. por eso te decía de probar sin eso… Si usas ip-hash en nginx y eliminas eso debería funcionar sin problemas Gabriel

dtorress

25/03/21 14:29
Que tal Gabriel, de acuerdo Vamos a verificar la configuración que nos propones, cualquier cosa te comento Muchas gracias por tu ayuda Saludos cordiales. [cid:image001.png@01D72168.28425470] DANIEL TORRES SILVA Sistemas Grupo Financiero Actinver C.F. Montes Urales 620, Piso 2. Lomas de Chapultepec, Ciudad de México 55 1103 6600 Ext: 1985 / 800 705 5555 dtorress@actinver.com.mx actinver.com La información contenida en este correo electrónico es confidencial y para uso exclusivo de la(s) persona(s) a quien(es) va dirigida. Está prohibido difundir la información aquí contenida si la ha recibido por error, y le suplicamos notificar inmediatamente al remitente. Actinver o sus subsidiarias, no garantizan la integridad del presente correo electrónico o archivos adjuntos, ni que el mismo esté libre de interferencias o virus, por lo que su lectura, recepción y retransmisión será responsabilidad de quién lo haga. Gracias. [cid:image002.jpg@01D72168.28425470]


Back to java-l