论坛首页 Java企业应用论坛

远程JDBC连接的一个思路

浏览 6739 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-05-20  

最近在移植一个原来是基于局域网通讯的C/S软件转换到基于互联网通讯,软件在局域网中时使用JDBC直接访问数据库,而在互联网中,这样的方式会带来非常可怕的后果。因此,我在想是否有一种思路通过互联网代理通讯的方式把JDBC数据进行路由,提高安全性不说,做好的话还有可能提高数据库并发访问性能。

 

这个方式目前还没有实现,但是思路大致应该是这个样子的:

 

// 服务器端,假设访问的是MySQL数据库,服务端口为81
JDBCServer server = new JDBCServer(81);
// mysqlservice JDBC服务名
// mysql 数据库类型
// localhost:3306 数据库主机地址及端口
// db1 数据库名称
// username 数据库用户帐号
// password 数据库登录密码
server.addDataSource("mysqlservice","mysql","localhost:3306","db1","username","password");
// 启动服务器
server.start();

再看看客户端如何访问:

// 客户端
// 注册数据库驱动程序
Class.forName("com.cmspad.jdbc.Driver");

// 向往常一样,创建数据库连接
Connection conn = DriverManager.getConnection("jdbc:cmspad://192.168.0.188:81/mysqlservice","username","password");

// 然后进行标准的JDBC操作
...

conn.close();

假定服务器与客户端的通讯使用一种私有的协议,可以使用一些可控连接技术提高通讯的稳定性,也可以使用SSL等加密技术提高通讯安全性。

 

这样,我们开发的互联网端应用程序时就不用考虑跨互联网通讯问题,而且还可以使用最原始的JDBC操作方式进行数据(注意:不是数据库)访问。

 

这对于降低程序开发难度,以及使用基于JDBC的一些ORM工具都会带来很好的效果,能预见性的不足就是效率严重依赖网速。

 

BUT,当前只是设想,至少我这边还没有实现... 

   发表时间:2010-05-21  
个人建议:互联网的数据交互使用webservice,数据发送到server上在server端再做数据库的处理。

这种互联网的jdbc连接我觉得不太靠谱。如果始终持有连接,多个client同时持有肯定成问题;如果每次需要访问数据库的时候再建立连接访问结束后在释放连接,性能太差。
0 请登录后投票
   发表时间:2010-05-21  
同意楼上,客户端怎么也不应该直接JDBC到数据库服务器上。
0 请登录后投票
   发表时间:2010-05-21   最后修改:2010-05-21
JDBCServer server = new JDBCServer(81);  

看到这行你基本就可以死心了,如果可以在Firewall上挖墙的话,那还要IT干什么?

用个VPN不就解决所有一切了?连代码都不用改。
0 请登录后投票
   发表时间:2010-05-21  
to xzqttt:

其实这个思路的通讯协议可以是私有的,也可以是某种webservice的实现,只不过路由的是封装JDBC的数据罢了,但我还是偏向私有协议,因为web service对数据流的支持貌似不好。

如果架构比较好的话,实现异步传输也是可以的,查询的时候连接即可,没有必要实时通讯。

to deadcode:

同上,其实流程应该是这个样子的: Local JDBC Driver <-(any web service or private protocol)-> Remote JDBC Server

这思路的主要目标是为了大家简化开发互联网富客户端。

to ray_linn:

哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。
0 请登录后投票
   发表时间:2010-05-21  

I bean sleeping for forty days and i know i'm not sleeping cause dream so amazing.

It's magical mistery kind, must be a lie.

Was it you who spoke the word that tings would happen but not to me,

Oh things gonna happen naturely.

Taking you advice i'm looking on the bright sight and balancing the whole thing.

But often times those words get tangled up in lines

 

0 请登录后投票
   发表时间:2010-05-21   最后修改:2010-05-21
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。
0 请登录后投票
   发表时间:2010-05-21  
ray_linn 写道
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。

晕,被你套进来了。

这东西是个思路,具体实现用什么都可以,比如使用HTTP等开放规范可以实现,甚至弄个私有协议实现,就算用VPN也是可以的啊,我在代码里也没写到底是用什么实现的,因为这只是思路,不是实现。

不过如果没有特殊需求的话,我不建议互联网客户端用VPN,因为他是长连接(如果没记错的话),如果客户数多了负载压力很大;如果程序是用Java开发的话,恐怕还要捆绑其他语言开发的程序。
0 请登录后投票
   发表时间:2010-05-21  
yipsilon 写道
ray_linn 写道
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。

晕,被你套进来了。

这东西是个思路,具体实现用什么都可以,比如使用HTTP等开放规范可以实现,甚至弄个私有协议实现,就算用VPN也是可以的啊,我在代码里也没写到底是用什么实现的,因为这只是思路,不是实现。

不过如果没有特殊需求的话,我不建议互联网客户端用VPN,因为他是长连接(如果没记错的话),如果客户数多了负载压力很大;如果程序是用Java开发的话,恐怕还要捆绑其他语言开发的程序。


说实话,VPN是一种公司的基础设施建设,长连接并不是问题....而且数据转发也根本没必要,传统以来,过防火墙的一般都是服务接口,RMI\iiop\DCOM\webservice\xml-rpc都是如此
0 请登录后投票
   发表时间:2010-05-22  
ray_linn 写道
yipsilon 写道
ray_linn 写道
yipsilon 写道


哎,我觉得目前想法还不成熟,在企业应用上没有什么考虑,现在是以QQ等互联网软件作为参考的。不过光看端口号没什么意义,当然也可以使用80端口嘛,再加上假设实现的私有协议基于HTTP,那估计也可以穿墙吧。



我要表达的是,任何一个intranet的C/S应用,internet对其都是透明,因为VPN技术使得你在地球任何一个角落上网,都好像在公司局域网里一样。。。


与其考虑任何穿墙协议,不如把你自己搬进intranet里。

晕,被你套进来了。

这东西是个思路,具体实现用什么都可以,比如使用HTTP等开放规范可以实现,甚至弄个私有协议实现,就算用VPN也是可以的啊,我在代码里也没写到底是用什么实现的,因为这只是思路,不是实现。

不过如果没有特殊需求的话,我不建议互联网客户端用VPN,因为他是长连接(如果没记错的话),如果客户数多了负载压力很大;如果程序是用Java开发的话,恐怕还要捆绑其他语言开发的程序。


说实话,VPN是一种公司的基础设施建设,长连接并不是问题....而且数据转发也根本没必要,传统以来,过防火墙的一般都是服务接口,RMI\iiop\DCOM\webservice\xml-rpc都是如此

VPN在底层虚拟了局域网,但代价也是很大的,尤其表现在其高可用性问题上。如果代价非常小的话,像QQ、MSN以及网游这样的互联网软件就不用自己开发通讯协议了。

不可否认VPN的好处,但是使用它是有局限性的。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics