本篇文章主要介绍

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

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

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

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系统提供了横跨进程和网络节点的协调更新机制,这一通信模型通常在其较低的层面中采用消息传递机制来协调数据的交换及同步数据的读取和写入者。

本节完毕!!!!

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

  1. Modbus RTU 通信工具设计(转)

    Modbus RTU 通信工具设计 Modbus 是一个工业上常用的通讯协议.一种通讯约定. ModBus 协议是应用层报文传输协议(OSI 模型第7层),它定义了一个与通信层无关的协议数据单元(PD ...

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

    前面讲过:移动端与PHP服务端接口通信流程设计(基础版) 对于 api_token 的校验,其安全性还可再增强: 增强地方一: 再增加2张表,一个接口表,一个授权表,设计参考如下: 接口表 字段名 字 ...

  3. 移动端与PHP服务端接口通信流程设计(基础版)

    针对 --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效: 2.因为是非开放性的,所以OAuth那套协议是行 ...

  4. 012 基于FPGA的网口通信实例设计【转载】

    一.网口通信设计分类 通过上面其他章节的介绍,网口千兆通信,可以使用TCP或者UDP协议,可以外挂PHY片或者不挂PHY片,总结下来就有下面几种方式完成通信: 图8‑17基于FPGA的网口通信实例设计 ...

  5. ACE框架 同步原语设计

    ACE框架常用的同步机制设计成统一的原语接口.同步原语使用系统平台(操作系统,多线程库)提供的同步原语,并为系统平台不提供的同步原语提供模拟实现.ACE框架使用了外观模式和适配器分两层,将同步原语统一 ...

  6. 移动端与PHP服务端接口通信流程设计(基础版)

    转载自:http://blog.snsgou.com/post-766.html --->非开放性平台 --->公司内部产品 接口特点汇总: 1.因为是非开放性的,所以所有的接口都是封闭的 ...

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

    增强地方一: 再增加2张表,一个接口表,一个授权表,设计参考如下: 接口表 字段名 字段类型 注释 api_id int 接口ID api_name varchar(120) 接口名,以"/ ...

  8. distri.lua线程间通信的设计

    首先简单介绍下distri.lua中的线程设计方案. distri.lua提供一个API函数fork用于创建新的C线程,这个C线程运行独立的lua虚拟机,为了在各线程之间通信 每个线程都会创建一个ch ...

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

    三个模块 1,game.exe,三个方法,控制台输入指令('A','B','R')分别控制三个方法的调用: 2,WGDll.dll,要注入到game进程中的dll文件: 3,myconsole.exe ...

随机推荐

  1. 求逆序对[树状数组] jdoj

    求逆序对 题目大意:给你一个序列,求逆序对个数. 注释:n<=$10^5$. 此题显然可以跑暴力.想枚举1到n,再求在i的后缀中有多少比i小的,统计答案即可.这显然是$n^2$的.这...显然过 ...

  2. 韩天峰博客 php基础知识学习记录

    http://rango.swoole.com 写好PHP代码真的不容易,给大家几个建议: 慎用全局变量,全局变量不好管理的,会导致你的代码依赖于全局变量,而耦合度太高. 一定不要复制粘贴代码,可重用 ...

  3. web api 安全设计(1)

    环境:后台 ASP.NET Web API ,前端为 html,js(跨域访问) 场景1: 客户端自保管RSA 公钥和密钥,签名为客户端私钥签名,服务端用客户端公钥进行签名验证 场景2: 客户端使用S ...

  4. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  5. Beta冲刺NO.6

    Beta冲刺 第六天 1. 昨天的困难 1.对于设计模式的应用不熟悉,所以在应用上出现了很大的困难. 2.SSH中数据库的管理是用HQL语句实现的,所以在多表查询时出现了很大的问题. 3.页面结构太凌 ...

  6. 201421123042 《Java程序设计》第4周学习总结

    1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 继承中的关键词:Soper,object,override,project, 1.2 尝试使用思维导图将这些关键词组织起来.注: ...

  7. 洛谷 U10783 名字被和谐了

    https://www.luogu.org/problem/show?pid=U10783 题目背景 众所周知,我们称g是a的约数,当且仅当g是正数且a mod g = 0. 众所周知,若g既是a的约 ...

  8. asp.net web api 控制器

    1控制器操作的参数 控制器操作的参数可以是内置类型也可以是自定义类型,无参也是允许的. 2控制器操作返回值 类型 说明 void 操作返回值为void时,Web API返回空HTTP响应,其状态码为2 ...

  9. EasyUI 中easyui-textbox和easyui-searchbox文本框的点击事件。

    html: <input id="txtsearch" class="easyui-textbox" data-options="buttonT ...

  10. Python设计TFTP客户端

    #coding=utf-8 from socket import * from threading import Thread import struct def recvData(fileName, ...