飞狐.net

人的每一步行动,都在书写自己的历史
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

分布式系统数据传输的解决方案之一

Posted on 2007-01-16 18:23  飞狐时代  阅读(2750)  评论(2)    收藏  举报

                                                分布式系统数据传输的解决方案

开发平台: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服务来实时运行。此处会根据设置的时间间隔去取传输源表的数据自动传输到目的地,若失败应将此次传输的记录保存,并标记为失败,以利于下次继续传输此次记录。

  

飞狐.net·书写程序员的历史·创建于2006年12月
Copyright 2005 Silver fox© 飞狐.net All Rights Reserved.