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
   121   122   123   124   125   126   127   128   129   130   131