Delphi, IBX, Firebird, LAN, red virtual
#1
Escrito 25 enero 2010 - 08:20
A saber, he diseñado un sistema el cual funciona en una red LAN, aproximadamente 20 máquinas están afectadas a este sistema. Corre contra una base de datos Firebird 1.5 y he usado para la conexión con la misma los componentes IBX.
Resulta que la empresa esta quiere poner una sucursal y hay que extender el sistema hacia ahí. Para lograrlo se está pensando en poner una red virtual (VPN) usando internet como medio para lograr la conexión entre ambas LAN's, la de Casa central y la de la sucursal. Mis dudas son las siguientes:
¿IBX es lo adecuado para que el software se conecte a través de la VPN?
Actualmente el sistema trabaja con la modalidad "entorno conectado"; o sea, se conecta a la BD y permanece así hasta que al final de la jornada se desconectan los usuarios. Dentro de esta conexión se realizan todas las transacciones correspondientes para las diversas tareas. ¿Esto es adecuado para una VPN que tiene en el medio a Internet como medio de conexión? ¿Debo trabajar con "entornos desconectados" (como por ejemplo PHP y MySQL)?
En el caso de no ser adecuado IBX para estas tareas, ¿Qué componentes de conexión son los adecuados?
Bueno, estas son las primeras dudas. Espero que alguien pueda aclarar el panorama.
Saludos.
Santiago.
#2
Escrito 25 enero 2010 - 08:26
Si sabemos que una VPN es como si estuvieras conectado a tu red local, no veo el problema, sin embargo, pudieras considerar el uso de aplicaciones web para realizar esto. Seguramente algunos compañeros podrán darte mas información al respecto.
Salud OS
#3
Escrito 25 enero 2010 - 08:44
Saludos.
#4
Escrito 25 enero 2010 - 08:48
Pues igual que Egostar tampoco veo problema alguno al usar estos componentes para este tipo de conexión.
Como toda aplicación desarrollada para trabajar sobre LAN se debe de tener cuidado con la cantidad de registros que se devuelve al cliente ante cualquier apertura de dato o búsqueda de los mismos. La ventaja que tiene IBX es que habla de manera nativa con Interbase/Firebird, aunque ya las ultimas versiones de Firebird no son soportadas al 100% con IBX.
También tienes a mano los componentes DBX ligado con DataSnap (ClientDataSet) pero el cambio será bastante drástico, aunque puedes ligar IBX con DataSnap (ClientDataSet) con menos cambios.
¿Puedes indicarnos que versión de Delphi usas?
#5
Escrito 25 enero 2010 - 09:28
Saludos.
#6
Escrito 26 enero 2010 - 12:39
No hay nada como hacer algunas pruebas, ¿ porqué no abres temporalmente el puerto 3050 (Firebird) en tu router y te conectas con tu programa desde un Ordenador externo por Internet ?, básicamente será lo mismo cuando lo tengas conectado en una VPN.
La verdad es que Firebird no es la mejor base de datos para conectarse por Internet, y es que su protocolo de comunicaciones del servidor con el cliente de Firebird no está muy bien optimizado y hace bastantes viajes de ida y vuelta. Esto en una red local va perfectamente bien pero en una conexión por Internet donde el principal problema es la gran latencia, se convierte en un problema.
En cualquier caso te recomiendo que te actualices a la última versión disponible de Firebird, puesto que en cada actualización mejoran el protocolo de comunicacions, eliminando ciclos redundantes (por ejemplo, en la versión 2.1 estiman que el nº de ciclos de solicitud entre cliente y servidor se ha reducido en un 50% respecto a la 2.0).
Aún así podría ser que el rendimiento no sea suficiente (solo podrás saberlo cuando lo pruebes). En cuyo caso te recomiendo la solución que utilizo yo para casos similares : bases de datos replicadas. En lugar de trabajar todos los equipos con el servidor Firebird de la central, yo pongo un servidor Firebird en cada oficina, de forma que los ordenadores acceden siempre a un servidor local y por tanto consiguen un rendimiento óptimo. Ya solo queda montar un mecanismo de replicación para mantener sincronizadas las dos bases de datos.
Aquí tienes varias soluciones de replicación para Firebird (yo te recomiendo que mires especialmente el IBReplicator y el FBReplicator).
http://www.ibphoenix...=ibp_repl_tools
#7
Escrito 26 enero 2010 - 07:32
¿Podrías ser un poco mas claro y contarme las posibilidades que brinda una replicación?
Saludos.
#8
Escrito 26 enero 2010 - 09:10
La replicación consiste en tener tu propio servidor Firebird en cada oficina. De esta forma los ordenadores de cada oficina pueden hacer las consultas directamente a su servidor con lo que el rendimiento es óptimo.
Cada cierto tiempo se tienen que sincronizar las bases de datos de los distintos servidores, para que todas las bases de datos tengan exactamente la misma información.
Ventajas :
* La velocidad de tus aplicaciones es inmejorable, puesto que se ejecutan contra un servidor local.
* Si por alguna razón una oficina se queda sin conexión a Internet, pueden seguir trabajando perfectamente, puesto que están utilizando su base de datos local. Simplemente no tendremos los datos actualizados/sincronizados hasta que no se restaure la conexión a Internet y se vuelva a ejecutar una sincronización.
* Cada servidor se convierte en una copia de seguridad del resto. Si tienes cualquier problema y se pierden los datos de un servidor Firebird, simplemente hay que coger y hacer una copia de una base de datos en otro servidor. De esta forma tenemos todos los datos hasta la última sincronización de datos, lo cual es como decir que solo vas a perder los datos introducidos en los últimos minutos, mientras que normalmente tendrías que recuperar los datos de una copia de seguridad hecha habitualmente por la noche, con lo que perderías horas de datos.
Inconvenientes :
* Los datos tardan un tiempo en propagarse a las distintas oficinas (el tiempo que programamos entre sincronizaciones). Esto no supone ningún problema en el 99% de los casos, si desde la central dan de alta un cliente, poco importa que lo tengamos disponible al instante en que lo introducen o cinco minutos después. Pero en unos pocos casos puede ser un problema. Por ejemplo, una consulta de stock quizás necesitamos que devuelva el valor exacto en un momento dado. En estos casos hay que hacer esa consulta directamente a la central, con algún mecanismo de tipo WebServices, o por el estilo.
Saludos.
#9
Escrito 26 enero 2010 - 10:56
En lo personal, si son mas de 1 equipos los que se conectarian a tu sistema por VPN, te recomendaria una conexion LAN -VPN - LANRemota, que fuera transparente, ya que de esta manera tu VPN mantendria la conexion de toda la RED LAN Remota con la PRINCIPAL..
Yo mentango enlaces entre sucursales con SERVIDORES LINUX, usando la BASE de DATOS de la EMPRESA que esta en FIREBIRD 2.0 desde ya mas de 7 años sin ninguna complicacion ni problemas de VELOCIDAD.
Deberas considerar que la CONEXION de tu Servidor debe de tener una muy buena conexion de velocidad a INTERNET, en mi caso esta a 4MB de BAJADA con 758K de Subida y se conectar serca de 20 equipos sin degredar la velocidad del servidor ni acceso al sistema...
SALUDOS..
#10
Escrito 26 enero 2010 - 11:57
No es un problema de velocidad de la conexión a Internet (para el caso bien poca diferencia habrá entre una conexión a 2Mbps y otra a 100Mbps), el problema de las conexiones por Internet es la latencia.
#11
Escrito 26 enero 2010 - 04:06
Y si me fue bien.. pero en un principio si fue problematico.. la desicion... y el diseñar el esquema de la solucion...
Al final de cuentas no hay nada mejor que probar, probar y probar... y al final DECIDIR..
SALUDOS...
#12
Escrito 26 enero 2010 - 07:40
La verdad es que la cosa está tirada para el lado de una VPN por hardware (un CISCO si puedo) y yo que estoy a lo loco modificando el software para que reconozca las sucursales y deje de ser solamente la Casa Central.
Igualmente cuando la circunstancia apremie voy a estar aquí para solicitar su ayuda.
Saludos.
#13
Escrito 27 enero 2010 - 11:08
saludos
#14
Escrito 05 febrero 2010 - 01:20
Luego de este debate acerca de la conectividad requerida, tengo algunas dudas mas.
En principio logrando la VPN tengo solucionado gran parte del problema. He aquí que la programación en este tipo de cuestiones es la que me desvela, principalmente el problema mas conocido de Internet, la latencia.
En estos momentos, cada vez que quiero ir contra la BD (Firebird 1.5) lo hago de la siguiente manera
//..... try transaction.startTransaction; //Aquí realizo todos los accesos a la BD, ya sean Select, Insert, Update //o combinaciones de todo tipo //........... transaction.Commit; except transaction.Rollback; //Mensajería de error end; //.......
Esto funciona muy bien en la red LAN, pero no tengo idea de su funcionamiento teniendo en el medio a Internet.
La duda radica en como se debe modificar ese pedazo de código (aumento, disminución, etc.) para que tenga cierta tolerancia a los desplantes de Internet (latencia claro está)
Que se yo, debería anular la transacción automáticamente después de cierto tiempo de NO respuesta, debería intentar de nuevo la operación después de cierto tiempo... o algo.
Bien, espero haber sido concreto.
Gracias.
Santiago.
#15
Escrito 05 febrero 2010 - 05:20
Así es que debes de utilizarlo (hasta donde mi conocimiento llega), lo que si te puedo recomendar es que hagas todo lo que puedas (por no decir todo) del lado del servidor así no se vera tan afectada tu conexión.
#16
Escrito 05 febrero 2010 - 08:21
A veces dependera de tu programacion, por ejemplo si usas tablas planas la unica alternatica es TERMINAL SERVER.. con sistemas hechos CLIENTE/SERVIDOR en el cual unicamente mandas datos y recibes respuestas no le veo gran problema salvo tu logica de programacion..
Simple.. a probar...
SALUDOS..