domingo, 24 de noviembre de 2013

Conexión a bases de datos vía Internet


Si tienes un programa de escritorio con conexión a bases de datos Sql, es probable que en algún momento pienses en conectarlo remotamente al servidor vía internet,  ya sea porque tienes sedes en lugares geográficos diferentes, porque viajas frecuentemente o muchos otros aspectos que pueden requerir de esta infraestructura.
Esta situación solo ocurre con los programas de escritorio, ya que las Aplicaciones WEB están diseñadas para trabajar remotamente y pueden ejecutarse desde el navegador en cualquier ubicación geográfica sin problemas.
Si desean conocer las ventajas o desventajas de las Aplicaciones Nativas Vs. las Aplicaciones Web pueden revisar la siguiente entrada en este foro.
 
Para conectarse a una base de datos remota vía Internet, hay 4 opciones válidas en este momento: 
1. Escritorio Remoto:- Utilizar software de escritorio remoto,  prácticamente con este software no es una conexión a base de datos remota vía Internet, pero la incluyo en el listado ya que finalmente cumple el mismo objetivo,  la gran ventaja de este modelo es la facilidad de uso, no hay que aprender nada nuevo ni realizar cambios en las aplicaciones, solo es instalar el servidor de escritorio y dar accesos a los clientes.
Desventajas hay muchas, partiendo del hecho de la seguridad ya que debes dar permisos a la sesión de Windows completamente y de allí partir a controlar los accesos a las aplicaciones, esto supone un desgaste en administración de usuarios.
Este modelo consume gran ancho de banda, porque debe transmitir el escritorio completo en forma de imágenes,  así que lo que no consume en el traslado de de datos si lo consume en el traslado de imágenes. 
 
2. Virtual Private Network:- La segunda opción es crear una VPN (Virtual Private Network) existen programas para eso y es relativamente fácil, la ventaja es que extiende la red local sobre internet, es segura y muy simple de manejar. la desventaja es que requiere instalar software de VPN en cada cliente y cuando se conecta la VPN  asigna una IP nueva al equipo dado que prácticamente cambia de red. 
Otra gran desventaja es que consume mucho ancho de banda, por lo cual es necesario tener buenos canales de comunicación, aún así no es recomendable tener muchos usuarios en este modelo, creo que más de 10 o 20 usuarios según el ancho de banda puede ser el límite en conexiones normales de internet. 

 
3. Conexión Directa a la Base de Datos:- El tercer modelo definitivamente no lo recomiendo y es solo abrir el puerto y el IP de tu base de datos a internet configurando el FireWall, primero por el aspecto de seguridad y segundo porque las bases de datos están diseñadas para trabajo en conexiones estables, así que si la conexión se cae, tu aplicación se cae inmediatamente. afectando no solo el cliente, sino también el rendimiento del servidor. ¿Que si se puede hacer?, si se puede, que lo debas hacer?, definitivamente no. 

4. Uso de un MiddleWare:- La cuarta opción y la más usada y recomendada en este momento para redes como internet, donde hay límites de la velocidad de acceso y la conexión no es estable (Se puede caer en cualquier momento), es el uso de un software mediador llamado genéricamente Middleware.
El middleware permite crear aplicaciones en 3 capas y 3 niveles, este software es quien maneja la seguridad, la conectividad y la persistencia de los datos. 
Hay varias tecnologías para hacer esto, en Delphi se conoce como DataSnap anteriormente Midas, en Microsoft se denomina tecnología Com, en Java se utiliza JBoss o Tomcat. Según la tecnología que se quiera usar se puede utilizar navegador o conexiones directas sin el navegador,
Entre las tecnologías de conexión directa encontramos el DataSnap de Embarcadero y la tecnología Com de Microsoft. Con navegadores WEB igualmente se puede implementar las 3 capas utilizando tecnologías WebServices o Rest. 
Si estás trabajando en Delphi te recomiendo la tecnología DataSnap para crear aplicaciones de este tipo, o utilizar el HyperBase server, el cual ya tiene las opciones implementadas y es solo cuestión de usarlo. 

3 comentarios:

  1. Solo quiería completar unos detalles sobre los métodos "no recomendados", por si alguien los necesita utilizar algún día.

    1) El escritorio remoto se puede "refinar" compartiendo solo las ventanas remotas de cierta aplicación del servidor. Esto lo he visto hacer con el software Cytrix -creadores del escritorio remoto de windows, vednen un sistema mejorado de escritorios remotos- pero creo que actualmente también lo permite hacer la versión de windows.

    3) Respecto de compartir la base de datos por un puerto, se puede hacer con total seguridad si en el servidor y los clientes usas un encriptador de puertos. Históricamente se ha usado ZeBeDee (http://www.firebirdsql.org/pdfmanual/Firebird_ZeBeDee.pdf) pero tambien vale un tunel ssh con putty o similar.

    ResponderEliminar
  2. Saludos.

    Cabe mencionar que como uso de un MiddleWare, se puede utilizar Data Abstract de la gente de RemObject; el cual considero un producto mucho más maduro que la implementacion por parte de Embarcadero, DataSnap.

    ResponderEliminar
  3. Hola, en el caso de MiddleWare creo que deberíamos hacer una pequeña separación entre herramientas para implementar Middleware y las herramientas Listas para usar, "Out of the Box".

    Las tecnologías Com y DataSnap las catalogaría como herramientas para implementar el Middleware, pero en las ya listas para usar, encontrariamos RemObject que me pareció muy interesante y HyperBase.

    Estas herramientas abstraen las complicaciones del desarrollo de un middleware y le enfocan en lo realmente necesario para desarrollar aplicaciones. así el programador se enfoca en la aplicación y no en el middleware.

    Gracias por los comentarios así podremos complementar estos árticulos para hacerlos más precisos y didácticos.

    ResponderEliminar