网工干货知识

超全学习笔记
当前位置:首页 > 干货知识

分布式系统中的打包处理

更新时间:2026年03月27日   作者:spoto   标签(Tag):

分布式系统由分布在不同机器上的多个组件组成。这些组件之间进行通信与协作,从而让最终用户感受到整个系统就像是一个单一的实体一样。

外部数据表示:

数据结构被用来表示在运行中的应用程序中存储的信息。这些信息由一系列字节组成,这些字节会在分布式系统中的各个组件之间传递。因此,在数据传输之前,需要将数据结构转换为字节序列。而当消息到达时,数据也应该能够重新转换回其原始的数据结构。

在计算机中,有多种不同类型的数据需要被处理。而这些数据的处理方式在不同的位置则有所不同。 各个原始数据项可以拥有多种不同的数值,而且并非所有计算机都以相同的顺序来存储整数这样的原始数值。 不同的架构也会以不同的方式来表示浮点数字。 整数可以以两种方式进行排序:大端序,即最高有效位位于最前面;小端序,即最高有效位位于最后面,或者最低有效位位于最前面。 此外,还有一个问题,那就是用来表示字符的编码集。 在UNIX系统中,大多数应用程序都使用ASCII字符编码方式,即每个字符占用一个字节。而Unicode标准则采用每个字符两个字节的编码方式,从而能够表示多种不同语言的文本。

应该有一种方法,可以将所有这些数据转换为标准格式,这样就能在计算机之间顺利地传输了。 如果这两台计算机属于同一类型,那么可以跳过外部格式转换的步骤。否则,在传输之前,需要将数值转换为统一的外部格式。之后,在接收端时,再将这些数值转换为本地格式。 为此,数据会以发送方所采用的格式进行传输,同时还会附带该格式的说明。如果必要的话,接收方会将其进行转换处理。 不过,值得注意的是,数据在传输过程中始终不会发生变化。 任何可以作为参数传递或作为结果返回的数据类型,都必须能够被转换,并且其各个基本数据值必须以被认可的格式来表示,这样才能支持远程过程调用(RPC)或远程方法调用(RMI)机制。 所以,外部因素……数据表示这是一种用于表示数据结构以及被共同认可的原始值的标准。

  • 打包/整理:“Marshalling”指的是将一系列数据结构进行转换和格式化,使其成为适合通过消息传输的外部数据格式的过程。
  • 解包/展开:这个过程的反向操作就是“解包”,它涉及到在数据到达目的地后,重新对数据进行格式化处理,从而恢复原始的数据结构。

方法/途径:

在计算机之间传递各种类型的数据时,有三种有效的沟通方式。

常见的对象请求代理架构(CORBA):

CORBA是由对象管理组织(OMG)定义的一种规范。目前,CORBA是最广泛应用于大多数分布式系统中的中间件技术。 它使得具有不同架构、操作系统、编程语言以及计算机硬件的系统能够协同工作。 它使得软件应用程序及其各个对象能够相互之间进行通信。 这是一种用于创建和使用分布式对象的规范。 它由五个主要组成部分构成。 各组件及其功能如下所示:

  • 对象请求代理(Object Request Broker, ORB):它为各个对象之间在网络上的通信提供了基础设施。
  • 接口定义语言(Interface Definition Language, IDL):这是一种规范语言,用于为软件组件提供接口。例如,它使得用C++和Java编写的软件组件能够相互通信。
  • 动态调用接口(Dynamic Invocation Interface,DII):通过使用DII,客户端应用程序可以在编译时无需知道服务器对象的类型,就可以使用这些对象。此时,客户端可以获取CORBA对象的实例,然后可以动态地调用该对象上的方法。
  • 接口存储库(IR):顾名思义,接口可以被添加到接口仓库中。IR的作用就是让客户端能够找到那些在编译时并不已知的对象,然后向ORB请求有关该对象的接口信息。
  • 对象适配器(OA):它用于访问ORB服务,比如对象引用生成等功能。
 

CORBA中的数据表示方式:

“通用数据表示法”(Common Data Representation,CDR)用于描述在CORBA分布式对象进行远程调用时作为参数或结果传递的结构化或原始数据类型。它使得客户端和服务器所使用的内置编程语言能够相互通信。例如,它可以实现从小端字节序到大端字节序的转换。

共有15种基本类型:short(16位)、long(32位)、unsigned short、unsigned long、float(32位)、double(64位)、char、boolean(TRUE、FALSE)、octet(8位),以及可以表示任何基本或构造类型的任意类型。此外,还有多种复合类型。

CORBA CDR构造类型:

让我们来看看这些类型及其表示方式:

  • 序列:它指的是长度字段(类型为 unsigned long),之后会按照一定的顺序列出其他元素。
  • 字符串:它指的是长度字段(类型为 unsigned long),后面跟着按顺序排列的字符(也可以包含宽字符)。
  • 数组:该数组中的元素遵循一定的顺序,且其长度也是固定的,因此无需特别说明。
  • 结构体:按照组件声明的顺序进行
  • 列举的/已列出的就是如此。在“unsigned long”中,数值的表示顺序与声明时的顺序一致。
  • 联盟/联合:类型标签,后接所选的成员

示例:

struct Person {
字符串名称;
字符串位置;
漫长的岁月;
};

Marshalling CORBA:

根据消息中需要传输的数据项的类别,Marshalling CORBA操作可以自动生成。CORBA IDL描述了数据结构的基本类型以及基本数据项,同时提供了用于指定RMI方法参数和结果类型的语言/符号系统。

2. Java中的对象序列化:

Java远程方法调用(RMI)它允许你将对象和原始数据值都作为参数或方法调用的输入。在Java中,所谓序列化,指的是将一个对象(即某个类的实例)或者一组相关的对象转换成适合存储到磁盘上或以消息形式发送的格式。

Java提供了一种称为“对象序列化”的机制。通过这种机制,一个对象可以被表示为一系列字节数据,这些数据包含了关于该对象的各种信息,包括对象的类型以及存储在对象中的数据类型。当被序列化的对象被写入文件后,就可以从文件中读取该对象,并将其重新反序列化为原始的对象形式。这样,你就可以在内存中重新创建一个具有相应类型信息的对象,而该对象则由代表其数据和类型的字节所构成。

 

此外,对象可以在一个平台上被序列化,而在完全不同的另一个平台上又被反序列化。因为整个过程都是独立于JVM的。

例如,与CORBA IDL中定义的Person结构相对应的Java类可能如下所示:

Java
进口java.io.*;公开的类别/等级 实施/执行可序列化{公共的字符串名称;公开的字符串地点/位置;公开的整数电话号码;公开的无效/无意义信件/邮件(){系统/体系.外出/离开.println(发出一封信给“+名字+“”+地点/位置);}}

3. 可扩展标记语言(XML):

客户通过XML与Web服务进行通信。XML也被用来定义Web服务的各种接口和其他相关特性。不过,XML被广泛应用于各种领域,比如归档和检索系统。虽然XML格式的归档文件比二进制格式的文件要大,但它的优点在于可以在任何设备上读取。其他常见的XML应用还包括用户界面设计以及操作系统配置文件的编码处理。

与HTML不同,XML具有可扩展性,因为用户可以自行定义自己的标签。如果某个XML文档需要被多个应用程序使用,那么这些标签的名称就必须保持唯一性。

例如,客户通常是通过SOAP消息与Web服务器进行交互的。 SOAP是一种XML标准,它包含了一些标签,这些标签可以被Web服务及其客户所使用。 因为,预期中,客户端和服务器在共享消息时,已经知道了该消息的顺序以及其中包含的信息类型。因此,某些外部数据表示方式(例如CORBA CDR)并不需要具有自描述性。 另一方面,XML的设计初衷就是让各种应用程序能够基于不同的需求来使用它。 这一目标的实现,得益于标签的引入以及命名空间的运用,这些手段有助于明确各个标签的含义。 此外,使用标签还可以让应用程序只处理文档中需要处理的那些部分内容。

例如:

Person结构的XML定义:
<person id="9865">
<name>约翰</name>
<地点>英格兰</地点>
<年份>1876年</年份>
<!-- 评论 -->
</person>

使用方式:

序列化技术被用来创建各种远程过程调用(RPC)协议。在这种情况之下,不同的进程和线程往往拥有各自独立的 데이터格式,因此需要在这些进程和线程之间实现数据的序列化处理。

为了在COM对象之间传输数据,Microsoft的组件对象模型(COM)接口使用了一种名为“marshalling”的技术。当基于通用语言运行时的类型需要通过marshalling来与其他非托管类型进行交互时,同样的情况也会发生在.NET框架中。DCOM指的是分布式组件对象模型。

基于跨平台组件对象模型(XPCOM)技术的脚本和应用程序,是另一个需要严格进行数据打包处理的例子。Mozilla应用框架大量使用了XPCOM技术,而XPCOM本身也充分运用了数据打包功能。

因此,XML(可扩展标记语言)是一种基于文本的数据表示格式。它的设计目的是用来表示在Web服务中,客户端和服务器之间交换的数据。

在前两种方法中,基本数据类型会被转换为二进制形式——即CORBA和Java的对象序列化方式。而在第三种方法中,基本数据类型则以文本形式来表示(即XML格式)。通常情况下,数据值的文本表示形式会比其二进制表示形式更长。HTTP协议也是采用文本表示方式的例子之一。

另一方面,类型信息既包含在Java的序列化过程中,也包含在XML中,不过两者实现的方式有所不同。虽然Java会序列化所有与类型相关的信息,但XML文档则可以引用命名空间——这些命名空间实际上是由外部指定的、包含特定类型的名称的集合。

              马上抢免费试听资格
意向课程:*必选
姓名:*必填
联系方式:*必填
QQ:
思博SPOTO在线咨询

相关资讯

即刻预约

免费试听-咨询课程-获取免费资料