entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

Como optimizar aplicación WEB para muchas terminales en una red local

Hola,

Tengo un aplicativo web en java, que usa struts y spring y se usa internamente (intranet). El problema que cuando lo utilizan 60 terminales con distancias largas en el cableado (160 metros en algunos casos) la aplicación se vuelve lenta y la superan aplicaciones que se instalan en terminal como las desarrolladas en c#.

1- Existe alguna forma de mejorar el rendimiento de la aplicación instalando algo en cliente?, que sería lo más conveniente para ese caso?

Hemos averiguado algunas alternativas para disminuir la carga de la red, y nos recomendaron poner servidores en puntos intermedios que se encarguen de dar la vista y atender a un grupo de terminales pero la base de datos sigue estando centralizada en el servidor principal.

2- Esta es una buena idea?

La arquitectura de la Aplicacion es:

  • Java 8
  • Aplicacion Web con Struts2 (MVC)
  • el SGBD es postgres 9.4 (solo traigo
    los datos que necesito) usando c3p0 (pool de conexiones)
  • La vista esta hecha en Bootstrap 3 y Jquery
  • No se usa Ajax o cache para cargar las vistas
  • Para acceder a dispositivos en terminal (Impresoras, Balanzas o
    Scaners) se usan Applets Firmados

El principal problema esta en el numero de terminales al mismo tiempo muy alejadas del servidor (cableado de 160 metro y WIFI compartida entre muchos equipos)

Saludos

2 Respuestas

1voto

Leonardo-Tadei Puntos227320

Uff... este es un tema con muchas aristas y la cuestión depende mucho del diseño, de la infraestructura y de varios detalles más... y sobre todo de determinar primero en dónde está el cuello de botella.

Así, en el aire, deberías poder mejorar mucho la performance pasando a un esquema cliente-servidor, en el que toda la GUI esté en el cliente, y lo único que viaje por la red sean datos. Esto mejora a su vez mucho si el envío de los datos es paginado: en vez de cuando un cliente pide la númina de clientes enviarselos a todos, le envíás por ejemplo solo los primeros 100, y con un botón de "seguiente" y "anterior" te vas moviendo por los datos.

En otro extremo se puede optimizar muchísimo la transferencia por la red pasando a una arquitectura web con servlets: su tu aplicación respeta la arquitectura MVC, solo tendrías que cambiar la Vista y hacer unos ajustes en los Controladores.

No creo que exista "algo" para instalar en los clientes que mágicamente resuleva esto... si las aplicaciones en C# funcionan más rápido, debe ser porque están consumiendo muchísimos menos datos: a priori las diferencias de rendimiento de los lenguajes no son muy distintas.

Por último podrías probar con clientes GNU/Linux: tiene un excelente manejo de los recursos de red, corre Java y sabemos que no penaliza a unas aplicaciones respecto de otras según el lenguaje o el fabricante.

Saludos cordiales!

0voto

Wilson comentado

Hola @Leonardo-Tadei
con arquitectura web con servlets te referis a usar webservices?

las terminales usan otras aplicaciones que no pueden correr en linux, pero si pasamos el servidor a linux puede hacer diferencia?

agregue a la consulta el detalle de la arquitectura de la aplicacion

0voto

Leonardo-Tadei comentado

Con "arquitectura web" me refiero a portar tu aplicación a un conjunto de Servlets, de forma tal que usando como cliente un navegador, la Vista de tu aplicación emita HTML.
De esta forma el tráfico por la red sería solo HTML (y las caché de los navegadores optimizan mucho esto) y deja de ser necesario mantener una sesión persistente entre cada cliente y la aplicación.

Pasar el servidor a GNU/Linux, si bien es tecnológicamente una maravilla, no es algo que te recomiendo, sobre todo porque sin primero medir dónde está el cuello de botella, estarías dando palos a ciegas. Difícilmente el servidor sea el mayor de los problemas.

Viendo los componentes tecnológicos de la aplicación (esa no es una arquitectura) y con la cuestión de la longitud de los cables que mencionás, podrías estar teniendo un problema en el cableado Ethernet, porque 160 metros es mayor longitud de la soprotada por el cableado Cat5. Podrías poner en medio algún switch, siempre respetando el no tener más de 4 dominios de colisión, o un router en su defecto. De todas formas, en las terminales que están lejos, deberías tener los mismos problemas para la aplicación Java que para el software C#.

Cómo se mantiene la información de los usuarios logueados? Estás usando sesiones en un modelo stateless o mantenés a los clientes conectador permaentemente con un applet?

Insisto: primero hay que determinar el problema de quién es el que sobrecarga la red, y recién luego atacarlo... a veces simplemente poner un scanner en la red y ver el tráfico da una buena idea: podría ser simplemente que el servidor no esté dando físicamente abasto a atender a los clientes y no ser un problema de la aplicación per se.

0voto

dairon Puntos17120

Deberias primero observar la arquitectura que utilizas para tu proyecto, y buscar la manera de transferir por la red solo los datos necesarios y usando paginados para dar los datos poco a poco por necesidad del cliente.

Si quieres hacerlo más ligero para el usuario pero sería un poco más trabajoso para ti: a lo mejor me equivoco pero que me corrijan los maestros ;) así aprendo mucho más. Podrías convertir tu proyecto en una arquitectura REST o SOAP con transferencia de datos con JSON y montar la web para el cliente con Bootstrap3+Angular+NodeJS y consumir desde esa web los recursos de tu servidor a travez de tu arquitectura orientada a servicios, así en un futuro podrías hacer aplicaciones para tus clientes como app para android, ios nativas o phonegap y no tendrías que cambiar nada en tu servr solo consumir los Servicios ;) y problema resuelto eso creo.
Saludos Dairon

0voto

Wilson comentado

Hola @dairon

pero si aplico webservices y paso a cargar la vista separa no seria lo mismo? por que la vista web y los webservices estarian en el mismo servidor.

corregime si entendi mal

0voto

dairon comentado

también debes revisar lo de las consulta a la base de datos y el diseño de tu base de datos y referente a los webservices lo que me refiero es dejar el java para el procesamiento de datos como el cerebro al cual le arias preguntas o actualizarias o insertarias y este te devolvería las cadenas de texto plano en json para entonces con nodejs o php como quieras mostrarcelo al usuario siendo este último más legiro en recursos que el java y le podrías dar un poco de javascript al browser del usuario para que también te quitaras peso del server.

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta