2024年4月12日发(作者:)
随着近年来SOA面向服务技术架构的兴起,越来越多的应用系统开始进行分布式的设计
和部署.系统由原来单一的技术架构变成面向服务的多系统架构.原来在一个系统之间可以
完成的业务流程,通过多系统的之间多次交互来实现.这里不打算介绍如何进行SOA架构的
设计,而是介绍一下应用系统之间如何进行数据的传输.
应用系统之间数据传输有三个要素:传输方式,传输协议,数据格式
数据传输方式一般无非是以下几种:
1、socket方式
Socket方式是最简单的交互方式.是典型才C/S交互模式.一台客户机,一台服务器.服
务器提供服务,通过IP地址和端口进行服务访问.而客户机通过连接服务器指定的端口进行
消息交互.其中传输协议可以是TCP/UDP协议.而服务器和约定了请求报文格式和响应报文
格式.如图一所示:
目前我们常用的http调用,java远程调用,webservices都是采用的这种方式,只不过
不同的就是传输协议以及报文格式.
这种方式的优点是:
1易于编程,目前java提供了多种框架,屏蔽了底层通信细节以及数据传输转换细节.
2容易控制权限.通过传输层协议https,加密传输的数据,使得安全性提高
3通用性比较强,无论客户端是架构,java,python都是可以的.尤其是webservice规范,
使得服务变得通用
而这种方式的缺点是:
1服务器和客户端必须同时工作,当服务器端不可用的时候,整个数据交互是不可进行.
2当传输数据量比较大的时候,严重占用网络带宽,可能导致连接超时.使得在数据量交
互的时候,服务变的很不可靠.
2、ftp/文件共享服务器方式
对于大数据量的交互,采用这种文件的交互方式最适合不过了.系统A和系统B约定文
件服务器地址,文件命名规则,文件内容格式等内容,通过上传文件到文件服务器进行数据
交互.
最典型的应用场景是批量处理数据:例如系统A把今天12点之前把要处理的数据生成
到一个文件,系统B第二天凌晨1点进行处理,处理完成之后,把处理结果生成到一个文件,
系统A12点在进行结果处理.这种状况经常发生在A是事物处理型系统,对响应要求比较高,
不适合做数据分析型的工作,而系统B是后台系统,对处理能力要求比较高,适合做批量任务
系统.
以上只是说明通过文件方式的数据交互,实际情况B完成任务之后,可能通过socket的
方式通知A,不一定是通过文件方式.
这种方式的优点:
1在数据量大的情况下,可以通过文件传输,不会超时,不占用网络带宽.
2方案简单,避免了网络传输,网络协议相关的概念.
这种方式的缺点:
1不太适合做实时类的业务
2必须有共同的文件服务器,文件服务器这里面存在风险.因为文件可能被篡改,删除,
或者存在泄密等.
3必须约定文件数据的格式,当改变文件格式的时候,需要各个系统都同步做修改.
3、数据库共享数据方式
系统A和系统B通过连接同一个数据库服务器的同一张表进行数据交换.当系统A请求
系统B处理数据的时候,系统AInsert一条数据,系统Bselect系统A插入的数据进行处理.
这种方式的优点是
1相比文件方式传输来说,因为使用的同一个数据库,交互更加简单.
2由于数据库提供相当做的操作,比如更新,回滚等.交互方式比较灵活,而且通过数据
库的事务机制,可以做成可靠性的数据交换.
这种方式的缺点:
1当连接B的系统越来越多的时候,由于数据库的连接池是有限的,导致每个系统分配
到的连接不会很多,当系统越来越多的时候,可能导致无可用的数据库连接
2一般情况,来自两个不同公司的系统,不太会开放自己的数据库给对方连接,因为这样
会有安全性影响
4、message方式
Java消息服务JavaMessageService是message数据传输的典型的实现方式.系统A和
系统B通过一个消息服务器进行数据交换.系统A发送消息到消息服务器,如果系统B订阅
系统A发送过来的消息,消息服务器会消息推送给B.双方约定消息格式即可.目前市场上有
很多开源的jms消息中间件,比如ActiveMQ,OpenJMS.
这种方式的优点
1由于jms定义了规范,有很多的开源的消息中间件可以选择,而且比较通用.接入起来
相对也比较简单
2通过消息方式比较灵活,可以采取同步,异步,可靠性的消息处理,消息中间件也可以
独立出来部署.
这种方式的缺点
1学习jms相关的基础知识,消息中间件的具体配置,以及实现的细节对于开发人员来
说还是有一点学习成本的
2在大数据量的情况下,消息可能会产生积压,导致消息延迟,消息丢失,甚至消息中间
件崩溃.
下面具体来分析一个场景,来看看系统之间数据传输的应用
场景目前业务人员需要导入一个大文件到系统A,系统A保存文件信息,而文件里面的
明细信息需要导入到系统B进行分析,当系统B分析完成之后,需要把分析结果通知系统A.
A系统A先保存文件到文件服务器.
B系统A通过webservice调用系统B提供的服务器,把需要处理的文件名发送到系统
B.由于文件很大,需要处理很长时间,所以B不及时处理文件,而是保存需要处理的文件名到
数据库,通过后台定时调度机制去处理.所以B接收请求成功,立刻返回系统A成功.
C系统B定时查询数据库记录,通过记录查找文件路径,找到文件进行处理.这个过程很
长.
D系统B处理完成之后发送消息给系统A,告知系统A文件处理完成.
E系统A接收到系统B请求来的消息,进行展示任务结果
发布评论