Page 123 - 《软件学报》2021年第5期
P. 123
贺祥 等:多版本共存的微服务系统自适应演化方法 1347
Θ () t ⎯⎯→ O Θ (t θ + ) (1)
为了最小化用户请求的平均响应时间和系统演化的成本,可将优化目标表示为如下公式(其中,rt(⋅)表示响
应时间,其定义为延迟和请求输入/输出数据传输时间的总和).
⎧ D ⎫
⎪∑ rt ()d ⎪
⎪ d ⎪
⎪
min ⎨ | D | ⎪
⎪ O ⎪
⎪ ∑ cost (op ) ⎪
⎬
⎪ ⎩ op ⎪ (2)
( +
∀
⎧ Q τ ( ( ))s ≥ Qu i j ), d ∈ j Dt ) θ ⎪
( ,d
⎪ Inst e k ⎪
⎪
⎪
s.t. ⎨ ∑ r ( ) τ r max ( ), e k ∀∈ E + ) ⎪
(t θ ≤
e
k
⎪ τ ⎪
(t θ
τ
τ
⎩ 1 ⎪ ≤ ns ( ) τ ≤ ns max ( ), ∀∈ Inst + ) ⎪
⎭
第 1 个约束条件确保选定的服务实例可以满足每个用户需求预期从服务中获得的质量.第 2 个约束条件确
保一个服务器节点上所有服务实例消耗的总计算资源不超过该服务器节点所提供的最大计算资源.注意:考虑
到云服务器节点相对于边缘节点有着无限计算资源,当边缘节点的计算资源无法再部署新的服务来满足普通
用户需求时,系统将在云节点上部署实例以确保用户需求得到满足.最后一个约束条件确保一个服务实例在当
前时刻同时服务的用户数量不能超过该实例可以同时服务的最大用户数量.此外,为了确保服务能够正常运行,
还应该考虑服务的版本依赖.
2.1.2 算 法
由于无法对未来可能出现的用户进行精确预测,系统无法在规划阶段计算出下一时刻的请求定向状态
DS(t+θ),因此该算法分为两个阶段:规划阶段和运行阶段.规划阶段算法负责生成服务实例重部署演化方案,同
时,针对每一类型的版本依赖请求 p∈D 生成路由规则;运行阶段负责利用规划阶段生成的路由规则对系统中所
有带版本依赖的请求计算出具体的请求定向状态 r(d).
规划阶段,算法接收上一时刻的系统部署状态Θ(t),输出由 Add 和 Remove 组成的演化方案以及一组路由规
则.路由规则描述了对于系统中的每一个具体的依赖关系 p 应该由系统中服务 s 的一个具体实例满足,而不会具
体到是哪个用户或者实例发出的请求以及哪个实例进行响应.该算法采用如算法 1 所示的贪婪算法.
算法 1. 规划时重部署演化方案及路由规则生成算法.
Input:os:上一时刻的系统部署状态.
Output:演化方案以及路由规则.
1: S←getServices(os), N←getNodes(os), D←getDemands(os)
2: unDeployedSvc=∅, rules=∅
3: ns←createEmptyDelopStatus(⋅)
4: for n in N do //以服务器节点为单位进行规划
5: D n ←getNodeDemands(D,n), S n =∅
6: while size(D n )≠0 do //优选选择以最少资源服务最多用户的服务
7: s←pickOneService(D n ,S)
8: D s ←getMetDemands(D n ,s)
9: S n =S n ∪{s}, D n =D n \D s
10: end while
11: T s ←buildMiniSvcTree(S n ,S) //构建满足服务间版本依赖的最小服务集合
12: rules←rules∪getRules(T s )
13: S n ←getAllServices(T s )