Page 126 - 《软件学报》2021年第5期
P. 126
1350 Journal of Software 软件学报 Vol.32, No.5, May 2021
6: s d ←pickOneService(s,d)
7: opList←opList∪deploy(s d ,e,flag)
8: end if
9: end for
10: end if
11: return opList
2.2.3 支持服务相关的 DevOps 操作的自适应算法
针对服务相关的实例升级操作 Upgrade(τ(s),v,flag)的算法 4,若 flag 为假,则仅删除原有实例并部署新版本;
2
若 flag 为真,则确保相关依赖能够被正确删除、部署.设系统中实例数量为 m,则时间复杂度为 O(m ).
算法 4. 实例升级 upgrade_inst(τ(s),v,flag)算法.
Input:服务 s,实例τ,目标版本 v,标记位 flag.
Output:演化操作集合 opList.
1: opList←∅
2: e←getInstNode(τ)
3: s n ←getSvcByVer(s,v)
4: opList←opList∪deploy(s n ,e,flag) //部署新版本服务实例
5: opList←opList∪delete(τ,flag) //移除旧版本服务实例
6: return opList
针对服务升级操作 Upgrade(s,v,flag),将按照算法 4 先以实例为基础对系统中服务 s 的全部实例进行升级
操作,再将目标版本的服务标记为不可用,防止在下次自演化时重新进入系统.
2.2.4 支持服务依赖相关的 DevOps 操作的自适应算法
针对服务依赖变更操作 Change(s,P,flag),算法 5 在 flag 为真时,自动判断系统中服务 s 的所有实例的依赖
2
满足情况,并按需进行实例的部署、删除.设系统中实例数量为 m,则时间复杂度为 O(m ).
算法 5. change(s,P,flag)算法.
Input:服务 s,新依赖关系集合 P,标记位 flag.
Output:演化操作集合 opList.
1: opList←∅
2: Inst←getSvcInsts(s)
3: for inst in Inst do
4: for p in P do
5: if depSatisfied(p)≠true then
6: e←getInstNode(τ)
7: s d ←pickOneService(s,p)
8: opList←opList∪deploy(s d ,e,flag)
9: end if
10: end for
11: end for
12: opList←opList∪deleteUnusedInst(⋅) //删除没有被使用的实例
13: return opList