网闸,也称边界平台、内外网数据交换系统。
网闸将内网与外网实现了隔离,即内外网程序不能直接相互访问。

那么,如何实现内外网即时数据交互呢?比如外网程序要访问内网webservice服务?

就拿外网程序访问内网的webservice服务为例,分析几种数据交互方式的可行性。

大概有三种方式:

  1、使用网闸的映射功能:即在网闸中配置指定ip段的外网机器,只能访问内网指定ip、端口的机器所提供的指定服务。

       评价:此种方式较为方便,但不是最安全的。

  2、文件同步功能:此种方式需要一台外网服务器和一台内网服务器,在内外网服务器上分别部署webservice服务程序,并在内外网机器上分别建立共享文件夹,供网闸进行文件的同步(从内网到外网,从外网到内网)。

       实现思路大致是:

(1)、外网服务器部署的webservice程序供外网用户访问,一旦接受请求,则将请求生成xml或者其他格式文件,放到外网服务器的共享请求目录。

(2)、通过在网闸中配置内外网的共享请求目录与共享响应目录,网闸会定时(最低一分钟)扫描内外网服务器的指定的若干目录,看有无新增文件,有则同步过去。

(3)、内网服务器webservice程序内部定时扫描指定请求目录,网闸将外网服务器的请求文件同步到内网服务器的请求目录后,内网程序检测到请求文件则立即触发调用本地或者内网其他机器的webservice服务,并将结果生成响应文件放到响应目录。

(4)、网闸检测响应目录的新增文件,将文件同步到外网服务器的响应目录,外网服务器程序线程接受到请求后, 一直等待指定时间,扫描响应目录下有无响应文件产生(请求文件与响应文件采取同名方式,以便区分),读取到响应文件后,返回给外网用户调用者。


    评价:此种方式虽然较上种方式安全,但网闸扫描频率最快一分钟扫描一次的限制便将该种方式kill了(让客户等待至少2分钟是完全不可行的)。

然而对于新的网闸内外网数据交换平台可以支持1s扫描一次,因此对于需要交换图片、视频等应用,则可考虑升级旧网闸数据交换系统;此时采取文件同步是比较理想的。
3、数据库同步方式:

     实现思路:

(1)、需要两台服务器,内网服务器与外网服务器,两台机器同时部署两个程序(程序不完全相同),两台服务器都要安装数据库,并建立相同的表结构(指需要通过网闸同步的表的结构相同,本例中需要响应表和请求表)

(2)、在网闸中配置数据库同步,需要两个库的连接方式,及需要同步那些表;注意,同步的表字段不可有clob或者blob等类型(网闸不能同步,猜测是大字段类型不能导出的原因),基本类型最好。

(3)、外网webservice程序接收请求,将请求插入到请求表中,然后线程休眠指定时间后读取响应表中的响应结果。

(4)、网闸将外网数据库的请求表中的插入的数据,即时(可能采用触发器,具体不知,相当于即时)同步到内网数据库的请求表中。

(5)、对内网请求表预先建立行级触发器,当请求表每插入一条数据时,即执行触发器,在触发器中调用内网的webservice程序。

(6)、可在触发器中插入结果到响应表中,若是业务逻辑复杂,则可在webservice程序内部将结果插入到响应表中。

(7)、网闸将响应表中数据即时同步到外网服务器的响应表中。

(8)、(3) 中等待的线程在限定时间内每隔100ms(自己指定)查询响应表,查询到等待的结果则返回给客户。


关键点:

1)、外网等待线程如何知道响应表中哪条记录是它要的结果? 外网请求表新增请求的id、内网请求表新增请求的id、内网响应表响应记录的id、外网响应表响应记录的id,这四个id为同一个id,都是外网请求表新增请求的id,即只有外网请求表新增请求的id是自动产生,其他三个均采取手动赋值。

2)、内网请求表的触发器如何调用webservice? 在触发器中可通过utl_http、utl_dbws两种方式访问webservice,第一种方式稍简单,第二种方式需要导入utl_dbws包到oracle数据库,较麻烦。

3)、表中字段不可为大数据类型,最好为基本类型


4、总结:映射方式与数据库同步方式最为靠谱,但若是对安全性要求非常高,则建议使用数据库同步方式,否则使用映射方式最为便捷。

然而,此种方式不支持图片数据,大字段类型、视频的交换。

posted on 2021-05-25 15:07  聪神carry  阅读(4246)  评论(1编辑  收藏  举报