分布式系统数据传输的解决方案
开发平台:VS.Net
数据库版本:Oracle 9i
案例:本人在实际项目中碰到这样的实例,现在以省公安厅与各地市局的系统为例,现对分布式系统数据传输的方案作以下分析,希望能够抛砖引玉.
描述:由于省厅数据库与地市数据库分别存储在不同的服务器上,即省厅和市局均有自己的Web服务器及数据库服务器,由于市局需要增加一项功能,即在页面上查询全省的嫌疑人,这就要求需要将市局数据库的嫌疑人资料同步到省厅的数据库中,以保证资料的完整性。同时,要求做到传输的定时运行,或自定义实时监听修改的数据完成即时同步运行。
u 参考的解决方案:
1. Windows Service: (Windows 服务)
特点:写成一个Windows 服务,并注册到系统的服务中,设为自动启动。这样可以实时运行了。
局限性:由于Windows 服务没有界面,只是在后台运行,所以不便于增加管理和设置功能。如果windows服务要与界面交互,就需要写两个程序,一个winform程序,用于调置服务所需要的参数;一个windows服务程序,用来在系统的服务中运行。
2.在Web程序中启用线程调用
特点:在Web程序中启用线程,由Global.asax中的Application_Start中写入启动运行的代码,这样,Web程序一旦启动,就已经实时运行。
局限性:由于此部分写在LSA的程序里,只有当LSA的Web程序运行,才可以运行,所以缺乏独立性。
3.Winform + WebService
此程序安装在省公安厅,作为一个传输工具来使用。由于是单独的工具,所以方便定义和配置,并且不受IIS的影响。但由于需要安装,所以最好只安装在省厅使用,由管理员定期运行,或者放入windows 的计划任务内,根据设定的功能自动运行。
4.Oracle 快照和高级复制
由于在Oracle数据库后台运行,需要有DBA的权限,并且需要建立DBLink。建立快照时要求表具有主键,否则建立不成功。但我们系统中的表中的列IIDD并没有被设置为主键,所以不能建立快照。
综上所述,实现分布式系统的数据传输的方法并不少,但我们要考虑程序的通用性、易用性、灵活性及扩展性,必须权衡利弊,以得到最佳的解决方案。
个人认为,可以采用以上的第3种方案,编写Windows form的Windows程序实现分布式系统的数据传输功能。
构想:实现远程数据传输,包括获取数据和更新数据两大方面,获取数据可以通过触发器或者其它方法得到添加或修改的数据集,并保存在源数据库里;更新数据主要通过调用Web service访问远程数据库的源数据,然后在本地更新,这样有利于做事务处理。而调用Web service时,就需要在LSA的WEB程序中有相应的Web service接口提供的方法,以供远程调用。
下面,就针对此方案作细节方面的讨论:
u Winform+WebService实现数据传输功能的设想
特点:只须安装在省厅的服务器上;不用修改地市的数据库;可以自定义设置所需的功能;Web service保证了对远程数据库操作的安全性。
1.设置功能:
1) 所有传输的源表及目的表;
2) 时间间隔,写入配置文件或者写入数据库,在菜单中设置。然后在程序中读取此配置;
3) 传输源地址及传输目的地址(此处指Web Service地址);
4) 传输所有记录或传输增量记录;
5) 定时运行或实时运行;
6) 增量传输的源表及目的表(读取的表名及写入的表名,要求字段匹配)
2.界面说明
1) 展示需要同步的数据记录,包括所有记录和增量记录,并记录是新增或修改的标志。
2) 展示同步的历史记录,包括同步的表名、目的地、同步发生时间、同步类型及同步结果。
3) 工具栏及菜单项,提供功能设置及运行功能等。
4) 同步成功或失败,是调用Web service实现,在Web service的方法里实现事务处理,并返回成功或失败的标志给调用方,以显示提示信息,并写入系统日志。
3.技术处理
1) 在Winform中动态调用Web Service,已经测试通过。
2) 同步方法:
a) 同步所有数据:同步表内所有记录,一般是第一次运行后不再运行;
b) 同步增量数据的两种方法:
在市局数据库中编写触发器,当数据表有添加和修改操作,即将添加和修改的记录写入一新表,同步时取新表的记录传输到省厅的相应表中。
3) 传输失败的处理
在目的地接收传输的数据,可以通过Web service 地址远程获取需要传输过来的Data Set,然后在程序中更新至本地数据库的目的表中。此处接收更新使用事务处理,若失败,则全部自动回滚,并抛出异常。
4) 实时传输时失败的处理
实时传输是放在Windows的计划任务中运行,如果认为放在计划任务中不是好的方法,可以再写一个windows 服务程序来实现与数据的交互,然后由winform程序中启动windows服务来实时运行。此处会根据设置的时间间隔去取传输源表的数据自动传输到目的地,若失败应将此次传输的记录保存,并标记为失败,以利于下次继续传输此次记录。
浙公网安备 33010602011771号