本文转载自sina_blog(siangzhang)


目录

1  Socket方式

2  ftp/文件共享服务器方式

3 数据库共享数据方式

4 message方式

5 案例


随着近年来SOA(面向服务技术架构)的兴起,越来越多的应用系统开始进行分布式的设计和部署。 
系统由原来单一的技术架构变成面向服务的多系统架构。 原来在一个系统之间可以完成的业务流程,通过多系统的之间多次交互来实现。 
这里不打算介绍如何进行SOA架构的设计,而是介绍一下应用系统之间如何进行数据的传输。

应用系统之间数据传输有三个要素:

传输方式,传输协议,数据格式

数据传输方式一般无非是以下几种:

1 socket方式、

2 ftp/文件共享服务器方式、

3 数据库共享数据方式、

4 message方式


1  Socket方式

Socket方式是最简单的交互方式。是典型才c/s 交互模式。 
一台客户机,一台服务器。 
服务器提供服务,通过ip地址和端口进行服务访问。 
而客户机通过连接服务器指定的端口进行消息交互。 
其中传输协议可以是tcp/UDP 协议。 
而服务器和约定了请求报文格式和响应报文格式。如图一所示:

目前我们常用的 http调用, java远程调用, webserivces 都是采用的这种方式, 只不过不同的就是传输协议以及报文格式。

这种方式的优点是:

1 易于编程,目前java提供了多种框架,屏蔽了底层通信细节以及数据传输转换细节。

2 容易控制权限。通过传输层协议https,加密传输的数据,使得安全性提高

3 通用性比较强,无论客户端是.net架构,java,python 都是可以的。尤其是webservice规范,使得服务变得通用

而这种方式的缺点是:

1 服务器和客户端必须同时工作,当服务器端不可用的时候,整个数据交互是不可进行。

2 当传输数据量比较大的时候,严重占用网络带宽,可能导致连接超时。使得在数据量交互的时候,服务变的很不可靠。


2  ftp/文件共享服务器方式

对于大数据量的交互, 
采用这种文件的交互方式最适合不过了。 
系统A和系统B约定文件服务器地址,文件命名规则,文件内容格式等内容, 
通过上传文件到文件服务器进行数据交互。

最典型的应用场景是批量处理数据:例如系统A把今天12点之前把要处理的数据生成到一个文件,系统B第二天凌晨1点进行处理,处理完成之后,把处理结果生成到一个文件,系统A 
12点在进行结果处理。

这种状况经常发生在A是事物处理型系统,对响应要求比较高,不适合做数据分析型的工作,而系统B是后台系统,对处理能力要求比较高,适合做批量任务系统。

以上只是说明通过文件方式的数据交互,实际情况B完成任务之后,可能通过socket的方式通知A,不一定是通过文件方式。

这种方式的优点:

1 在数据量大的情况下,可以通过文件传输,不会超时,不占用网络带宽。

2 方案简单,避免了网络传输,网络协议相关的概念。

这种方式的缺点:

1 不太适合做实时类的业务

2 必须有共同的文件服务器,文件服务器这里面存在风险。因为文件可能被篡改,删除,或者存在泄密等。

3 必须约定文件数据的格式,当改变文件格式的时候,需要各个系统都同步做修改。


3 数据库共享数据方式

系统A和系统B通过连接同一个数据库服务器的同一张表进行数据交换。 当系统A请求系统B处理数据的时候,系统A Insert一条数据,系统B 
select 系统A插入的数据进行处理。

这种方式的优点是

1 相比文件方式传输来说,因为使用的同一个数据库,交互更加简单。

2 由于数据库提供相当做的操作,比如更新,回滚等。交互方式比较灵活,而且通过数据库的事务机制,可以做成可靠性的数据交换。

这种方式的缺点:

1 当连接B的系统越来越多的时候,由于数据库的连接池是有限的,导致每个系统分配到的连接不会很多,当系统越来越多的时候,可能导致无可用的数据库连接

2 一般情况,来自两个不同公司的系统,不太会开放自己的数据库给对方连接,因为这样会有安全性影响


4 message方式

Java消息服务(Java Message Service)是message数据传输的典型的实现方式。 
系统A和系统B通过一个消息服务器进行数据交换。 系统A发送消息到消息服务器,如果系统B订阅系统A发送过来的消息,消息服务器会消息推送给B。 
双方约定消息格式即可。

目前市场上有很多开源的jms消息中间件,比如  ActiveMQ, OpenJMS ,RabbitMQ。
  • 1

这种方式的优点

1 由于jms定义了规范,有很多的开源的消息中间件可以选择,而且比较通用。接入起来相对也比较简单

2 通过消息方式比较灵活,可以采取同步,异步,可靠性的消息处理,消息中间件也可以独立出来部署。

这种方式的缺点

1 学习jms相关的基础知识,消息中间件的具体配置,以及实现的细节对于开发人员来说还是有一点学习成本的

2 在大数据量的情况下,消息可能会产生积压,导致消息延迟,消息丢失,甚至消息中间件崩溃。


5 案例

下面具体来分析一个场景,来看看系统之间数据传输的应用

场景 
目前业务人员需要导入一个大文件到系统A,系统A保存文件信息,而文件里面的明细信息需要导入到系统B进行分析,当系统B分析完成之后,需要把分析结果通知系统A。

A 系统A先保存文件到文件服务器。

B 系统A 通过webservice 
调用系统B提供的服务器,把需要处理的文件名发送到系统B。由于文件很大,需要处理很长时间,所以B不及时处理文件,而是保存需要处理的文件名到数据库,通过后台定时调度机制去处理。所以B接收请求成功,立刻返回系统A成功。

C 系统B定时查询数据库记录,通过记录查找文件路径,找到文件进行处理。这个过程很长。

D 系统B处理完成之后发送消息给系统A,告知系统A文件处理完成。

E 系统A 接收到系统B请求来的消息,进行展示任务结果

Web应用系统中数据传递的方式汇总相关推荐

  1. 浅谈ASP中Web页面间的数据传递

    [简 介] 基于Web的动态网页设计必会涉及到页面间的数据传递,文章探讨了ASP设计中常用的Web页面间的数据传递方式,分析各种数据传递方式的使用方法.使用场合及优缺点,其都是设计阶段选择数据传递方式 ...

  2. 用友二次开发_详解ERP系统与MES系统的数据传递——永康用友

    详解ERP系统与MES系统的数据传递--永康用友 摘要:本文将按照数据的传递方向"从ERP到MES"和"MES到ERP"分别介绍MES系统如何与其他软件连接,才 ...

  3. 转MVC中数据传递 ViewBag的使用

    MVC中数据传递 ViewBag的使用 链接:https://www.cnblogs.com/cynchanpin/p/7065098.html ViewBag MVC3中 ViewBag.ViewD ...

  4. opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类

    opengl中的Floatbuffer和IntBuffer与java中数据的存储方式不同的解决方法,编辑一个自己的BufferUtil工具类 参考文章: (1)opengl中的Floatbuffer和 ...

  5. 支付系统中如何应用加密方式的

    支付系统中如何应用加密方式的 加密方式分为 对称加密 和非对称加密.支付系统中主要使用 非对称加密. 非对称加密在支付系统中的具体应用是 消息的加解密(公钥加密,私钥解密), 消息 签名 和验签(私钥 ...

  6. Matlab中数据的存储方式

    简介 MATLAB提供了丰富的算法以及一个易于操作的语言,给算法研发工作者提供了很多便利.然而MATLAB在执行某些任务的时候,执行效率偏低,测试较大任务量时可能会引起较长时间的等待.未解决这个问题, ...

  7. 计算机指令中数据寻址的方式,1.变址寻址需要在指令中提供一个寄存器编号和一个数值。 2.计算机的指令越多,功能越强越好。 3.程序计数...

    满意答案 happysk72 推荐于 2017.12.16 采纳率:57%    等级:12 已帮助:21199人 1.对 变址寻址就是将寄存器(该寄存器一般称作基址寄存器)的内容与指令中给出的地址偏 ...

  8. java工程编辑器中文乱码_Java Web开发项目中中文乱码解决方法汇总

    Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存 ...

  9. 应用系统之间数据传递的几种方式

    本文转载自sina_blog(siangzhang) 随着近年来SOA(面向服务技术架构)的兴起,越来越多的应用系统开始进行分布式的设计和部署. 系统由原来单一的技术架构变成面向服务的多系统架构. 原 ...

最新文章

  1. Java面试题汇总2021最新(集合泛型含答案下载)
  2. 学生、课程、分数的设计(重要)
  3. $(document).ready() $(window).load 及js的window.onload
  4. python购物车程序-Python编写购物车程序
  5. BZOJ2956 (模积和)
  6. centos6.8安装docker
  7. http通道连接mysql_通过http tunnel连接mysql
  8. 渗透测试web未设置http头 Strict Transport Security
  9. 我的NopCommerce之旅(4): 定时任务之邮件
  10. Windows服务卸载之后未重启机器之前再安装问题
  11. S3C2440的SPI控制器
  12. Global GUI map for automation with VS.NET
  13. 怎么捡自己空投_绝地求生:如何用纸皮自制空投?只需2个道具即可完成,附带教程...
  14. DOS命令大全(经典收藏)【运行CMD后的命令】
  15. vue点击下载图片的实现
  16. 三个三维矢量叉乘公式(拉格朗日矢量公式)推导(非坐标法)
  17. DFRobot-Fermion环境传感器详细介绍和应用
  18. 团队对员工工作积极性的影响
  19. 极路由刷个人编译的openwrt固件全过程
  20. 数据分析入门学习指南,零基础小白都能轻松看懂

热门文章

  1. Java开启/关闭tomcat服务器
  2. Spring Cloud面试题
  3. vue devtools面板没有显示_vue 基础入门(四)
  4. 算术类型转换、整型提升
  5. python中restful接口开发实例_Python RESTful接口开发02
  6. 利用一维数组求菲波那契数列前40项的和并输出结果。_[W2D2]斐波那契数列
  7. 538B. Quasi Binary
  8. java做橡皮擦效果_HTML5 canvas橡皮擦擦拭效果
  9. oracle sal01,oracle中 all any in的用法
  10. snmp获取交换机日志_日志审计系统和数据库审计系统的区别