一种基于词向量模型的微服务接口划分评价方法转让专利
申请号 : CN202111316694.6
文献号 : CN113760778B
文献日 : 2022-02-08
发明人 : 李莹 , 夏轩轩 , 张凌飞 , 朱晓莉 , 方燕翎 , 毛义华
申请人 : 浙江大学滨海产业技术研究院 , 天津众颐科技有限责任公司
摘要 :
权利要求 :
1.一种基于词向量模型的微服务接口划分评价方法,其特征在于,包括以下步骤:S1、数据收集,具体步骤如下:
S11、服务端构建微服务集群;
S12、收集还原各微服务应用之间分布式链路调用过程并形成图状调用链;
S2、设置词向量模型,输入接口字符串数组,获得接口名称的词向量,具体步骤如下:S21、通过深度优先搜索方法DFS拆分图状调用链为m个线性调用子链,按照调用顺序提取接口名称,组成接口字符串数组,获得人为的微服务接口划分集合Ω;
S22、基于步骤S21的接口字符串数组,输入设置好的词向量模型中,获得接口名称的词向量;
S3、接口划分评价,具体步骤如下:
S31、以当前集群中微服务应用的类别个数k作为聚类簇数,使用K‑means算法聚类接口名称的词向量,获得K‑means算法的聚类簇划分集合C={c1,c2,...,ck};
S32、以K‑means算法的聚类簇划分集合C={c1,c2,...,ck}为基准,使用Purity算法评价人为的微服务接口划分集合Ω的合理性。
2.根据权利要求1所述的基于词向量模型的微服务接口划分评价方法,其特征在于,步骤S11中,服务端构建微服务集群方法为:服务端基于spring cloud构建微服务集群,在微服务应用启动类上开启服务发现注解@EnableDiscoveryClient和feign注解@EnableFeignClients,微服务应用之间通过Feign Client调用。
3.根据权利要求1所述的基于词向量模型的微服务接口划分评价方法,其特征在于,步骤S12中,收集还原各微服务应用之间分布式链路调用过程并形成图状调用链的方法:在每个微服务应用的配置文件中添加链路追踪工具SOFATracer依赖、Spring Cloud OpenFeign依赖和数据收集工具Zipkin依赖,使用SOFATracer对Spring Cloud OpenFeign组件进行埋点接入用于获取各微服务应用链路调用过程;
各项目工程引入链路收集展示工具Zipkin,启动Zipkin服务端,接收SOFATracer上报的链路日志数据,对链路日志数据清洗形成图状调用链,还原分布式链路调用过程。
4.根据权利要求3所述的基于词向量模型的微服务接口划分评价方法,其特征在于,SOFATracer配置的参数包括:logging path,指定日志文件输出目录;
com.alipay.sofa.tracer.zipkin.enabled,开启SOFATracer远程上报数据到Zipkin;
com.alipay.sofa.tracer.zipkin.baseUrl,上报数据到Zipkin的服务器地址在工程的日志目录中可以看到SOFATracer输出的Spring Cloud OpenFeign摘要日志,日志中一条数据包含的参数如下:
local.app,表示当前微服务应用名称;
request.url,表示请求接口地址;
traceId,表示SOFATracer中代表唯一一次请求的ID;
spanId,代表本次请求在整个调用链路中的层次;
所述spanId的命名规则是父spanId+子SpanId的编号,包含了调用链上下文关系,收集具有相同TraceId的SpanId,组成一颗完整链路树。
5.根据权利要求1所述的基于词向量模型的微服务接口划分评价方法,其特征在于,步骤S21中,按照调用顺序提取接口名称,组成接口字符串数组方法为:将每条线性调用子链转化为以空格分隔的接口字符串,m个线性调用子链组成长度为m个接口字符串数组,每个接口字符串表示一次子请求的接口调用过程,所提取的接口粒度是接口地址中的父路径,表示微服务应用中资源类名;
对所有提取到的接口名称做去重处理,根据其对应的微服务应用的类别分为k个类簇Ω={ω1,ω2,...,ωk},Ω={ω1,ω2,...,ωk}为人为的微服务接口划分集合,k表示当前集群中微服务应用的类别个数。
6.根据权利要求1所述的基于词向量模型的微服务接口划分评价方法,其特征在于,步骤S22中,词向量模型为python gensim库提供的词向量模型中的CBOW模型;
词向量模型训练的具体步骤如下:
设置生成的词向量维度S,窗口大小C,最低词频min_count=1;
输入接口字符串数组,在每一条接口字符串上建立尺寸为C的滑动窗口;
所述滑动窗口的中心词作为该次训练的目标,窗口中其余的词作为神经网络的输入节点,窗口每滑动一次,生成一条训练数据,经过反复迭代训练得到每个接口名称的词向量表示集合V={v1,v2,...,vn}。
7.根据权利要求5所述的基于词向量模型的微服务接口划分评价方法,其特征在于,步骤S31中,使用K‑means算法聚类接口名称的词向量,获得K‑means算法的聚类簇划分集合C={c1,c2,...,ck},具体步骤如下:以当前集群中微服务应用的类别个数k作为K‑means算法的聚类簇数,首先从接口词向量集合v中随机选择k个向量{μ1,μ2,...,μk},作为集合C中每个类簇ci的初始均值向量,并初始化簇ci={μi},i∈{1,2,...,k};
计算接口词向量vj与各均值向量μi的距离dji,其中,j∈{1,2,...,n},根据距离最近的均值向量确定vj的簇类别λj=arg mini∈{1,2,...,k}dji,λj表示当距离dji最小时变量i的值,即λj∈{1,2,...,k},将接口词向量vj划入相应的簇 初始一次迭代结束之后,针对每个类簇ci,ci∈{c1,c2,...,ck},重新计算中心点将当前类簇均值向量μi更新为μ'i,然后针对每个接口词向量vj,重新寻找距离自己最近的中心点;
反复循环,直到前后两次迭代的集合C没有变化,最终得到K‑means算法的聚类簇划分集合C={c1,c2,...,ck}。
8.根据权利要求7所述的基于词向量模型的微服务接口划分评价方法,其特征在于,所述计算接口词向量vj与各均值向量μi的距离dji具体方法如下:将接口词向量vj与各均值向量μi均进行标准化转换为单位向量;
将接口词向量vj与各均值向量μi标准化后的单位向量进行向量点乘运算获得向量内积,即向量空间余弦夹角,取余弦夹角的值作为两个向量之间的距离dji。
9.根据权利要求5所述的基于词向量模型的微服务接口划分评价方法,其特征在于,步骤S32中,Purity算法公式为:式中,N表示总的词向量个数,Ω={ω1,ω2,...,ωk}表示人为的微服务接口划分集合,C={c1,c2,...,ck}表示K‑means算法的聚类簇划分集合;
Purity∈[0,1],越接近1表示微服务接口划分越合理。
说明书 :
一种基于词向量模型的微服务接口划分评价方法
技术领域
背景技术
障的连锁反应问题,已经无法满足互联网公司快速增长的业务规模。
个服务的问题不会让整个系统瘫痪,系统也不会长期限制在某个技术栈上。采用微服务架
构的项目可以做到快速迭代、频繁发布、开发运维一体化。
及方法,公开号为CN111026468A的专利文献公开了一种基于微服务的后端拆分策略。
杂,递归的增加服务间调用延时,有时甚至连一些简单的功能都难以构建。这样所带来的结
果就是开发进度变慢、迁移更困难等。
发明内容
Feign Client调用。
OpenFeign组件进行埋点接入用于获取各微服务应用链路调用过程;
过程。
粒度是接口地址中的父路径,表示微服务应用中资源类别;
当前集群中微服务应用的类别个数。
量表示集合v={v1,v2,...,vn}。
的初始均值向量,并初始化簇ci={μi},i∈{1,2,...,k};
值,即λj∈{1,2,...,k},将接口词向量vj划入相应的簇 t=1,2,3,…,
初始
距离自己最近的中心点;
终分数Purity。
口集合,与人工划分的微服务接口做对比,计算得到人工接口划分评价分数,指导现有微服
务架构做进一步优化调整,使其更加符合高内聚,低耦合的微服务架构原则。
附图说明
具体实施方式
基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗
示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对
本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相
对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可
以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”
的含义是两个或两个以上。
以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是
两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语
在本发明中的具体含义。
服务接口集合Ω;
置文件中添加链路追踪工具SOFATracer和数据收集工具Zipkin需要使用的参数,包括:
Feign Client调用。
以进行相应配置将日志数据持久化到Mysql或Elasticsearch等数据库。
spanId+子SpanId的编号,包含了调用链上下文关系,根据spanId还原该条数据在所述请求
调用链中的位置,每条数据中request.url参数的格式为:“微服务应用地址/微服务资源类
名/类中方法名”,如:"http://122.224.64.250:8083/device/getInfo";
相同TraceId的数据,traceId、spanId是所述数据携带的参数,api是人为提取生成的参数。
api参数,将每条线性调用子链转化为以空格分隔的接口字符串,如“sa sd sc sg”,每个接
口字符串表示一次子请求的接口调用过程,m个线性调用子链组成长度为m个接口字符串数
组。
口划分集合,k表示当前集群中微服务应用的类别个数。
layer)和输出层(Output layer);
的目标,窗口中其余的词a1,a2,a4,a5作为神经网络的输入节点,每个接口名称会被转化为
N维的One‑Hot编码,N为提取并去重后的接口名称个数,4个输入节点的One‑Hot编码分别乘
以共享的输入权重矩阵WN×S得到4个向量,加权平均后生成S维隐藏层向量,隐藏层向量乘以
输出权重矩阵W'N×S得到输出向量,将输出向量与中心词a3的One‑Hot编码对比并更新权重
矩阵W和W',窗口每滑动一次,生成一条训练数据,经过反复迭代训练得到的输出权重矩阵
W'N×S为接口词向量矩阵,矩阵的每一行对应一个S维的接口词向量,最后得到每个接口名称
的词向量表示集合V={v1,v2,...,vn},集合V在空间中的分布如图4第一个虚框所示。
的初始均值向量,并初始化簇ci={μi},i∈{1,2,...,k};
值,即λj∈{1,2,...,k},将接口词向量vj划入相应的簇 t=1,2,3,…,
初始
距离自己最近的中心点;
图4中第二个虚框表示接口词向量在集合C中的分布,第三个虚框表示接口词向量在集合Ω
中的分布,所述Purity公式即给每个类簇ωi分配一个类别j,分配原则是类别为j的接口词
向量v在簇ωi中出现的次数最多,其中,v∈Cj,计算每个簇ωi类别为j的接口词向量出现次
数,求和再归一化即为最终分数Purity。
工接口划分评价分数,指导现有微服务架构做进一步优化调整,使其更加符合高内聚,低耦
合的微服务架构原则。