知识卡片
可插拔加权评分体系:实现排序策略的开闭扩展
内容
HttpDNS客户端要在多个候选服务器IP之间挑出最优记录返回给业务方,这个排序逻辑没有被写成一段固定的打分代码,而是拆成5个各自独立的评估插件(速度插件、优先级插件、历史成功次数插件、历史错误次数插件、最近一次成功时间插件),每个插件只负责从自己的维度给出一个分值,各插件的分值权重可以单独配置,最终排序结果是这些插件加权计算后的综合结果;系统还统一约定了插件必须实现的接口协议,使用者可以在不改动核心排序框架代码的前提下自行添加新的评估维度,也可以直接在配置文件里关闭整个智能评估模块(关闭后退化为多个候选记录随机排序)。这是一种典型的”策略可插拔”架构设计:把”评估一个候选项好坏”这件事,从一段写死的判断逻辑,转变成一组遵循统一接口、各自独立、可配置权重的评估单元集合,新增一种评估维度只需要新增一个符合接口的插件,而不需要改动排序框架本身,这类设计对任何需要”从多个维度综合评估、并且评估维度会持续增长或调整”的排序/决策场景都有参考价值。
参考来源
- 位置:《高可用架构(第1卷)》第7章《安全与网络》"7.2 App域名劫持之DNS高可用——开源版HttpDNS方案详解"节,"7.2.4 开发过程中的一些问题及应对","11.评估模块有什么功能?"及"16.评估插件就这5个吗?"(源文件:_epub-src/OEBPS/Text/Chapter7_2_5.xhtml)
- 结论依据:原文说明"评估模块目前由5个插件组成,速度插件、推荐优先级插件、历史成功次数插件、历史错误数插件、最近一次成功时间插件。每一个A记录服务器IP,都会经过这5个插件进行评估排序后返回给使用者。所有插件评估分值比重可以配置……这5个插件属于抛砖引玉,自定义插件只需要实现IPlugIn接口即可",直接支撑本卡片结论。
- 原始内容:评估模块目前由5个插件组成,速度插件、推荐优先级插件、历史成功次数插件、历史错误数插件、最近一次成功时间插件。每一个A记录服务器IP,都会经过这5个插件进行评估排序后返回给使用者。所有插件评估分值比重可以配置。