ACE之通信的设计空间

本篇文章主要介绍

.无连接的和面向连接的协议之间的对比

.同步的和异步的消息交换之间的对比。

.消息传递和共享内存之间的对比。

1:无连接和面向连接的协议对比

  协议(protocol)是指一组规则,这些规则指明控制和数据信息如何在通信实体之间进行交换,比如说网络计算机环境内部做交互的应用进程这样的通信实体之间进行交换,协议通常分为无连接和面向连接的,在这一空间中需要做权衡取舍的方面主要包括延迟、可伸缩性和可靠性。

  无连接的协议提供了一种面向消息的服务,在这一服务中,每个消息都可以独立做路由和派发。无连接的协议经常使用“尽力而为”的传送语义,这样的语义并不保证一系列的消息会以某个特定的顺序到达它们的目的地,甚至不能保证它们能够到达目的地。

  用户数据报协议(User Datagram Protocol,UDP)和网际协议(Internet Protocol,IP)是两个广泛使用的无连接协议的例子,这些协议可以由诸如IP语音或流式视频一类的多媒体应用直接使用,这些应用可以容忍某种程度的数据丢失,UDP/IP还支持不可靠的组播和广播功能,这些功能是一个发送方可以与一组接收方通信。

  面向连接的协议提供了一个可靠、有序、不重复的发送服务,对于不能容忍数据丢失的应用来说,这一协议很有用,为了提高性能并确保可靠性,面向连接的协议交换和维护发送方和/或(一个或多个)接收方的状态信息。传输控制协议(TCP)就是一个面向连接的协议,他被应用在许多诸如web服务和电子邮件一类的面向会话的互联网应用中。

  在使用面向连接的协议的时候,应用和中间件的开发者还需要从如下的可选设计方案中做出选择:

(1):面向连接的协议提供了不同类型的数据组帧策略,例如,面向消息的传递策略由诸如TP4和XTP这样的一些面向连接的协议提供支持,相比之下,TCP则是一个并不保留应用消息的边界的字节流(bytestream)协议,因此,如果一个应用做了四次send()调用来通过TCP传输四个不同的消息的话,那么将有一个或多个(有可能多于四个)TCP段被传送给接收方。如果应用为此要求的是面向消息的派发的话,则发送方和接收方必须执行额外的处理把经由TCP交换的四个消息组成帧。如果消息的长度总是相等的,且网络错误从未发生,那么组成帧过程就会相对简单,否则,这将会一个不可忽视的问题。

(2):连接的多路复用策略

  在一个面向连接的协议上传输数据的两种常见的策略如下:

  

.多路复用。在这种连接策略中,从单个进程的多个线程发出的所有客户端请求都通过一个TCP连接传给服务器端进程,如上图(1)连接多路复用的一个优点是:节省了OS(操作系统)的诸如socket句柄和连接控制块一类的通信资源。这一策略的缺点是,编程的难度更高一些,效率更低一些,且不确定性更大一些。这些问题源于同步和上下文切换机制,这些机制需要把一个多路复用连接上的请求和应答关联起来。

.非多路复用。在这种策略中,每个客户端使用一个不同的连接来与一个对等的服务通信,如图(2)所示,非多路复用的连接的一个主要优点是对通信的优先级能进行的更好的控制,在非多路复用的连接设计中,每个连接的优先级可以做单独设置,这样具有高优先级的通信就会被较快的传递出去,即使在其他的线程之间存在着大量的低优先级的通信也是如此,这种设计避免了优先级的倒置,在这种情况下,低优先级线程会独占单一的一个多路复用连接。此外由于连接是非共享的,因此这一策略会带来较低的同步开销,因为不需要额外的锁来发送和接收双向的请求,与多路复用连接策略相比,非多路复用策略使用了更多的OS资源,因此在诸如大规模的互联网电子商务服务器一类的环境中,其伸缩性不是太好。

2:同步和异步的消息交换对比

  在许多网络应用中,客户端给服务器端发送一个请求,服务器处理请求后往回发送一个响应,这些请求/响应协议既可以在无连接协议上实现,也可以在面向连接的协议上实现,安排请求/响应(request/response)协议做交换的两种可选策略分别是同步的和异步的

  如下图所示:

      (1)同步消息交换策略                  (2)异步消息交换策略

影响到是选异步还是同步的消息交换策略的两大元素是:

(1)请求之间的相互关联性

(2)底层协议或通信介质的延迟

同步的请求/响应协议是最简单的实现形式,在这类协议中,请求和响应是以一种锁步(lock-step)顺序进行交换的,每个请求在下一个请求发送之前都必须要同步接收到一个响应,如上图(1)所示,同步的请求/响应协议适用下列情况

  .当请求的结果决定决定了后续的请求时,例如,一个要求验证交换的应用必须要等到安全证书完全成功交换之后才会发送敏感信息请求。

  .当用户交换的信息需要在低延迟网络中做短时间处理时,例如,在高速局域网络中NFS(网络文件系统 Network File System)的read()和write()操作

异步的请求/响应协议的请求持续地从客户端发向服务器而无须同步等待响应,在任何来自服务器端的响应到达之前,多个客户端请求就可以传送出去,如上图(2),因此,异步的请求/响应协议往往要求有一种检测请求丢失或失败,并在之后重新发送它们的策略。异步的请求/响应适用于下列情况:

  .在决定后续的请求之前不需要响应的时候,例如,Web浏览器可以使用异步策略从同一服务器提取多个内嵌的图像,由于每个请求都是独立的,因此它们都可以做异步的发送而无须等待响应,每个响应都包含了浏览器可用来把它与之相应的请求做匹配的信息,即便是响应的顺序与请求发送的顺序不一致也不会出现问题。

  .当通信延迟与请求所要求的处理时间高度相关的时候,异步请求策略有助于高效地使用网络,减少高延迟的影响。与关联响应和请求,以及正确实现重试策略所带来的额外复杂性相比,由此产生的性能改善更加有价值。

3:消息传递和共享内存的对比

  以上讨论的都是假设消息是在驻留与不同计算机上的对等端(peer)之间做传输的,这种交换方式被称作消息传递。当通信的对等端访问某个共享内存区域时,就会出现另一种类型的消息交换。

  消息传递是IPC(进程间通信)机制来显示地交换字节流和面向记录的数据。应用开发者通常会定义这些消息的格式和内容,以及参与者必须遵循的用于交换消息的应用协议。相应应用协议还定义了每个交换【如点对点(点播,组播或广播】的可能参与者的个数,以及参与者开始、进行以及结束每个消息传递会话的方式。

  

  消息传递IPC机制通过一个IPC通道把数据以消息的方式从一个进程或线程传递到另一个进程或线程中,如上图(1)所示,如果有大量的数据要做传输的话,数据可能会做分段处理,然后在消息序列中进行发送。如果有多于一个进程在接收数据的话,每个消息可能都要发送多次,每次发给一个接收者。许多流行的中间件框架,如RPC以及面向消息的中间件(Message-Oriented Minddleware, MOM)等,其内部都是基于消息传递这一通信模型的。

  共享内存(shared memory)允许位于同一或不同主机上的多个进程访问和交换数据,就像数据本身就位于每个进程的本地地址空间中一样,当网络应用拥有需要由多个进程来查看和/或操纵的数据时,共享内存的措施可能是比消息传递更有效的通信机制。使用了本地的OS共享内存机制的应用需要定义的是,定位和映射共享内存区域的方式,以及放置在共享内存中的数据结构,而不是定义在实体之间传输消息的方法。

  共享内存可分为本地的和分布式的,具体介绍如下:

  

  本地的共享内存

  本地的共享内存允许位于同一计算机上的多个进程把一个或多个共享内存区域映射到不同的虚拟地址空间上,两种常见的共享内存机制如下:

  (1)System V UNIX 共享内存:  在这种情况下,shmget()系统函数创建一个新的共享内存区域或返回一个现有的,进程使用shmat()系统函数把共享内存区域挂接到它们的虚拟地址空间上。

  (2)内存映射文件:  在这种情况下,某个文件的部分或者全部都可以被映射到虚拟内存的某一块上,这部分虚拟内存跨多进程共享。映射到内存文件的内容可被刷新到永久存储器中,这种做法提供了一种便捷地保存和恢复跨程序执行的信息的途径。

在这两种机制中,OS都能够让多个进程把共享内存区域映射到它们的地址空间中,如上图(2),所有映射了共享内存区域的进程都能够直接对共享内存进行读写操作。

尽管共享内存很灵活,但通过共享内存在多个进程间进行通信的编程要非常小心,例如,应用开发者必须确保被共享的数据不会被竞争条件所破坏。

分布式的共享内存

  分布式的共享内存(distributed shared Memory,DSM)是一种编程抽象,它为应用提供了OS虚拟机制的一个扩展。虚拟内存提供了一组根据需要来提取、放置和取代一组页面的策略,以给程序这样一种错觉,即它们拥有比物理内存多得多的可用地址空间。DSM把虚拟内存概念扩展到了整个网络上,使得经由全局/共享内存中的数据进行透明化的进程化的进程间通信成为可能。它代表了两种计算范式的一个混合模式,这两种计算范式分别是:共享内存的多处理器和分布式系统。

  例如,存在这样的硬件/软件平台,这些平台把多台计算机集群成一个逻辑系统,在一系统中,内存是横跨集群共享的,参与其中的应用通过托管在整个网络的计算机上的共享内存来进行通信。DSM系统提供了横跨进程和网络节点的协调更新机制,这一通信模型通常在其较低的层面中采用消息传递机制来协调数据的交换及同步数据的读取和写入者。

本节完毕!!!!

时间: 2024-11-08 22:28:52

ACE之通信的设计空间的相关文章

通信的设计空间

1. 无连接和面向连接的对比 取舍的主要方面包括延迟,可伸缩性和可靠性 无连接协议:UDP,IP 面向连接:TCP 1.1 数据组帧策略 面向消息的传送策略:TP4和XTP 字节流:TCP 1.2 连接的多路复用策略 多路复用的:节省OS诸如句柄等资源,编程难度更高,效率更低,不确定性更大. 非多用复用的:优先级可以更好的控制,较低的同步开销,更多的OS资源. 2.同步和异步的消息交换对比 取舍因素: 1.请求之间的关联性 2.底层协议或通信介质的延迟 2.1 适用于同步请求 当请求的结果决定了

Modbus RTU 通信工具设计(转)

Modbus RTU 通信工具设计 Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PDU),即PDU=功能码+数据域. ModBus 协议能够应用在不同类型的总线或网络.对应不同的总线或网络,Modbus 协议引入一些附加域映射成应用数据单元(ADU),即ADU=附加域+PDU.目前,Modbus 有下列三种通信方式: 1.    以太网,对应的通信模式是Modbus TCP. 2.

移动端与服务端通信流程设计

转自:http://blog.snsgou.com/post-766.html 针对 --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程: 3.有点接口需要用户登录才能访问: 4.有点接口不需要用户登录就可访问: 针对以上特点,移动端与服务端的通信就需要2把钥匙,即2个token. 第一个token是针对接口的(api_token

移动端与PHP服务端接口通信流程设计(增强版)

增强地方一: 再增加2张表,一个接口表,一个授权表,设计参考如下: 接口表 字段名 字段类型 注释 api_id int 接口ID api_name varchar(120) 接口名,以"/"作为分割线,如 blog/Index/addBlog api_domain varchar(256) 所属领域 is_enabled tinyint(1) 是否可用  1:可用 0:不可用 add_time int 添加时间(戳) (注:只列出了核心字段,其它的再扩展吧!!!) 授权表 字段名 字

distri.lua线程间通信的设计

首先简单介绍下distri.lua中的线程设计方案. distri.lua提供一个API函数fork用于创建新的C线程,这个C线程运行独立的lua虚拟机,为了在各线程之间通信 每个线程都会创建一个channel,用于接收其它线程发送过来的消息. 这个channel内部实现为单向链表,为了将channel的处理与网络消息处理接口合并,channel使用tls为每个单 独的 线程创建一个管道,这个管道被添加到proactor中监听,如果一个线程尝试从channel中读消息,而消息队 列为空,就 将这

Windows进程通信-共享内存空间

三个模块 1,game.exe,三个方法,控制台输入指令('A','B','R')分别控制三个方法的调用: 2,WGDll.dll,要注入到game进程中的dll文件: 3,myconsole.exe,用来注入dll文件的程序: 先开启game进程,然后用myconsole把dll注入到game,dll模块和myconsole模块利用共享内存实现进程通信,在myconsole的控制台输入指令,dllmokuai接受指令,调用game模块的方法,达到控制game的目的 game模块 #includ

设计课题,中间件方案,ACE

网络程序复杂性 固有复杂性,由所在领域存在的主要难题造成 选择合适的通信机制,并设计良好的协议来有效使用这些机制 有效使用并发机制,使系统获得可预计的,可靠的高性能 设计合理网络服务,以有效利用现有计算资源,并降低将来的维护成本 管理和配置服务,以获得最大程度的系统可用性和灵活性 偶发复杂性,源自开发网络应用软件时使用的工具和技术 缺乏类型安全,可移植,可扩充的原始os api 算法分解的广泛使用,无谓地造成网络应用程序在维护和扩充的困难 网络应用中,核心概念和功能的不断发现和创造,造成软件生命

设计原则二:空间和图底关系

设计原则系列文章的第二篇,主要讲留白空间和图底关系.这两个原则都来源于格式塔理论,可见格式塔的重要性.分享知识,是我们一直坚持的理念并会一直坚持下去. 设计原则二:空间和图底关系 如果你见过平面设计在画布上绘制图形的过程,那么你紧紧是见到你工作的一部分内容.画布上的负空间和我们在画布上绘制元素的正形空间同样重要. 设计就是处理形状和空间两者之间关系.为了更有效的利用空间,首先你必须意识到它,并且学会看它.就是学会如何看空间中的图形,空间的形式和空间与空间之间是如何交流的.这是初学者要学习和了解的

ACE网络编程

ACE: Adaptive Communication Environment 自适应通信环境,属于主机基础设施中间件SAP:服务点访问ACE模拟提供了所以C++标准库的类下载地址:http://ace.ece.uci.edu/ 或 http://www.riverace.com1.网络通信的设计空间:1).通信空间:交互规则.形式2).并发空间:并发控制.同步3).服务空间:持续时间.结构4).配置空间:网络服务识别.绑定 2.面向对象中间件体系结构的层次1).主机基础设施中间件:对OS并发机