采⽤⽹闸隔离的内外⽹如何进⾏数据的即时交互?⽹闸,也称边界平台、内外⽹数据交换系统。
⽹闸将内⽹与外⽹实现了隔离,即内外⽹程序不能直接相互访问。
那么,如何实现内外⽹即时数据交互呢?⽐如外⽹程序要访问内⽹webservice服务?
就拿外⽹程序访问内⽹的webservice服务为例,分析⼏种数据交互⽅式的可⾏性。
⼤概有三种⽅式:
1、使⽤⽹闸的映射功能:即在⽹闸中配置指定ip段的外⽹机器,只能访问内⽹指定ip、端⼝的
调用webservice服务机器所提供的指定服务。
评价:此种⽅式较为⽅便,但不是最安全的。
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、总结:映射⽅式与数据库同步⽅式最为靠谱,但若是对安全性要求⾮常⾼,则建议使⽤数据库同步⽅式,否则使⽤映射⽅式最为便捷。
然⽽,此种⽅式不⽀持图⽚数据,⼤字段类型、视频的交换。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论