Web应用系统中数据传递的方式汇总

本文转载自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请求来的消息,进行展示任务结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436384.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】CT (电子计算机断层扫描)

CT(Computed Tomography),即电子计算机断层扫描,它是利用精确准直的X线束、γ射线、超声波等,与灵敏度极高的探测器一同围绕人体的某一部位作一个接一个的断面扫描,具有扫描速度快,图像清晰等特点,可用于多…

WinCE驱动的动态加载

// //TITLE: // WinCE驱动的动态加载 //AUTHOR: // norains //DATE: // Monday 22- February-2010 //Environment: // WINDOWS CE 5.0 // WinCE驱动的调试,很多人的第一感觉就是:编写好DLL文件,接着在PB中添加相关注册表信息&am…

Linux:chmod命令-修改文件或目录的权限

给新安装的tomcat/bin目录下的所有文件增加执行权限(所有用户、组) chmod -R ax /usr/local/tomcat/bin ------------------------------------------------------------------------------------------------------------------- 关于具体的chmod命令…

获取WinCE已加载驱动的信息

// //TITLE: // WinCE驱动的动态加载 //AUTHOR: // norains //DATE: // Monday 22- February-2010 //Environment: // WINDOWS CE 5.0 // WinCE驱动的调试,很多人的第一感觉就是:编写好DLL文件,接着在PB中添加相关注册表信息&am…

【转】详解冠状面_水平面_矢状面_窗宽_窗位

在接触人工智能医疗方面时,单是学习算法和代码原理还不够,需要一定的医学影像知识储备。 B超、CT、MR等都算是医疗影像,在现实生活中,从医院检查身体后拿到的胶片是处理过后的二维图像。这些医疗影像其实是三维的。 最常见的图片格…

js+ asp.Net ajax开发163邮箱效果(列表底色、多选拖动等)--checkBox多选

163邮件一个比较爽的功能就是可以通过多选邮件,拖动到左侧的文件夹列表,实现邮件归类的功能关于我对拖动分配的实现将在后文写出这里说说在CheckBox的选择中做得尝试和实现的效果、方法1。点击表格Title实现全选每行这个早有人做了,我这里借鉴一下 一块贴…

【转】医学图像中的窗宽、窗位!!

在CT等医学影像显示领域,我们经常会听到窗宽(Window Width,简写WW)、窗位(Window Level,简写WL)的概念,那么到底什么是窗宽、窗位,它们跟医学图像之间的关系又是什么? 先说一下CT值…

【Excel】使用VLOOKUP+IF实现多列条件匹配查询

excel中vlookup函数为精准匹配查找,但此函数局限于单列的精准匹配,如果需求是多列条件进行匹配,怎么通过vlookup函数实现呢? 思路:通过if函数将多列拼成一列再通过vlookup函数进行精准匹配 具体公式为VLOOKUP($F2&…

自己动手写TCC7901的GPIO驱动

// //TITLE: // 自己动手写TCC7901的GPIO驱动 //AUTHOR: // norains //DATE: // Monday 12-July-2010 //Environment: // Windows CE 5.0 TCC7901 // 如果你使用的是WinCE,然后又涉及到GPIO的操作,你会很尴尬地发现,WinCE根本就…

如何处理db2中文不显示

最近安装了db2 7.2一路装下来没有报错,但当打开db2时,不显示中文。郁闷!请教了,单位资深专家,解决方法如下:SQLLIB\java\java12\jdk\jre\lib目录下font.properties.zh文件修改filename.\u5b8b\u4f53simsun.…

【转】DELPHI 对DICOM中的窗宽、窗位调整

在写这篇文章前72小时,我的多窗显示组件对于个别大W/C值的16位影像显示还是个问题,也发了帖子到PACS站询问过,更是在Google上猫刨了很久,终归一无所获,今天静下心来,用了2小时反复查看程序处理过程&#xf…

【转】解密Qt安装目录的结构

转自:C语言中文网 强力推荐 网址:http://c.biancheng.net/view/3866.html 了解 Qt 安装目录的结构虽然不是编程必须的,但是它能练就我们的内功,让我们对 Qt 的编程环境了如指掌。Windows 和 Linux 下 Qt 安装目录的结构非常相似…

大话WinCE与WinXP应用程序开发的差异性

// //TITLE: // 大话WinCE与WinXP应用程序开发的差异性 //AUTHOR: // norains //DATE: // Wednesday 21-April-2010 //Environment: // Windows CE 5.0 // Windows XP // "龙生龙,凤生凤,老鼠生的儿子会打洞",所以无…

WinCE驱动的动态卸载

// //TITLE: // WinCE驱动的动态卸载 //AUTHOR: // norains //DATE: // Wednesday 21-April-2010 //Environment: // Windows CE 5.0 // 在之前的一篇《WinCE驱动的动态加载》(http://blog.csdn.net/norains/archive/2010/02/22/5316923.aspx)中有谈到,…

【转】09.认识一下Qt用到的开发工具

Qt 不是凭空产生的,它是基于现有工具链打造而成的,它所使用的编译器、链接器、调试器等都不是自己的,Qt 官方只是开发了上层工具。下面我们分几个部分讲解 Qt 使用到的工具链。 GNU 工具集 在上个世纪八十年代,计算机都是奢侈品…

冒个泡

好久没有上来了。也没有什么好说的。最近在做基于SVG开发的一个实时监测系统,感觉目前SVG性能还不是太好,客户端CPU不经意间就达到80%以上了。向老板提出辞职,不过老板没有同意,最终协商结果再做三个月,直到新人完全接…

发一个自己写的2440驱动1602的资料(电路+代码)

上个星期把MINI2440板上的富余数据线引了出来,看着以前丢下的1602突然有了想用ARM9驱动它的冲动,于是就开始干了。 代码是从以前刚学C51的时候改的,呵呵,看见以前写的代码真觉得很烂,现在已经整理好了。 虽说有点牛刀…

【转】10.Qt编程涉及的术语和名词

本节我们来介绍一下使用 Qt 编程过程中常用的术语和名字,它们不一定专属于 Qt,在其它的 C/C 开发过程中也会使用到。 Project Project 的中文翻译是“项目”或者“工程”,这里的项目是指为实现某个相对独立功能的程序代码合集,这…

VS2005开发WinCE6.0应用程序 更换SDK后工程的移植

在应用VS2005开发嵌入式应用程序的时候,一旦平台的SDK发生改变,原先的应用程序就打不开了。搞的偶是非常郁闷,一旦添加了或者更改了驱动程序,重新导出平台SDK以后都要重新建工程,再把代码拷贝到新的工程中,…

【转】17.Qt界面布局管理详解

在上一节,通过一个简单的应用程序,分析了 Qt 创建的 GUI 应用程序中各个文件的作用,剖析了可视化设计的UI文件是如何被转换为 C 的类定义,并自动创建界面的。这些是使用 Qt Creator 可视化设计用户界面,并使各个部分融…