LDM:一种基于远程过程调用的传输机制
2013-08-20卞晓丰
卞晓丰
(国家气象信息中心 北京 100081)
0 前言
日常的信息系统应用背后,实际就是数据的生产、传递和使用的过程,数据已经成为系统建设的重要组成部分和信息化过程中的重要资源。全局范围来看,应用系统不再只是关注内部数据,而是开始着眼于部门之间的大量数据交换和共享。现实情况是部门间信息系统相互独立,体系结构、生产厂商、架构设计等都可能存在着差异,而且难以统一。各信息系统上不同计算模型导致各自的数据和文件也存在着差异,这给数据交换和共享带来了很大的困难。
为了保证数据安全准确的到达,最简单的方式是搭建专线进行点对点的数据传输。但是,当多个系统之间要进行数据交换,如果任意两个系统之间都是点对点的数据传输话,虽然简单方便,但成本和效率都难以得到保证。同时,在面对异常庞大的数据资源时,随着数据规模的不断扩大,特别是大规模小文件的数据应用,对数据传输的要求有是相当高的。传统的数据传输和管理方法已接近其能力极限,甚至已经不能满足需求。因此,迫切需要引进先进的技术和方法,将数据传输需要从简单静态管理向智能动态管理转变。采用LDM(Local Data Manager)[1]进行数据传输,通过一系列的配置项设定,可以解决复杂情况下的数据采集、获取、管理及分发等方面的问题,从而较好地实现系统之间的数据传输。
1 LDM架构
本质上,LDM是一种点对点的传输软件。产品队列是LDM的核心,服务进程是每个LDM部署的总体控制和调度的核心。当与其他LDM部署之间进行通信时,通过LDM的事件触发机制来控制本地文件的传输和存储的操作。底层的远程过程调用机制决定了各LDM部署之间是一种服务器/客户端结构。不同的是,LDM既可以是服务器端,也可以同时是客户端。数据发送和接收的功能分别通过服务进程的子进程实现(图1)。一般来说,数据发送进程将数据从产品队列中读出,然后将数据或者元数据传给下游系统。
2 LDM的产品队列
产品队列是LDM的核心,以文件形式存在,用于传输数据缓存的特殊存储。从上游接收到的数据、推送和处理的数据、发往下游的数据都将在这暂时存放。在进入传输通道之前,数据会被LDM包装成为数据产品插入产品队列。数据产品增加了数据的产品标识符、数据的来源类型、用于MD5校验的16位数字签名、数据的进入产品队列时间戳等附加信息。其中,对于数据产品的管理而言,最重要的信息就是数据进入产品队列的时间戳,当空间不足时,时间戳最久的数据就会被删除。数字签名用于保证数据的安全性和唯一性,产品队列会记录下所管理的数据产品的16位数字签名,当数据进入产品队列的时候,它的数字签名将会与已在队列中的数据产品的签名比对。如果相同,数据就被抛弃;否则,就插入到产品队列中。
图1 LDM服务器组成结构
为了实现数据产品的存储,产品队列被划分成若干块来使用,共分为三种:在用、空闲、未用。一个稳定的产品队列中有大量的在用块,少量的空闲块,而未用块的数量可多可少。为新的数据产品分配空间时,如果空闲块中有大小合适的,将多余的空间切割掉后使用;否则,释放时间戳最久的数据产品,直到有合适大小的块为止。空闲块重新进入分配列表时,总是看是否可以和邻近的区域合并。这种管理机制包含了申请、分配和回收,使产品队列能够被高效地使用。
为了方便块的管理,其组织结构采用是一种叫做跳表[2]的数据结构。跳表是一种基于概率的平衡树的替代实现方法,无论数据以什么顺序输入,即使是完全递增,它也可以保持很高的查找效率而不需要任何重构,而且跳表的实现也比平衡二叉树简单。
3 LDM的事件驱动传输机制
远程过程调用是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。远程过程调用假定某传输协议(如TCP,UDP)存在,通信程序之间使用该传输协议交换信息数据。远程过程调用使得网络分布式程序的开发更加容易,LDM的通信方式就是以此为基础,实现了系统之间的控制信息的传递。
一个远程过程是有三个要素来唯一确定的:程序号、版本号和过程号。程序号是用来区别一组相关的并且具有唯一过程号的远程过程。一个程序可以有一个或几个不同的版本,而每个版本的程序都包含一系列能被远程调用的过程,通过版本的引入,使得不同版本下的远程过程调用能同时提供服务。每个版本都包含有许多可供远程调用的过程,每个过程则有其唯一标示的过程号。LDM的程序号为300029,使用388端口。
LDM中定义的常用的远程过程调用消息有:
(1)FEEDME:下游LDM向上游LDM请求数据产品时发送,消息中包含最大HEREIS大小的信息。
(2)NOTIFYME:下游LDM向上游LDM请求数据产品元数据时发送 。
(3)NOTIFICATION:上游LDM回应NOTIFYME消息,向下游LDM发送数据产品元数据时用。
(4)HEREIS:上游LDM回应FEEDME消息,向下游LDM发送数据产品时用。
(5)COMINGSOON:由上游LDM向它的下游LDM发送。当数据产品大小大于最大HEREIS大小时,询问下游LDM是否接收相应的数据,如果是,则发出后续的BLKDATA消息 。
(6)BLKDATA:由上游LDM向下游LDM发送,传送之前元数据已经包含COMINGSOON消息中的数据产品。
(7)HIYA:由上游LDM向下游LDM发送。指定数据产品选择规范。
(8)IS_ALIVE:由下游LDM向上游LDM发送。下游LDM在60秒未接收到任何消息时发送,确认上游LDM是否还存活。
当数据进入LDM之后,并不是直接发往接收方,而是通过一系列的远程过程调用控制信息的交换,根据数据的来源类型判断数据的流向。这增加了安全性,减少了传输过程中的数据管理,高效地实现了数据产品的传送。另外,和传统的FTP传输方式不同,LDM之间的连接不采用用户名和密码方式。通常是由下游发起申请,得到上游LDM的同意之后,两者之间才能够进行数据传输。除此之外,无需繁琐的人工操作,通过一系列的配置项,LDM就能够对数据种类、数据的发送和接收进行细粒度的定制。
通过对上下游关系以及数据特征的配置,LDM不仅能够处理不同来源的数据,还可以让使用者根据自己的需求选择的接收的数据。通过锁机制来实现对产品队列的竞争访问,支持多个进程对同一个数据产品的读操作,LDM支持多数据流传输的基础正在于此。在跨越多个不同的系统或网络进行多点数据交换传输中, LDM可以通过配置实现一对多,或多点连续中继等数据分发。另外,LDM还支持集群方式部署,通过负载均衡避免数据接收超出单台服务器能力的情况的出现。
4 总结
随着数据的重要性不断提高,安全的数据交换和共享已经成为信息系统建设中不可忽视的内容。与FTP等传统的传输方式不同,LDM是一款可为应用定制的数据传输软件,经过多年发展已经比较成熟了。通过上下游之间的相互认证以及事件触发机制,LDM可以在复杂的网络环境下实现安全的数据传输;在跨越多个不同的系统或网络进行多点数据交换传输时,LDM可以通过不同的配置实现一对多,或多点连续中继等数据分发。LDM以并发多数据流的方式传输数据,尤其在交换大量小文件的情况下,为数据传输提供较高性能。通过数字签名校验,LDM不仅保证传输数据的安全,而且解决了数据正确性的问题。
[1] Unidata,Local Data Manager.[EB/OL]. http://www.unidata.ucar.edu/software/ldm/.
[2] Pugh W.Skip lists: a probabilistic alternative to balanced trees[J].Communications of the ACM, 1990, 33(6): 668-676.