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