JXTA 开发手册(二)第三章 JXTA概念

第三章           JXTA概念

本章定义了JXTA术语和描述了JXTA的组成部分

 

节点

       节点是实现了一种或几种JXTA协议的网络设备。节点可以是传感器,蜂窝电话,PDAPC机甚至超级计算机。节点由节点ID唯一标识,独立并且异步的工作。

       节点可以拥有JXTA协议定义的一个或多个网络接口,并将这些接口广播(advertise)为节点端点(peer endpoitns),节点端点采用唯一的标志符标识,并作为实现节点与节点之间连接的实现手段。

       同时,节点之间也并不需要建立端到端的真正直接连接。一些满足条件的节点将充当中继节点,以便被NAT/FW或者其他网络设置阻隔的节点可以获得间接的直连路由。

       节点可以自发的连接到其他节点,维持节点之间暂时或者稳固的联系。这些节点将组成一个节点群。

 

 

节点组

       节点组是认可同一网络服务的节点的集合。节点自组织的形成节点群,并由唯一的群IDgroup ID)标识。每个组中的节点都可以通过开放的(任何节点都可以加入),高度安全的和受保护(经过有效而严格的认证)的方式建立自己与其他节点之间的关系。

       节点可以同时属于不同的节点组。缺省情况下,每个节点都被初始为网络节点组(Net Peer Group)的成员,每个节点都是网络节点组的成员。节点同时可以选择作为其他节点组的成员。JXTA协议节点是如何发布,发现,加入和与节点组进行交互的。但是并不规定何时为什么要创建节点组。

       在以下的几种情况下你可能需要创建节点组:

(1)       为了创建安全的通信环境

这种情况下,节点组形成了一个可以执行了特定安全策略的安全域。这种策略可以是简单的用户名——密码对,也可以是复杂的PKI系统。采用用户组来控制overlay的边界使得JXTA网络可以发布和传输受保护的内容,因为用户组外的用户不能访问组内的资源。

(2)       需要更好的管理范围

采用用户组允许创建特殊的本地域。举例来说:组策略可以集中节点进行文件共享策略和CPU共享协同计算。节点组可以将overlay划分为几个抽象的区域,只有区域之内的节点才能参与相应的服务。

(3)       需要对节点的行为进行监视

节点组允许节点为了特殊用途(例如:心跳信息,)监听其他节点的信号。节点组同时支持分级的双亲——孩子关系。在每个节点组中含有唯一的一个双亲节点,双亲节点复杂搜索请求和发布广播。

节点组提供的服务被称为节点组服务,JXTA定义了核心的节点组服务,进一步的节点组服务可以由这些核心服务的组合得到。但是,如果两个节点需要运行同一服务,他们必须位于同一节点组之内。

核心组服务包含如下内容:

·发现服务:发现服务用作组间节点搜索组内的资源,比如节点,节点组,管道和资源。

·组成员管理服务:用来现有的组内节点决定是否接受一个新的节点加入到现有的节点组。想要加如节点组的节点必须首先查找到组内的某一节点然后提交加入请求。同时,成员管理服务也支持节点投票决定是否在组内增加新的服务。

·访问服务:访问服务用来验证一个节点到另一个节点的请求。被请求的节点返回给请求节点相应的认证信息,如果正确则提供所请求的访问服务.[并不是所有的节点都要经过访问服务的验证,验证只是在需要的节点之间进行]

·管道服务:管道服务用来建立组内用户之间互相交换消息的管道。

·解答服务:解答服务用来向所有的节点传送一般的查询请求。节点之间可以通过解答服务来查询必要的一般通信信息(比如组内服务的状态,管道的端点等等)。

·监视服务:监视服务允许特定节点监视同组内其他节点的特定服务。

       以上所列举的服务并不要求所有的节点组都实现,节点组可以仅仅实现其需要的服务,缺省情况下只需要实现非临界的核心服务。

 

 

网络服务

       节点之间的协作和通信交互(诸如资源的发布,发现)都将调用网络服务,节点可以发布多种服务。节点之间的服务发现通过JXTA发现协议进行,但是同样需要网络服务。

       JXTA的网络服务可以分为两个层次:

       ·节点服务:节点服务就是节点所广播其所能提供的服务。如果提供服务的节点出现故障,那么这个服务也将故障。虽然一种服务可以在多个节点上面实现,但是每个节点都要对自己的服务进行广播。

       ·节点组服务:节点组服务是一组节点(之间存在着潜在的合作)之上运行的同一服务。如果节点组中的某一节点故障,将不会影响整个服务的运行。节点组服务的声明包含在节点组的广播之中。

       服务可以单独安装在节点之上,也可以采用网络的方式启动。为了成功的运行一种服务,节点必须能够找到适合运行的环境。整个下载,安装,运行服务的过程就像在检索web资源的时候安装插件一样简单。

 

模块

       JXTA模块是一切可以重用的实现某个具体功能的JXTA代码。网络服务就是最常用的这样的模块。抽象出来的模块可以有很多具体的形式:它可以是Java类,jar包,DLL,也可以是xml消息集,甚至可以是脚本。JXTA的模块实现由具体的实现者负责,比如:网络服务可以采用java平台,windows,等实现。

模块提供一个基本的抽象以便用户去描述一个新的用户行为。当一个节点加入到一个新的用户组的时候,它可能需要初始新的行为。举例来说:当加入某个节点组时,节点可能需要具备某一特殊搜索的功能,而这个功能仅在这个节点组中使用。使用模块化的架构使得节点可以继承和实现这个平台独立的行为,同时也允许用户采用和初始化这个行为的任何种类的实现实例(比如用户可以采用任何的C或者java实现)。

       能够描述和发布这些平台独立的同一行为的不同实现时异构的节点之间能够相互独立协作的本质。JXTA平台采用自我描述的方式注册这些模块。

 

模块的抽象包括模块类。模块的说明和模块实现:

 

·模块类: 模块类主要用来描述存在的模块。类的定义和希望实现的行为绑定,以支持模块化的结构。模块类采用唯一的ModuleClass标识。

·模块详细设计:其中包含了调用此模块需要的一切信息。例如:如果此模块是一个服务,模块详细设计中需要包含声明服务需要的管道的信息。

模块详细设计是提供模块类中定义的模块行为的一种途径。对于同一个模块类而言,可以拥有很多个详细设计,但是每一个详细设计都被唯一的ModuleSpecID.标识。在模块的详细设计中需要包含ModuleClass(或者基于ModuleClass生成ModuleSpecID.

模块详细设计保证了网络的兼容性。所有根据同一个模块详细设计的实现都采用相同的协议,所以虽然采用不同的语言开发,但是他们是兼容的。

·模块实现:模块实现是给定模块详细设计的具体实现。对于同一个模块的详细设计,可能有很多不同的实现,但是这些实现都包括了相同的ModuleSpecID以便和他们所实现的模块详细设计关联。

模块本身不仅可以用于节点组的服务提供,而且也可以用作单独的服务提供。可以通过抽象模块去识别已经存在的服务(通过其模块ID),本服务的详细设计ID(通过详细设计ID),或者服务的具体实现。所有的这些部分都将声明给其它的节点。

 

管道

       JXTA节点之间通过管道传递消息。管道是异步的单向的不可信赖(特殊的安全管道除外)的消息传输机制用做节点之间的通信和数据传输。管道传输的数据种类是广泛的,不加选择的。可以是二进制编码,数据字节流,甚至可以是java对象。

       管道的端点包含两种类型:一种是输入管道,另外一种是输出管道。在运行时,管道的一端被动态的绑定到另一端。管道协调节点之间的通信,比如ip地址和端口。

       JXTA主要包含两种类型的管道,端到端管道和广播管道。而JXTA核心还提供安全保证管道。

       ·端到断的管道

       端到端的管道连接到确定的两个节点,管道一端的输出管道连接到另一端的输入管道,同时也允许多个输出管道绑定到一个输入管道。

       ·广播管道:

       在广播管道的情况下,节点的输出管道可以绑定到多个输入管道,但是所有的广播管道都只能在节点组内部建立。所以,不论是输入方还是输出方都必须属于同一个节点组。

       ·安全保证管道

       允许节点之间采用安全的,可靠的方式通信。

 

       双向可靠的传输通道(JxtaSocket, and JxtaBiDiPipe

      

       由于管道提供的是单向的不可靠传输,我们需要一种机制保证双向的可靠的传输,JXTA平台提供了下面的方法以解决上述问题:

      

       ·可靠性代码库:

              ·实现了消息的序列化

              ·实现了分发

              ·实现了消息和流接口

       ·JxtaSocket, JxtaServerSocket提供了

              ·分别提供了java.net.Socketjava.net.ServerSocket的子类

              ·构建在管道,端消息和可靠代码库之上

              ·提供了双向的可靠的通信途径

              ·实现基于流的JXTA socket

              ·提供手段配置网络和消息缓冲区

              ·由于没有实现Nagels算法,所以在需要的时候需要对流进行flush操作

       ·JxtaBiDiPipe, and JxtaServerPipe

              ·构建在管道,端消息和可靠代码库之上

              ·提供了双向的可靠的通信途径

              ·提供基于消息的接口

              ·提供消息缓冲区

 

消息

       消息是节点之间相互传递的对象,是节点间交换信息的基本单位。消息通过Pipe Service

Endpoint Service发送和接受。典型的情况下,应用程序采用管道服务来创建,发送和收取消息。(一般的情况下,应用程序并不需要直接的Endpoint Service,除非程序本身需要了解和直接使用网络的拓扑信息)

       消息是序列化的内容的消息对,这些内容和消息对被叫做消息元素。所以消息本质上就是名字/值对,而内容本身可以是任意的形式。

       JXTA协议满足节点之间交换消息的各种属性。每种平台的绑定都描述了消息是如何转换为平台的私有结构的,比如一个java对象如何转换为一个C结构。

       消息本身有两种表示法:XML和二进制代码。J2SE的平台绑定采用二进制格式对消息的净荷进行封装。服务可以根据实际情况选择适当的封装方式。(需要紧密表示的服务可能需要采用二进制封装方式而其他方式则适合采用XML)。XML消息中包含的二进制数据采用Base64进行编码。

       采用XML方式对消息进行编码使得更多的节点可以加入到协议之中。由于数据加了标记,每个节点都可以选择最适合自己节点特性和角色的协议实现。如果节点只关系消息的一个子集,XML允许节点只实现他感兴趣的部分。例如,在节点资源紧缺,处理能力不高的时候,节点可以通过数据处理标记截取它可以处理的部分,忽略其他的部分。

 

 

 

通告      

       所有的JXTA网络资源,包括节点,节点组,管道和服务,都通过通告来描述。通告是由xml描述的语言独立的元数据结构。JXTA协议采用通告的方式描述和发布节点上存在的资源。节点通过搜索其他节点的通告来发现节点上的资源,每个节点都在本地维护着一个其他节点通告的列表,存储每个搜索到的资源通告。

       在通告发布时都伴随着一个通告的生存时间,标志着通告对应的资源的有效期。生存时间有助于检测没有检索和中心化管理的陈旧的资源。通告本身可以被重新发布(在通告失效之前),以便延长资源的有效期。

       JXTA协议定义了一下类型的通告:

       ·节点通告:描述节点信息。此类通告的基本用途是用来详细描述节点的所有信息。例如:节点名,节点ID,可用的端点还有特定的组服务需要的运行时属性(比如本组节点的集结节点信息)。

       ·节点组通告:包含节点组的详细信息,例如节点组名,节点组ID,描述,节点组详细设计和服务属性。

       ·管道通告:描述管道通信的渠道,节点服务通过管道通告来将输入输出管道关联在一起。每个管道通告含有一个可选择的ID,管道类型描述(端到端,多播,安全保证。。。)和一个唯一确定的管道ID

       ·模块类通告:描述一个模块类,他的主要功能是声明一个已经存在详细说明的兼容实现,包含模块名字,描述,和识别ID

       ·模块风格通告:定义一个模块的详细设计。提供详细的模块说明文档,目的是可以得到一致的模块详细设计的实现。其次,发布一个模块风格通告可以保障模块可以顺利的被远程调用。模块风格调用包括模块的名字,描述,ID,和在具体实现当中需要的任意属性。

       ·模块实现通告:定义了给定模块详细设计的具体实现。包括名字,联合ID,同时也包括代码,包(主要指java jar包)

       ·中心节点通告:通告中心节点的信息。

       ·节点信息通告:描述节点的实现信息,最基本的应用就是描述节点的即时状态,例如节点的运行时间,出入境流量等等。

       所有的通告均采用XML方式表示,有分级的元数据按照一定顺序排列而成。每个元素可以包含数据和其他属性,这些属性被描述成为名字——值对。一个属性用来存储元数据。

 

安全

       JXTA 支持不同级别的安全存储,JXTA节点支持按照角色划分的不同安全模式,某一特定的节点可以允许其他节点通过认证后支持其他节点的存储操作。

       五种基本的安全要素是必须的:

       ·机密性:保证通讯的内容不会被没有认证的节点探知

       ·鉴定:确定节点得到内容的就是他想要的内容

       ·认证:定是谁发布了这个消息。

       ·完整性:保证数据在传输过程中没有被修改。

       ·可驳倒性:保证现在接受的数据不是先前验证的节点发送的。

       XML格式的消息支持节点之间传输关于认证,PKI等认证元数据,以满足基本的安全需求,消息本身也可以被机密或者被签名,同时也可以采用证书来验证和证明数据的可靠性。

 

 

 

ID

       节点,节点组,管道和其他JXTA资源都需要被唯一识别,JXTA ID作为JXTA网络用来识别JXTA实体的唯一途径,JXTA ID 也是文档中需要详细描述的实体。目前,在JXTA网络中,有四种类型的JXTA节点需要JXTA ID:节点,节点组,管道,内容,模块类和模块详细设计。

       JXTA节点ID:

       urn:jxta:uuid-

59616261646162614A78746150325033F3BC76FF13C2414CBC0AB663666DA53903

       JXTA 管道ID

       urn:jxta:uuid-

59616261646162614E504720503250338E3E786229EA460DADC1A176B69B731504

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值