一种基于词向量模型的微服务接口划分评价方法转让专利

申请号 : CN202111316694.6

文献号 : CN113760778B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李莹夏轩轩张凌飞朱晓莉方燕翎毛义华

申请人 : 浙江大学滨海产业技术研究院天津众颐科技有限责任公司

摘要 :

本发明提供了一种基于词向量模型的微服务接口划分评价方法,数据收集:服务端构建微服务集群;收集日志数据还原各微服务应用之间分布式链路调用过程;模型训练:拆分图状调用链为线性调用子链,按照调用顺序提取接口名称组成接口字符串数组获得人为的微服务接口划分集合Ω;基于接口字符串数组进行词向量模型训练,得到接口名称的词向量;接口划分评价:以当前集群中微服务应用的类别个数k作为聚类簇数,获得K‑means算法的聚类簇划分集合;以K‑means算法的聚类簇划分集合为基准,使用Purity算法评价集合Ω接口划分的合理性。本发明基于微服务接口实际运行的调用关系,使用数学方法重新划分接口集合,与人工划分的微服务接口做对比,指导优化现有微服务架构。

权利要求 :

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表示微服务接口划分越合理。

说明书 :

一种基于词向量模型的微服务接口划分评价方法

技术领域

[0001] 本发明属于微服务接口领域,尤其是涉及一种基于词向量模型的微服务接口划分评价方法。

背景技术

[0002] 传统的单体应用架构一般基于Tomcat中间件,这种架构增加了系统的复杂度,使开发人员之间协作困难,系统难以顺畅的持续集成、持续发布。在实际运行里,容易出现故
障的连锁反应问题,已经无法满足互联网公司快速增长的业务规模。
[0003] 相比传统的单体架构,微服务架构将功能分解到离散的各个服务当中,每个服务足够内聚,从而降低系统的耦合性,并且服务可以各自进行水平和垂直扩展并独立部署,一
个服务的问题不会让整个系统瘫痪,系统也不会长期限制在某个技术栈上。采用微服务架
构的项目可以做到快速迭代、频繁发布、开发运维一体化。
[0004] 基于上述优势,越来越多的公司将单体应用拆分为微服务架构,如公开号为CN112988122A的专利文献公开了一种基于功能特性与微服务关联度的单体应用分解工具
及方法,公开号为CN111026468A的专利文献公开了一种基于微服务的后端拆分策略。
[0005] 然而,当单体应用系统业务复杂,代码庞大,众多模块耦合在一起,依靠人工拆解梳理出理想的微服务结构具有挑战性。不合理的服务接口划分,会导致服务依赖关系更复
杂,递归的增加服务间调用延时,有时甚至连一些简单的功能都难以构建。这样所带来的结
果就是开发进度变慢、迁移更困难等。
[0006] 为了更好的建设微服务架构,降低服务之间调用延时,需要对微服务接口划分的合理性进行度量和客观评价。

发明内容

[0007] 有鉴于此,本发明旨在提出一种基于词向量模型的微服务接口划分评价方法,以为了解决接口划分不合理,服务间依赖关系复杂造成效率低下的问题。
[0008] 为达到上述目的,本发明的技术方案是这样实现的:
[0009] 一种基于词向量模型的微服务接口划分评价方法,包括以下步骤:
[0010] S1、数据收集,具体步骤如下:
[0011] S11、服务端构建微服务集群;
[0012] S12、收集还原各微服务应用之间分布式链路调用过程并形成图状调用链;
[0013] S2、设置词向量模型,输入接口字符串数组,获得接口名称的词向量,具体步骤如下:
[0014] S21、通过深度优先搜索方法DFS拆分图状调用链为m个线性调用子链,按照调用顺序提取接口名称,组成接口字符串数组,获得人为的微服务接口划分集合Ω;
[0015] S22、基于步骤S21的接口字符串数组,进行词向量模型训练,得到接口名称的词向量;
[0016] S3、接口划分评价,具体步骤如下:
[0017] S31、以微服务应用的类别个数k作为聚类簇数,使用K‑means算法聚类接口名称的词向量,获得K‑means算法的聚类簇划分集合C={c1,c2,...,ck};
[0018] S32、以K‑means算法的聚类簇划分集合C={c1,c2,...,ck}为基准,使用Purity算法评价人为的微服务接口划分集合Ω的合理性。
[0019] 进一步的,步骤S11中,服务端构建微服务集群方法为:
[0020] 服务端基于spring cloud构建微服务集群,在微服务应用启动类上开启服务发现注解@EnableDiscoveryClient和feign注解@EnableFeignClients,微服务应用之间通过
Feign Client调用。
[0021] 进一步的,步骤S12中,收集还原各微服务应用之间分布式链路调用过程并形成图状调用链的方法:
[0022] 在每个微服务应用的配置文件中添加链路追踪工具SOFATracer依赖、Spring Cloud OpenFeign依赖和数据收集工具Zipkin依赖,使用SOFATracer对Spring Cloud 
OpenFeign组件进行埋点接入用于获取各微服务应用链路调用过程;
[0023] 各项目工程引入链路收集展示工具Zipkin,启动Zipkin服务端,接收SOFATracer上报的链路日志数据,Zipkin对链路日志数据清洗形成图状调用链,还原分布式链路调用
过程。
[0024] 进一步的,SOFATracer配置的参数包括:
[0025] logging path,指定日志文件输出目录;
[0026] com.alipay.sofa.tracer.zipkin.enabled,开启SOFATracer远程上报数据到Zipkin;
[0027] com.alipay.sofa.tracer.zipkin.baseUrl,上报数据到Zipkin的服务器地址
[0028] 在工程的日志目录中可以看到SOFATracer输出的Spring Cloud OpenFeign摘要日志,日志中一条数据包含的参数如下:
[0029] local.app,表示当前微服务应用名称;
[0030] request.url,表示请求接口地址;
[0031] traceId,表示SOFATracer中代表唯一一次请求的ID;
[0032] spanId,代表本次请求在整个调用链路中的层次;
[0033] 所述spanId的命名规则是父spanId+子SpanId的编号,包含了调用链上下文关系,收集具有相同TraceId的SpanId,组成一颗完整链路树。
[0034] 进一步的,步骤S21中,按照调用顺序提取接口名称,组成接口字符串数组方法为:
[0035] 将每条线性调用子链转化为以空格分隔的接口字符串,m个线性调用子链组成长度为m个接口字符串数组,每个接口字符串表示一次子请求的接口调用过程,所提取的接口
粒度是接口地址中的父路径,表示微服务应用中资源类别;
[0036] 对所有提取到的接口名称做去重处理,根据其对应的微服务应用的类别分为k个类簇Ω={ω1,ω2,...,ωk},Ω={ω1,ω2,...,ωk}为人为的微服务接口划分集合,k表示
当前集群中微服务应用的类别个数。
[0037] 进一步的,步骤S22中,词向量模型为python gensim库提供的词向量模型中的CBOW模型;
[0038] 词向量模型训练的具体步骤如下:
[0039] 设置生成的词向量维度S,窗口大小C,最低词频min_count=1;
[0040] 输入接口字符串数组,在每一条接口字符串上建立尺寸为C的滑动窗口;
[0041] 所述滑动窗口的中心词作为该次训练的目标,窗口中其余的词作为神经网络的输入节点,窗口每滑动一次,生成一条训练数据,经过反复迭代训练得到每个接口名称的词向
量表示集合v={v1,v2,...,vn}。
[0042] 进一步的,步骤S31中,使用K‑means算法聚类接口名称的词向量,获得K‑means算法的聚类簇划分集合C={c1,c2,...,ck}具体步骤如下:
[0043] 以步骤S21中所述当前集群中微服务应用的类别个数k作为K‑means算法的聚类簇数,首先从接口词向量集合v中随机选择k个向量{μ1,μ2,...,μk},作为集合C中每个类簇ci
的初始均值向量,并初始化簇ci={μi},i∈{1,2,...,k};
[0044] 计算接口词向量vj与各均值向量μi的距离dji,其中,j∈{1,2,...,n},根据距离最近的均值向量确定vj的簇类别λj=arg mini∈{1,2,...,k}dji,λj表示当距离dji最小时变量i的
值,即λj∈{1,2,...,k},将接口词向量vj划入相应的簇 t=1,2,3,…,
初始
[0045] 一次迭代结束之后,针对每个类簇ci,ci∈{c1,c2,...,ck},重新计算中心点将当前类簇均值向量μi更新为μ'i,然后针对每个接口词向量vj,重新寻找
距离自己最近的中心点;
[0046] 反复循环,直到前后两次迭代的集合C没有变化,最终得到K‑means算法的聚类簇划分集合C={c1,c2,...,ck}。
[0047] 进一步的,所述计算接口词向量vj与各均值向量μi的距离dji具体方法如下:
[0048] 将接口词向量vj与各均值向量μi均进行标准化转换为单位向量;
[0049] 将接口词向量vj与各均值向量μi标准化后的单位向量进行向量点乘运算获得向量内积,即向量空间余弦夹角,取余弦夹角的值作为两个向量之间的距离dji。
[0050] 余弦的范围是[‑1,1],若两向量间余弦越趋向‑1,表示语义差别越大,越趋向1,认为语义相似度越高。
[0051] 进一步的,步骤S32中,Purity算法公式为:
[0052]
[0053] 式中,N表示总的词向量个数,Ω={ω1,ω2,...,ωk}表示人为的微服务接口划分集合,C={c1,c2,...,ck}表示K‑means算法的聚类簇划分集合;
[0054] Purity∈[0,1],越接近1表示微服务接口划分越合理。
[0055] 给每个类簇ωi分配一个类别j,分配原则是类别为j的接口词向量v在簇ωi中出现的次数最多,其中,v∈Cj,计算每个簇ωi类别为j的词向量出现次数,求和再归一化即为最
终分数Purity。
[0056] 相对于现有技术,本发明所述的一种基于词向量模型的微服务接口划分评价方法具有以下有益效果:
[0057] 本发明所述的一种基于词向量模型的微服务接口划分评价方法基于微服务接口实际运行的调用关系,使用词向量模型、K‑means聚类和Purity算法等数学方法重新划分接
口集合,与人工划分的微服务接口做对比,计算得到人工接口划分评价分数,指导现有微服
务架构做进一步优化调整,使其更加符合高内聚,低耦合的微服务架构原则。

附图说明

[0058] 构成本发明的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0059] 图1为本发明所述的一种基于词向量模型的微服务接口划分评价方法流程图;
[0060] 图2为本发明所述的还原请求调用链的过程图;
[0061] 图3为本发明所述的词向量模型结构示意图;
[0062] 图4为本发明所述的K‑means聚类算法和Purity算法示意图。

具体实施方式

[0063] 需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
[0064] 在本发明的描述中,需要理解的是,术语“中心”、“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”、“内”、“外”等指示的方位或位置关系为
基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗
示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对
本发明的限制。此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相
对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”等的特征可
以明示或者隐含地包括一个或者更多个该特征。在本发明的描述中,除非另有说明,“多个”
的含义是两个或两个以上。
[0065] 在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可
以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是
两个元件内部的连通。对于本领域的普通技术人员而言,可以通过具体情况理解上述术语
在本发明中的具体含义。
[0066] 下面将参考附图并结合实施例来详细说明本发明。
[0067] 如图1所示,基于词向量模型的微服务接口划分评价方法主要包含数据收集阶段S1,模型训练阶段S2和接口评价阶段S3。
[0068] S1、数据收集阶段,具体步骤如下:
[0069] S11、服务端构建微服务集群,每个微服务应用独立收集埋点日志。
[0070] S12、收集还原各微服务应用之间分布式链路调用过程并形成图状调用链;
[0071] S2、模型训练阶段,设置词向量模型,输入预处理后的接口字符串数组,获得接口名称的词向量表示,具体步骤如下:
[0072] S21、通过深度优先搜索方法DFS拆分图状调用链为m个线性调用子链,按照调用顺序提取接口名称,组成接口字符串数组,生成词向量模型的训练数据,并获得人为划分的微
服务接口集合Ω;
[0073] S22、基于步骤S21的接口字符串数组,进行词向量模型训练,得到接口名称的词向量;
[0074] S3、接口评价阶段,具体步骤如下:
[0075] S31、以微服务应用的类别个数k作为聚类簇数,使用K‑means算法聚类接口名称词向量,获得K‑means算法的聚类簇划分集合C={c1,c2,...,ck};
[0076] S32、以K‑means算法的聚类簇划分集合C={c1,c2,...,ck}为基准,使用Purity算法评价人为的微服务接口划分集合Ω的合理性。
[0077] 步骤S11中,服务端构建微服务集群方法为:
[0078] 服务端基于spring cloud构建微服务集群,在工程模块的pom文件中添加SOFATracer依赖、Spring Cloud OpenFeign依赖和Zipkin依赖,并在每个微服务应用的配
置文件中添加链路追踪工具SOFATracer和数据收集工具Zipkin需要使用的参数,包括:
[0079] logging path,指定日志文件输出目录;
[0080] com.alipay.sofa.tracer.zipkin.enabled,开启SOFATracer远程上报数据到Zipkin;
[0081] com.alipay.sofa.tracer.zipkin.baseUrl,上报数据到Zipkin的服务器地址
[0082] 配置完成每个微服务工程的依赖和参数之后,在微服务应用启动类上开启服务发现注解@EnableDiscoveryClient和feign注解@EnableFeignClients,微服务应用之间通过
Feign Client调用。
[0083] 在工程的日志目录中可以看到SOFATracer输出的Spring Cloud OpenFeign摘要日志,日志中一条数据包含的参数如下:
[0084] local.app,表示当前微服务应用名称;
[0085] request.url,表示请求接口地址;
[0086] traceId,表示SOFATracer中代表唯一一次请求的ID;
[0087] spanId,代表本次请求在整个调用链路中的层次,
[0088] 步骤S12中,收集还原各微服务应用之间分布式链路调用过程并形成图状调用链的方法:
[0089] 启动Zipkin服务端,各微服务应用集成的SOFATracer组件会定期将Spring Cloud OpenFeign摘要日志上报至Zipkin服务器,可选的,根据数据量的大小,在Zipkin服务端可
以进行相应配置将日志数据持久化到Mysql或Elasticsearch等数据库。
[0090] 还原请求调用链的过程如图2所示,首先,从数据库中提取上报的链路日志数据,具有相同TraceId的数据来源于同一次请求,每条数据中的spanId参数的命名规则是父
spanId+子SpanId的编号,包含了调用链上下文关系,根据spanId还原该条数据在所述请求
调用链中的位置,每条数据中request.url参数的格式为:“微服务应用地址/微服务资源类
名/类中方法名”,如:"http://122.224.64.250:8083/device/getInfo";
[0091] 提取request.url参数中微服务资源类名如device作为该条数据请求的接口api,最后每个请求还原为一个图状调用链,如图2第一个虚框所示,A,B,…,G表示数据库中具有
相同TraceId的数据,traceId、spanId是所述数据携带的参数,api是人为提取生成的参数。
[0092] 步骤S21中,生成词向量模型训练数据的方法为:
[0093] 通过深度优先搜索方法DFS,遍历每条请求的链路数据,将所有图状调用链拆分为m个线性调用子链,如图2第二个虚框所示。遍历每个子链,按照调用顺序提取每条数据中的
api参数,将每条线性调用子链转化为以空格分隔的接口字符串,如“sa sd sc sg”,每个接
口字符串表示一次子请求的接口调用过程,m个线性调用子链组成长度为m个接口字符串数
组。
[0094] 对所有提取到的接口名称sa、sb、sc等做去重处理,根据其所属的微服务应用名称local.app分为k个类簇Ω={ω1,ω2,...,ωk},Ω={ω1,ω2,...,ωk}为人为的微服务接
口划分集合,k表示当前集群中微服务应用的类别个数。
[0095] 接口字符串数组是作为步骤S22中词向量模型的训练语料库。
[0096] 如图3所示,步骤S22中,词向量模型为python gensim库提供的词向量模型中的CBOW模型,CBOW模型是一个三层的神经网络,包括输入层(Input layer),隐藏层(Hidden 
layer)和输出层(Output layer);
[0097] 词向量模型训练的具体步骤如下:
[0098] 设置词向量模型训练参数,生成词向量维度S=100,窗口大小C=5,最低词频min_count=1(不应该忽略每一个在请求链路上出现过的接口);
[0099] 输入接口字符串数组,在每一条接口字符串上建立尺寸为C的滑动窗口,图3中a1,a2,…a6表示一个接口字符串中包含的接口名称。所述滑动窗口的中心词a3作为该次训练
的目标,窗口中其余的词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第一个虚框所示。
[0100] 调用链中上下文相似的接口词向量在空间坐标中的位置会十分接近,而上下文相差较大的接口词向量之间则相距较远。
[0101] 步骤S31中,使用K‑means算法聚类接口名称的词向量,获得K‑means算法的聚类簇划分集合C={c1,c2,...,ck},具体步骤如下:
[0102] 以步骤S21中所述当前集群中微服务应用的类别个数k作为K‑means算法的聚类簇数,首先从接口词向量集合v中随机选择k个向量{μ1,μ2,...,μk},作为集合C中每个类簇ci
的初始均值向量,并初始化簇ci={μi},i∈{1,2,...,k};
[0103] 计算接口词向量vj与各均值向量μi的距离dji,其中,j∈{1,2,...,n},根据距离最近的均值向量确定vj的簇类别λj=arg mini∈{1,2,...,k}dji,λj表示当距离dji最小时变量i的
值,即λj∈{1,2,...,k},将接口词向量vj划入相应的簇 t=1,2,3,…,
初始
[0104] 一次迭代结束之后,针对每个类簇ci,ci∈{c1,c2,...,ck},重新计算中心点将当前类簇均值向量μi更新为μ'i,然后针对每个接口词向量vj,重新寻找
距离自己最近的中心点;
[0105] 反复循环,直到前后两次迭代的集合C没有变化,最终得到K‑means算法的聚类簇划分集合C={c1,c2,...,ck}。
[0106] 所述计算接口词向量vj与各均值向量μi的距离dji具体方法如下:
[0107] 将接口词向量vj与各均值向量μi均进行标准化转换为单位向量;
[0108] 将接口词向量vj与各均值向量μi标准化后的单位向量进行向量点乘运算获得向量内积,即向量空间余弦夹角,取余弦夹角的值作为两个向量之间的距离dji。
[0109] 余弦的范围是[‑1,1],若两向量间余弦越趋向‑1,表示语义差别越大,越趋向1,认为语义相似度越高。
[0110] 步骤S32中,Purity算法公式为:
[0111]
[0112] 式中,N表示总的词向量个数,Ω={ω1,ω2,...,ωk}表示人为的微服务接口划分集合,C={c1,c2,...,ck}表示K‑means算法的聚类簇划分集合;
[0113] Purity∈[0,1],越接近1表示微服务接口划分越合理。
[0114] Purity算法流程如图4所示,实心圆表示还没有被Kemeans算法分类的接口词向量,空心圆、空心三角形和空心正方形表示被K‑means算法划分为不同类别的接口词向量,
图4中第二个虚框表示接口词向量在集合C中的分布,第三个虚框表示接口词向量在集合Ω
中的分布,所述Purity公式即给每个类簇ωi分配一个类别j,分配原则是类别为j的接口词
向量v在簇ωi中出现的次数最多,其中,v∈Cj,计算每个簇ωi类别为j的接口词向量出现次
数,求和再归一化即为最终分数Purity。
[0115] 本发明基于微服务接口实际运行的调用关系,使用词向量模型、K‑means聚类和Purity算法等数学方法重新划分接口集合,与人工划分的微服务接口做对比,计算得到人
工接口划分评价分数,指导现有微服务架构做进一步优化调整,使其更加符合高内聚,低耦
合的微服务架构原则。
[0116] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。