摘要

  • RFC 1431 没把“找到目标”当作完整胜利:它还要求记录返回了多少无关条目,以及底层目录操作付出了多少成本。
  • SearchStones 为 Bind、Read、List 和 Search 设置权重,让隐藏工作可见;但权重本身带着 Quipu 复制方式、树形结构和 DSA 实现的环境印记。
  • 实际采用量、是否经过开发者或供应商之外的评估、评估是否公开,都是问卷中的独立证据,不能由一次查询的分数推导出来。

一张正确名片之后

设想一位用户在 1993 年的 X.500 目录客户端里输入若干并不完整的线索。几秒后,Paul Barker 的条目出现在屏幕上。对于用户,动作似乎结束了;对于评估者,真正的问题刚开始。

这次查询只返回他一人,还是把他埋在几十个同名者之中?客户端发出一次直接读取,还是在目录树里反复绑定、列举和搜索?如果入口 DSA、复制关系或数据所在分支改变,同样的输入还会走同一条路吗?界面只展示答案,并不会自动展示这些因果条件。

RFC 1431 的标题是“DUA Metrics”。DUA 指 Directory User Agent,文中也把讨论扩展到目录用户界面。它主要关注白页式的人物查找,并预先假定底层协议机制正确。也就是说,这不是重新检验全部 X.500 规则,而是研究人如何通过工具接触目录,以及工具把多少系统工作隐藏在一次交互里。

文档一开始就拒绝无条件排名。不同界面可能面对不同用户和任务。命令行工具、图形客户端以及经简化协议接入的程序,未必作出同一种承诺。“更好”必须补全宾语:对谁更好,在什么数据上,用来完成哪种查找,从哪里开始?

命中、噪声与工作量

RFC 1431 把查询解析结果分成三层。第一,是否找到目标条目。第二,一并找到了多少其他条目。第三,为此执行了哪些底层目录操作、成本是多少。

第一层是用户最容易看见的成功。第二层衡量选择性:返回目标加五十个候选者,与只返回目标并不是同一种能力。第三层追问分布式系统的劳动:看似相同的一张名片,可能来自完全不同的查询轨迹。

文档把加权单位称作 SearchStone。一次 Bind 算 5,一次 Read 算 1,一次 List 算 2,单层 Search 算 3,整棵子树 Search 算 5。于是,一串原本藏在界面背后的操作可以汇总为一个数。

即使查询失败,SearchStone 总数也应显示。失败没有抹掉已经消耗的目录工作。保存这项证据,才能区分“用少量、可解释的尝试及时停止”和“昂贵地遍历后仍一无所获”。

砝码并非来自自然

SearchStone 的价值在于把权重写出来,而不是让人相信权重无需解释。RFC 1431 特别指出,单层搜索之所以得到相应权重,部分原因是 Quipu 实现普遍采用同级复制。一个具体部署习惯进入了计量单位。

因此,SearchStone 不是秒数,也不是价格,更不是用户满意度。较低分数通常与较快响应相关,却并不始终如此。它表达的是按某套规则加权后的操作组合,不包含影响耗时和体验的全部因素。

这种坦白使指标更可靠,而非更软弱。指标由人设计,就应保留选择的痕迹。把权重公开,后来者可以争论、调整或拒绝;把权重伪装成自然常数,只会把一个环境的偶然性藏进看似客观的总分。

十条路都通向同一个人

RFC 1431 给出十个测试查询,由直接到困难,但目标始终是作者本人的条目。测试还建议直接连接目标 DSA:cn=Vicuna,c=GB。

这样设计有明确好处。目标已知,便能判断返回是否正确;围绕同一身份改变线索,可以观察界面如何处理含糊和缺失;固定连接点,可以减少不同运行之间的一项变量。

然而,控制变量同时圈定了外推边界。一个人的姓名不能代表所有姓名、文字、组织和目录位置。直接连接目标服务器,不等于所有用户都从那里出发。十个查询是试针,不是总体样本。

当分数离开报告进入排行榜,最容易丢失的恰恰是这些条件。数字很短,因而看起来容易搬运;但它的含义仍携带测试对象、查询表达、过滤器、起点、目标 DSA、数据分布和复制状态。排版上的可移动,不是因果上的可移植。

尺子下面的地面在移动

RFC 1431 列出的限制并非礼貌性免责声明。Directory Information Tree 的深度并不均匀;不同 DSA 实现有不同性能特征,而且实现组合会变化;不同域采用不同复制策略,对性能可能产生深刻影响;过滤器复杂度和布尔组合也没有被权重覆盖。

这些因素分别改变不同环节。树深改变导航距离。实现决定同名操作内部要做多少事。复制决定数据离入口远近。过滤表达式改变计算,却未必改变操作类型标签。网络时延又在操作计数之外叠加。

所以,相同 SearchStone 总数可能对应不同时间;分数更低者也可能更慢。为高复制目录优化的客户端,到另一种拓扑里可能失去优势。诚实的说法只能是:这个客户端在这些条件下生成了这条操作轨迹。

采用证据另列一栏

RFC 1431 没从查询分数猜测部署。问卷另行询问有多少组织把产品用于实际运行,也另行询问产品是否被开发者或供应商圈子之外的人评估,以及那份评估是否公开。

这种分栏切断了几条常见捷径。受控测试表现好,不等于有人采用;采用面广,不等于查询成本低;供应商自评再详尽,也不会自动获得独立性;外部评估若不能公开检验,其证据性质也与公开报告不同。

相邻的 RFC 1430 把这种区别放进更大的部署愿景。它设想全球 X.500 目录,近期关注白页、X.509 支持与试点,但也指出:把既有数据映射进一致框架,所需的运营劳动大于安装服务器或用户代理。部署不是软件启动的同义词,还包括组织如何整理、授权、维护和修正数据。

RFC 1202 与 RFC 1249 展示了文本式 Directory Assistance Service 和 DIXIE 等不同接入路径;RFC 1274 提供试点使用的模式背景。DUA 只是一个生态的可见边缘,背后还有访问协议、数据模型、DSA、复制与机构劳动。

不让证据跨级跳跃

完整链条从选择测试身份开始。评估者写下查询,客户端从指定连接点出发,界面构造过滤器,DSA 与副本执行操作。目标被找到或遗漏,额外结果被纳入或排除,操作被计数并加权,时间被观察。随后人才会判断界面是否有用,组织才会决定是否采用,外部评估才可能发生并公开。

每一级都是真实证据,却不能替代下一级。找到 Paul Barker,只能证明这次测试返回了 Paul Barker;它不证明结果干净、成本低、速度快、适合另一类用户、已经部署或得到独立验证。

RFC 1431 的历史意义,正在于它同时完成了两件看似相反的事:造出一个便于讨论的单位,又把这个单位的接缝留在外面。权重有来历,测试对象有名字,服务器有位置,未测维度有后果。

有限指标不是失败的指标。只要查询、连接点、原始轨迹、权重、失败状态和拓扑与总数一同保存,它就能支持局部比较和故障诊断。若只留下总数,一个特定目录就会被误写成世界规律。

RFC 1431 没有讨论安全问题,没有宣布产品优胜者,也没有给出 X.500 后续成败的统计。它留下的是更窄也更坚固的认识:计数能迫使系统说明自己做了什么,但计数者也必须说明自己决定了什么。

来源