LabelManager 架构
简述
LabelManager是Linkis中对上层应用提供标签服务的功能模组,运用标签技术管理集群资源分配、服务节点选举、用户权限匹配以及网关路由转发;包含支持各种自定义Label标签的泛化解析处理工具,以及通用的标签匹配评分器。
整体架构示意
架构说明
- LabelBuilder: 承担着标签解析的工作,从输入的标签类型、关键字或者字符数值中解析得到具体的标签实体,有默认的泛化实现类也可做自定义扩展。
- LabelEntities: 指代标签实体集合,有且包含集群标签,配置标签,引擎标签,节点标签,路由标签,搜索标签等。
- NodeLabelService: 实例/节点与标签的关联服务接口类,定义对两者关联关系的增删改查以及根据标签匹配实例/节点的接口方法。
- UserLabelService: 声明用户与标签的关联操作。
- ResourceLabelService: 声明集群资源与标签的关联操作,涉及到对组合标签的资源管理,清理或设置标签关联的资源数值。
- NodeLabelScorer: 节点标签评分器,对应不同的标签匹配算法的实现,使用评分表示节点的标签匹配度。
一. LabelBuilder解析流程
以泛化标签解析类GenericLabelBuilder为例,阐明整体流程:
标签解析/构建的流程概括包含几步:
- 根据输入选择要构建解析的合适标签类。
- 根据标签类的定义信息,递归解析泛型结构,得到具体的标签值类型。
- 转化输入值对象到标签值类型,运用隐式转化或正反解析框架。
- 根据1-3的返回,实例化标签,并根据不同的标签类进行一些后置操作。
二. NodeLabelScorer打分流程
为了根据Linkis用户执行请求中附带的标签列表挑选合适的引擎节点,需要对符合的引擎列表做择优,量化为引擎节点的标签匹配度即评分。
在标签定义里,每个标签都有feature特征值,分别为CORE,SUITABLE,PRIORITIZED,OPTIONAL,每个特征值都有一个boost值,相当于权重和激励值, 同时有些特征例CORE和SUITABLE为必须唯一特征即在匹配过程中需做强过滤,且一个节点只能分别关联一个CORE/SUITABLE标签。
根据现有标签,节点,请求附带标签三者之间的关系,可以绘制出如下示意图:
自带的默认评分逻辑过程应大体包含以下几点步骤:
- 方法的输入应该为两组网络关系列表,分别是
Label -> Node
和Node -> Label
, 其中Node -> Label
关系里的Node节点必须具有请求里涉及到所有CORE以及SUITABLE特征的标签,这些节点也称为备选节点。 - 第一步遍历计算
Node -> Label
关系列表,遍历每个节点关联的标签Label,这一步先给标签打分,如果标签不是请求中附带的标签,打分为0, 否则打分为: (基本分/该标签对应特征值在请求中的出现次数) * 对应特征值的激励值,其中基本分默认为1,节点的初始分为相关联的标签打分的总和;其中因为CORE/SUITABLE类型标签为必须唯一标签,出现次数恒定为1。 - 得到节点的初始分后,第二步遍历计算
Label -> Node
关系,由于第一步中忽略了非请求附带标签对评分的作用,但无关标签比重确实会对评分造成影响,对应这类的标签统一打上UNKNOWN的特征,同样该特征也有相对应的激励值; 我们设定无关标签关联的备选节点占总关联节点的比重越高,对评分的影响越显著,以此可以对第一步得出的节点初始分做进一步累加。 - 对得到的备选节点的分数做标准差归一化,并排序。