Jump to content


Photo

arquitectura de aplicacion cuando se necesita velocidad


  • Please log in to reply
7 replies to this topic

#1 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 26 May 2016 - 07:18 PM

buenas amigos...

si vamos  a hacer una aplicacion que haga un ticket detras de otro..es obvio que los datos de productos deben estar en un dataset en la pc local...pero el envio de un ticket a una bd mysql por ej.. es mas lento que tener access en cada pc?

 

no se podria enviar todo al finalizar el dia? De hecho yo por ejemplo tengo un servidor datasnap y uno de mysql..y da la impresion de que seria mas lento..me refiero a corto plazo porque imaginense un supermercado lleno de gente...

 

Hace un tiempo hice un post preguntando si se podian realizar procesos de noche o cuando se desee..esto me parece mas conveniente porque reduce la conexion a internet necesaria..es decir los sistemas a veces no responden en el "acto" sino que se toman su tiempo...

 

 


  • 0

#2 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 27 May 2016 - 07:29 AM

Una de las ventajas del DataSnap o la programación en N capas en general, es la capacidad de crecer de acuerdo a las necesidades de forma más sencilla.  pero debemos salirnos de la concepción de un servidor.

 

El datasnap es un servicio, del cual puedo tener varias instancias en la misma máquina e incluso varias máquinas con varias instancias,  esto permite tener capacidad suficiente para atender un buen numero de clientes y muchas transacciones,  lo que pasa es que requiere ya una infraestructura más robusta.

 

Existen dos métodos para realizar un balanceo de carga,  El primero es tener los ip/puertos de cada una de las instancias y elegir un método para que cada cliente llame a los servidores de forma balanceada,   ej. al azar. ;).

 

La segunda forma es un hardware o software que permita hacer el balanceo de carga,  que funciona como un router a los llamados de los clientes,  de esta forma puedes tener en línea todas las transacciones que requieras sin necesidad de complicarte la vida con sincronizaciones posteriores.

 

Además del balanceo de carga, esta infraestructura te ofrece una redundancia o tolerancia a fallos, ya que si una instancia o un servidor se cae, se puede realizar en cualquiera de los otros que existen.

 

Saludos.


  • 1

#3 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 27 May 2016 - 08:06 AM

Si se pueden tener varias instancias en la misma máquina? Eso no lo sabia..yo tengo un form en el sever con el boton iniciar..debo tener abierto el mismo programa tantas veces como la maquina donde esta alojado aguante? Pero tendrian la misma ip y puerto entonces ahi tengo que hacer el balanceo...

Por eso preguntaba porque una empresa chica no necesita tanta infraestructura..
Pero datasnap es una genialidad...el solo hecho de trasladar datos via internet es bueno..

Saludos

Enviado desde mi SM-G530M mediante Tapatalk
  • 0

#4 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 02 June 2016 - 07:49 AM

Cada servicio está identificado por un IP/Port,  así que en la misma máquina puedes tener varios servicios, cada uno en un Puerto diferente,  la mejor manera de hacer el balance de carga sin necesidad de software o hardware adicional, es que al momento de conectarte, tengas una lista de IP/Port,  y aleatoriamente escojas uno,  si no puede conectarse a ese, escoge otro y así sucesivamente.

 

Normalmente el aleatorio de la máquina es suficiente para realizar un balance aceptable de carga.

 

Saludos.


  • 0

#5 giulichajari

giulichajari

    Advanced Member

  • Miembros
  • PipPipPip
  • 477 posts

Posted 02 June 2016 - 10:40 AM

Gracias genriquez por tu aporte.
Y tener una sola instancia no consume la maquina al ciento por ciento?

Enviado desde mi SM-G530M mediante Tapatalk
  • 0

#6 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 02 June 2016 - 12:58 PM

No, un servicio bien diseñado no debe subir más de un 5% en procesador.


  • 0

#7 bitbow

bitbow

    Member

  • Miembros
  • PipPip
  • 15 posts

Posted 02 June 2016 - 02:26 PM

Al fin de cuentas DataSnap es un servidor, solo bastaría con cambiar el puerto de cada una de tus aplicaciones clientes o implementar una forma para distribuir la carga entre servidores dataSnap, cabe mencionar que la carga sigue estando en el mismo equipo y aunque la ejecución de múltiples instancias del servidor datasnap podría acelerar los procesos el punto en el que el equipo físico se sature va a depender de los clientes que se conecten (sin importar si es una sola instancia de datasnap o muchas).

 

Es recomendable no manejar un esquema de este tipo con muchos clientes y menos si estos son remotos (conexiones entre distintas redes o por internet), es difícil garantizar la conectividad aun con el mejor hardware disponible, una solución a la que hemos llegado después de muchas pruebas y errores es el implementar un servidor local y de ahí reenviar a un servidor central (como comentan al inicio), de esta forma no se cae todo el sistema en caso de falla, para las actualizaciones de precios o productos se crean procesos diarios (pueden ser procedimientos almacenados en la bd dependiendo de si esta los soporta).

 

Saludos.


  • 0

#8 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 posts
  • LocationCali, Colombia

Posted 03 June 2016 - 06:45 AM

Hola bitbow, esa es una solución que funciona, sin embargo no estaría en línea y requiere programación adicional para sincronizar al final del día.

 

Según cuenta nuestro amigo giulichajari, hablamos de una empresa pequeña que no requiere gran infraestructura, así que tratamos de hacer lo mejor con los recursos que pueden tener.

 

El punto que me gustaría aclarar aquí, es que DataSnap es muy poderoso y tiene todo para no requerir este tipo de artificios, pero claro, siempre hay un costo para todo ello, y el costo es la infraestructura,  así como Microsoft Azure,  o Amazon AWS funcionan porque tienen una excelente infraestructura detrás.

 

En este momento tengo dos empresas que tienen cientos de clientes por internet con DataSnap,  y obviamente no se tiene un solo servidor, se tiene contratada la infraestructura en un DataCenter,  incluyendo dispositivos (hardware o software) que se encarga de realizar el balance de carga entre los diferentes servidores y las diferentes instancias dentro de cada servidor, adicionalmente contamos con dos salidas a internet diferentes, por si acaso algún proveedor de internet se cae.

 

El otro punto es que es muy buena práctica tener varias instancias de datasnap corriendo en un servidor, el rendimiento se multiplica considerablemente,  es una práctica que utilizan las bases de datos, ya que si te fijas en el administrador de tareas del sistema operativo, se van abriendo nuevas instancias en la medida en que lo van necesitando.  es lo mismo que se debe hacer con DataSnap, solo que por ahora toca hacerlo manualmente.

 

Si lo que quieres es velocidad por encima de todo,  nada es más rápido que Cliente/Servidor, así que si, definitivamente la mejor solución es trabajar local  y luego sincronizar,  Esta si sería la razón correcta,  pero con tiempos razonablemente aceptables se debe utilizar algún tipo de WebService (REST o SOAP) o en nuestro caso DataSnap.

 

Finalmente podemos mencionar que DataSnap permite guardar localmente en caso de desconexión y posteriormente sincronizar,  algo que pocas personas aprovechan de esta tecnología.  obviamente no es automático, pero si mucho más sencillo que otros mecanismos.

 

Saludos.


  • 0




IP.Board spam blocked by CleanTalk.