系统间数据交互接口设计议论
系统间数据交互接口设计讨论
现在有这样的一个需求,我们做的系统有一个监控模块,这个模块定期会采集别的系统数据,然后我们系统对采集回来的数据进行分析,作出一些报告什么的。
例如:监控模块每天00:00采集营销管理系统的各部门的日营业额,各部门的人员出勤情况等。采集物流系统中每个物流站点的日订单量,出货量等。(说明:各系统是独立的,是由不同的公司开发的,但属于同一用户)
问题:我们的系统如何和相关的外系统进行数据交互,也就是数据交互接口怎么设计?
目前我们有两种方案,大家帮忙看看各自优缺点,到底哪种更适合一些。
方案1:采用EJB同步调用,基于XML报文交互。
该方案事先各方定义好接口规范,使用时直接调用外系统提供的接口,传入的参数是字符串,字符串实际上就是一个 XML,里面包含此次数据交互的一些请求参数,比如数据的类型(什么数据),部门,数据的时间等,外系统根据请求参数查询自己的数据库,准备好数据后,组成一个XML字符串,再给我返回,我把返回的XML字符串解析后进行处理。
方案2:采用中间库
该方案是在我们系统和外系统之间建立一个中间数据库,外系统定期将我们需要的数据从自己数据库中抽取出来放到中间库里,我们系统再定期去中间库取数据。
我现在的理解是:
使用方案1扩展容易,使用简单,就调用一个接口方法,XML报文编辑,解析有现成的代码。
使用方案2中间库的数据存储复杂(采集的数据全是异构),从外系统到中间库,再从我们系统到中间库可能要使用存储过程,导致大量的存储过程,维护就变复杂了,并且开发难度也有所上升(存储过程感觉还得由有经验的高手来写),这样工作会变难。
之前没用过存储过程,不知道上面说的对不对,请大家帮忙看看这两个方案的优缺点,哪个更合理?哪个工作量更小一点。或者有更好的方案,欢迎大家多多讨论,谢谢大家了
恩,我们目前的想法是通过调用外系统接口把返回的数据以XML的形式存在我们本地库里面。
如果用中间库存XML数据的话,我觉得实际上就变成了第一种方案的优化,隔离了我们系统和外系统,解耦并且消除了阻塞的可能,可以考虑考虑
多谢~
这样的话我们工作量就会上去,要编写处理这个文本的代码,还有测试
目前的方案一主要考虑的是有现成的代码,经过测试的,可以直接使用,方案1的数据也支持编码,压缩还有加密
不过还是多谢你的建议~
中间层的话,开发工作量大可能在哪些方面呢?
请教一下第2种方式做监控有什么优势呢?
非常感谢各位的建议和各位建议的方案,从中得到了很多启发和一些思路。
目前系统还是采用了方案1,相对来说做起了更简单,因为有些积累,而且也能满足要求,风险相对来说小一点。再次感谢各位的热心回复,谢谢~
现在有这样的一个需求,我们做的系统有一个监控模块,这个模块定期会采集别的系统数据,然后我们系统对采集回来的数据进行分析,作出一些报告什么的。
例如:监控模块每天00:00采集营销管理系统的各部门的日营业额,各部门的人员出勤情况等。采集物流系统中每个物流站点的日订单量,出货量等。(说明:各系统是独立的,是由不同的公司开发的,但属于同一用户)
问题:我们的系统如何和相关的外系统进行数据交互,也就是数据交互接口怎么设计?
目前我们有两种方案,大家帮忙看看各自优缺点,到底哪种更适合一些。
方案1:采用EJB同步调用,基于XML报文交互。
该方案事先各方定义好接口规范,使用时直接调用外系统提供的接口,传入的参数是字符串,字符串实际上就是一个 XML,里面包含此次数据交互的一些请求参数,比如数据的类型(什么数据),部门,数据的时间等,外系统根据请求参数查询自己的数据库,准备好数据后,组成一个XML字符串,再给我返回,我把返回的XML字符串解析后进行处理。
方案2:采用中间库
该方案是在我们系统和外系统之间建立一个中间数据库,外系统定期将我们需要的数据从自己数据库中抽取出来放到中间库里,我们系统再定期去中间库取数据。
我现在的理解是:
使用方案1扩展容易,使用简单,就调用一个接口方法,XML报文编辑,解析有现成的代码。
使用方案2中间库的数据存储复杂(采集的数据全是异构),从外系统到中间库,再从我们系统到中间库可能要使用存储过程,导致大量的存储过程,维护就变复杂了,并且开发难度也有所上升(存储过程感觉还得由有经验的高手来写),这样工作会变难。
之前没用过存储过程,不知道上面说的对不对,请大家帮忙看看这两个方案的优缺点,哪个更合理?哪个工作量更小一点。或者有更好的方案,欢迎大家多多讨论,谢谢大家了
26 楼
deific
2011-02-24
seanla 写道
如果只有这两种方案的话,第二种比第一种好,第一种方式在扩展方面未必会显得有优势,如果各个系统之间都有这样类似的交互的话,就可以发现系统交互的拓扑图就是一个网,这个对系统的维护是一个灾难。第二种方式消除了各个系统之间的直接依赖,而且也不会造成同步调用可能发生的阻塞,用中间数据库的方式也未必一定要用存储过程,各个系统可以将要生成报表的数据以xml的形式存在数据库里面。
恩,我们目前的想法是通过调用外系统接口把返回的数据以XML的形式存在我们本地库里面。
如果用中间库存XML数据的话,我觉得实际上就变成了第一种方案的优化,隔离了我们系统和外系统,解耦并且消除了阻塞的可能,可以考虑考虑
27 楼
wing5jface
2011-02-24
直接用http传输,定义交互接口,base64+压缩 直接传文本,按格式
28 楼
deific
2011-02-24
wing5jface 写道
直接用http传输,定义交互接口,base64+压缩 直接传文本,按格式
这样的话我们工作量就会上去,要编写处理这个文本的代码,还有测试
目前的方案一主要考虑的是有现成的代码,经过测试的,可以直接使用,方案1的数据也支持编码,压缩还有加密
不过还是多谢你的建议~
29 楼
fastwei
2011-02-24
楼主已经有方案了,结贴。哈哈。
30 楼
20029388
2011-02-24
webservice ,传递一个xml 这样以后维护方便,即使现有开发人员离职,后期接手也方便。
如果用中间层,这个接手麻烦。而且开发的工作量要大些
如果用中间层,这个接手麻烦。而且开发的工作量要大些
31 楼
deific
2011-02-24
20029388 写道
webservice ,传递一个xml 这样以后维护方便,即使现有开发人员离职,后期接手也方便。
如果用中间层,这个接手麻烦。而且开发的工作量要大些
如果用中间层,这个接手麻烦。而且开发的工作量要大些
中间层的话,开发工作量大可能在哪些方面呢?
32 楼
aq1sw2
2011-02-24
甭想了,用第二种方式,做了这么多年监控,第二种方式是长久方式
33 楼
deific
2011-02-24
aq1sw2 写道
甭想了,用第二种方式,做了这么多年监控,第二种方式是长久方式
请教一下第2种方式做监控有什么优势呢?
34 楼
summerfeel
2011-02-25
第二种好。
数据分析和统计使用存储过程跑,然后将结果存到一个表中,你们系统直接读这个表就可以了。
数据分析和统计使用存储过程跑,然后将结果存到一个表中,你们系统直接读这个表就可以了。
35 楼
sunny521314
2011-02-25
还是webservice好,我们公司就用这个
36 楼
wk458469748
2011-02-25
个人觉得是webservice好用些。
37 楼
pojo
2011-02-25
第三方案:用MDB,既简单又低耦合。
38 楼
幽梦新影
2011-02-25
这两种方案都不错,要视不同情况而定吧,我们公司就大量使第二种情况,第一种情况也有使用,比较少点,但EJB就没有用了
39 楼
ppgunjack
2011-02-25
corba,如果真的以后想集成重量级的商业网管
40 楼
jianglei_syn
2011-02-25
用http+xml好一些吧,通用性强一些,EJB毕竟还是封装了
41 楼
cectsky
2011-02-25
http+xml=soap~webservice
so you can use webservice
also middle tables are good,i think
so you can use webservice
also middle tables are good,i think
42 楼
lianglaiyang
2011-02-25
WBESERVICE就很好解决你的问题
43 楼
lianglaiyang
2011-02-25
定时器+webservice
44 楼
day
2011-02-26
目前系统间数据交互一般都方案一多些 简单能满足大体需求,大型系统间应用集成可以考虑ESB
45 楼
deific
2011-02-28
非常感谢各位的建议和各位建议的方案,从中得到了很多启发和一些思路。
目前系统还是采用了方案1,相对来说做起了更简单,因为有些积累,而且也能满足要求,风险相对来说小一点。再次感谢各位的热心回复,谢谢~