胡 鹏 夏 扬 曲爱妍
(中国电子科技集团公司第二十八研究所 南京 210007)
一种针对LDAP客户端与服务器通信的改进方案*
胡 鹏 夏 扬 曲爱妍
(中国电子科技集团公司第二十八研究所 南京 210007)
论文提出了一种改进基于目录访问协议(LDAP)的客户端与服务器的交互方法的方案。客户端异步地向服务端发送若干操作请求;服务端处理多个操作请求后,向客户端发送各个操作请求对应的结果;客户端反复检测缓存,获取服务端发来的操作结果等信息。论文解决了检测接口因为频繁被调用,严重影响性能的问题,提高客户端的并发性能。
轻量级目标访问协议; 目录; 条目; 目录信息树; 异步
Class Number TP31
轻量级目录访问协议(Lightweight Directory Access Protocol,LDAP)是实现提供被称为目录服务的信息服务[1]。目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力[2~3]。目录一般不支持通用数据库针对大量的更新操作,这些操作需要复杂的事务管理或回卷策略[4]。而目录服务的更新则一般都非常简单。这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。为了访问存储在目录中的信息,就需要使用运行在TCP/IP之上的访问协议LDAP[5~6]。
LDAP的信息是以树型结构存储的,在树根一般定义国家(c=CN)或域名(dc=com),在其下则往往定义一个或多个组织(organization)(o=Acme)或组织单元(organizational units) (ou=People)。一个组织单元可能包含诸如所有雇员、大楼内的所有打印机等信息。此外,LDAP支持对条目能够和必须支持哪些属性进行控制,这是有一个特殊的称为对象类别(objectClass)的属性来实现的。该属性的值决定了该条目必须遵循的一些规则,其规定了该条目能够及至少应该包含哪些属性[7~8]。
通常情况下,客户端要对目录信息树存储和访问必须包含应用层和LDAP适配层,它们之间用LDAP API作为接口进行通信[9~10],如图1所示。
图1 LDAP客户端与服务器通信逻辑结构
客户端进行增删查改操作,同步或者异步调用标准接口。以下论述RFC1823对异步调用接口的定义。Ldap_add接口如下定义:
int ldap_add(LDAP *longd, char *dn, LDAPMod *attrs[]);
客户端调用上述函数,得到一个整型的返回值,下文称为操作标识号。由于客户端异步调用上述操作接口,所以客户端只有定时调用LDAP_ResCheck接口检查服务器端返回的结果,才能获取本次操作是否成功。LDAP_ResCheck接口定义如下:
int ldap_rescheck(
LDAP *longd,
int messageid,
int all,
struct timestru *timeout,
LDAPMsg **result
);
增加两个姓名“HUANG”和“HU”,如图2所示的流程。从图2所示的流程可以看到,LDAP_ResCheck被调用了两次。也就是说如果要增加N个字符串,则LDAP_ResCheck接口会被调用N次。对LDAP_ResCheck进行调用,都会经历一个短暂的时间,这个时间就是由struct timestru *timeout定义的。很明显,如果LDAP_ResCheck调用次数过多,势必严重影响性能。
图2 异步调用示例
因此,为了提高LDAP客户端的处理性能,本文提出一种交互方法,有效解决LDAP_ResCheck调用次数多而影响性能的问题。
如图3所示,LDAP客户端向服务器端添加一条数据的流程如下:
图3 改进后应用示例
1) LDAP客户端调用ldap_add接口,向服务器端发送增加数据的请求,本次请求以messageid=1标识;LDAP客户端此时尚不清楚增加数据项是否成功;
2) LDAP服务器端处理添加数据的请求后将处理结果发送给LDAP客户端,用messageid=1标识操作结果,该操作结果保存在LDAP客户端的缓冲区中,供客户端检测相应messageid的结果;
3) LDAP客户端定时调用ldap_rescheck接口,检测缓冲区是否存在服务器端发送来的对应messageid=1的响应;如果检测到,则根据操作结果进行后面的处理。
根据上述流程可以看到,倘若LDAP_ResCheck调用次数越多,很明显就会降低LDAP客户端的处理性能。因此,本文提出了一种LDAP客户端与服务器通信方式,旨在客户端与服务器建立可信链接后,对目录信息树中的数据项进行操作,主要通过修改LDAP_ResCheck接口来解决上述多次调用带来的性能瓶颈问题。
LDAP客户端与服务器通信流程如下:
1) 客户端随机向服务器发送多个操作请求;操作请求可以包括如下任一种:增加、删除、修改等;
2) 服务器收到操作请求后,处理若干个操作请求,随即向客户端发送各个操作请求对应的结果;
3) 客户端在缓冲区中寻找请求结果,确定服务器返回了哪些操作请求对应的请求结果。
需要说明的是,上述每个操作请求都具有唯一的标识号,而操作请求对应的请求结果也具有相同的标识号。客户端根据操作请求的标识号在缓冲区中寻找具有此标识号的请求结果。
客户端定时在缓冲区中查找操作结果,有以下两种情况:
一种是客户端在缓冲区中找到了所有的操作请求对应的请求结果时,客户端把所有请求结果发送到应用层;应用层根据操作请求标识号分析其对应请求结果。
另一种,当客户端查找缓冲区时发现并不是所有操作请求全部返回了操作结果,客户端将重复在缓冲区中寻找,直到检测到所有操作标识号都已返回结果;随后依次将所有请求结果发送给应用层;应用层根据操作请求的标识号查找其对应请求结果。
在客户端放置结果查询定时器(timer);当发现服务端并未发送所有操作的结果时,查看查询定时器,若是没有超时(timeout),那么客户端将不断查找缓冲区。在查询定时器timeout前服务器发送了所有操作的结果,客户端把所有操作结果发送到应用层;在查询定时器超时后服务端并未发送所有操作结果给客户端,那么客户端会向应用层发送操作失败的消息。
基于上述内容,具体实现过程如下:
客户端(client)通过异步执行的方式对目录信息树中的数据项做修改操作;保存所有执行记录的操作标识号messageid;
服务器端(server)收到客户端发来的操作请求,异步处理完毕后,把各个请求结果按它们的messageid发送到客户端;
客户端(client)通过LDAP_ResCheck接口,查找缓存中对应操作标识号messageid的结果是否存在;倘若所有操作结果均被返回,那么就会向应用层发送LDAP_ResCheck调用结果;否则客户端在超时前循环检测缓冲区,停止条件是定时器超时或者所有操作结果均已返回到客户端。
应用层检测结果缓冲区,用messageid区别各个操作请求的结果,做出相应后续处理。
下文给出了一个实现例子,参考图2和图3,应用背景是客户端向服务端发起增加两个字符串的操作,基于LDAP协议的应用系统进行以下处理:
1) 客户端向服务端异步发起增加数据项(增加“HUANG”)的操作请求,设定该操作请求的操作标识号为messageid=1;客户端此时并不清楚增加的数据项操作是否已经成功;
2) 客户端向服务端异步发起增加数据项(增加”HU”)的操作请求,设定该操作请求的操作标识号为messageid=2;同样,客户端此时并不清楚增加的数据项操作是否已经成功;
3) 服务器收到客户端发送的两个操作请求,进行并发处理,处理完之后将两个请求结果用它们的messageid(1,2)进行标识,以异步的方式发送给客户端;
4) 客户端调用LDAP_ResCheck,在其缓冲区中的messageid数组中查找对应操作的标识号;倘若所有的操作响应均已收到,客户端将标识号对应的结果发送给应用层;若并未收到所有操作标识号对应的响应内容,客户端将反复检测缓存,一直等到超时或者所有的操作结果都已返回。
如图4所示,该应用系统主要包含:
图4 应用系统组成
1) 操作发送组件,在客户端中,异步地向服务端发送操作请求;
2) 请求处理组件,在服务端,处理客户端发来的操作请求,处理完后发送操作请求的结果;
3) 缓存组件,在客户端中,缓存服务器发来的请求结果;
4) 检测组件,轮询缓存,当服务端发送完毕所有操作请求的结果,检测终止。
其中检测组件包括:
1) 数组,存储检测组件检测到的服务端发来的操作请求的结果;
2) 定时器一,控制检测缓存的时间;
3) 定时器二,检测组件在定时器一的周期内查找缓存,但若定时器二超时,停止轮询查找。
本文提出了一种基于目录访问协议(LDAP)客户端与服务端交互方法的改进方案,该系统包括:客户端,异步向服务端发送操作请求,把服务端发送来的操作请求对应的结果存储在缓存中;服务器端,接收客户端发来的操作请求,负责处理完毕后发送操作结果,各操作结果用各自操作标识号进行区别;客户端检测组件具体包括:操作结果检测组件,在缓存中检测操作请求的标识号(messageid)对应的操作结果,如果并非所有操作均返回结果,则在缓存中反复检查,直至超时返回超时错误信息。
[1] The Open Source LDAP SuiteOpen LDAP[Z/OL].(2009-11-12)[2010-09-12] http://www.OpenLDAP.org.
[2] Directory Mark. The LDAP Server Benchmarking Too1, Information is available on the World Wide Web at[Z/OL].(2003-05-11) [2010-09-21] http://WWW.Mind-craft.com/directory mark.
[3] 王源.LDAP认证实现与性能分析[J].电子科技,2010,23(12):76-78.
[4] 任军.基于LDAP的目录服务综述[J].计算机应用研究,2005(5):8-10.
[5] 涂德志.LDAP协议研究与LDAP服务器的设计与实现[D].成都:电子科技大学,2002.
[6] 王春耕,朱建涛.大规模机群系统中基于LDAP的用户管理[J].计算机工程与应用,2004,40(18):47-49.
[7] 任军.基于LDAP(轻量目录访问协议)的目录服务综述[J].计算机应用研究,2005(5):8-10.
[8] 张军,颜凯.轻量级目录访问协议分析[J].计算机应用,1999(10):45-49.
[9] 许鑫,苏新宁,陆炯.数字化校园身份认证系统的设计[J].现代图书情报技术,2005(4):51-57.
[10] 王倩宜,李润娥,李庭晏.统一用户管理和身份认证服务的设计与实现[J].实验技术与管理,2004,21(3):7-12.
参考文献著录规则
一.总要求
为了帮助向本刊投稿的作者按规范著录参考文献,现将常见类型文献的著录格式作如下要求。
本刊要求双语参考文献,所有的中文参考文献均需附英文译文,示例如下:
示例1:
[1] 焦李成,杜海峰,等.免疫优化计算、学习与识别[M].北京:科学出版社,2006. JIAO Licheng, DU Haifeng, et al Immune optimization calculation 、Learning and Recognition [M]. Beijing: Science Pres,2006.
[2] 李诗灵,陈宁,赵学彧.基于粒子群算法的城市轨道交通接运公交规划[J].武汉理工大学学报(交通工程与科学版)2010,34(4)780-783. LI Shiling, CHEN Ning, ZHAO Xueyu. Planning of Feder Bus to the Urban Rail Transit Based on Particle Swarm Optimization[J]. Journal of Wuhan University of Technology(Transportation Science & Enginering),2010,34(4):780-783.
参考文献中的责任者采用姓前名后的著录形式。欧美著者的名可缩写,姓大写,姓和缩写的名之间不可用“.”隔开,而是用空格。如用中译名,可以只著录其姓。如原文中作者为“P.S.昂温”则在本刊要求中应写成“昂温 P S”,Albert Einstein Seny应写成EINSTEIN A S。
参考文献的责任者之间用“,”分隔。不超过3个时,全部照录。超过3个时,只著录前3个责任者,其后加“,等”,外文用“,et al”,“et al”不必用斜体。
示例2:马克思,恩格斯.示例2:YELLAND R L, JONES S C, EASTON K S, et al.
二.图书和期刊的著录格式
◆ 普通图书(原著): [序号]著者.书名[M].版本(第1版不著录).出版地:出版者,出版年:引文页码. [3]余敏.出版集团研究[M].北京:中国书籍出版社,2001:179-193. [4]中国社会科学院语言研究所词典编辑室.现代汉语词典[M].修订本.北京:商务印书馆,1996:258-260. [5]CRAWFPRD GORMAN M. Future libries: dreams, madnes, &reality[M]. Chicago: America Library Asociation,1995.
◆ 普通图书(译著): [序号]著者.书名[M].译者,译.版本.出版地:出版者,出版年:引文页码. [6]AGRAWAL G P. 非线性光纤光学[M].胡国绛,黄超,译.天津:天津大学出版社,1992:179-193. [7]霍斯尼 R K. 谷物科学与工艺学原理[M].李庆龙,译.2版.北京:中国食品出版社,1989:15-20.
◆ 期刊(有卷) [序号]著者.题名[J].刊名,出版年份,卷(期)引文页码. [8]蒋超,张沛,张永军,等.基于SRLG不相关的共享通路保护算法[J].光通信技术,2007,31(7):4-6. [9]DIANOV E M, BUFETOV I A, BUBNOV M M, et al. Thre-cascaded 1407nm Raman laserbased on phosphorusdoped silica fiver[J]. OPTICS LETTERS,2000,26(6):402-404.
◆ 期刊(无卷) [序号]著者.题名[J].刊名,出版年份(期):引文页码. [10]周可,冯丹,王芳,等.网络磁盘阵列流水调度研究[J].计算机学报,2005(3):319-325. [11]VLATK V, MARTIN B P. Basic of quantum compwtation[J]. Proces in Quantum Electronics,1998(22):1-39.
三.电子文献的著录格式
◆ 电子文献: [序号]主要责任者.题名:其他题名信息[文献类型标志/文献载体标志].出版地:出版者,出版年(更新或修改日期)[引用日期].获取和访问路径. [12]Online Computer Library Center, Inc. History of OCLC[EB/OL].[2000-01-08].htp://www.oclc.org. [11]萧钰.出版业信息化迈入快车道[EB/OL].(2001-12-19)[2002-04-15].htp:∥www.creader.com/news/200112190019.htm.
四.学位论文与论文集的著录格式
◆ 学位论文: [序号]著者.题名[D].出版地:出版者,出版年:引文页码. [13]孙玉文.汉语变调构词研究[D].北京:北京大学文学院,2000.
◆ 论文集: [序号]著者.题名[C]//著者.专题名:其他题名.出版地:出版者,出版年:引文页码. [14]白书龙.植物开花研究[C]//李承森.植物科学进展.北京:高等教育出版社,1998:146-163. [15]AZIEM M M A, ISMAIEL H M. Quantitative and qualitative Evaluations of Image Enhancement Techniques[C]//Procedings of the 46th IEEE International Midwest Symposium on Circuits and Systems,2003:664-669.
An Advanced Method of Communication Method between Client and Server Based on Directory Access Protocol
HU Peng XIA Yang QU Aiyan
(The 28th Research Institute of China Electronics Technology Group Corporation, Nanjing 210007)
This paper puts forword a kind of interactive method between client and server based on Lightweight Directory Access Protocol(LDAP). The client send request of multi-operation entry to the server successively, and the server processes request of multi-operation entry mentioned above in asynchronous way. At the same time,the server returns the result of request corresponding to the operation entry one by one. The client checks the buffer to judge the server whether return all the the result of request corresponding to the operation entry. This paper resolves that the LDAP_Result function is called by too many times in relevant technique, thereby advanced the LDAP client performance of processing entry.
LDAP, directory, entry, directory information tree, asynchronism
2014年7月11日,
2014年8月23日
胡鹏,男,助理工程师,研究方向:海量实时数据存储访问、数据库管理技术。
TP31
10.3969/j.issn1672-9730.2015.01.018