稳定性测试包括哪些
阿里巴巴技术团队在程序测试中的最佳实践
测试环境是任何软件研发过程的重要方面,并提供了一个在发布之前有效测试新功能的系统。 这种系统的稳定性是影响研发效率的最大因素之一。
本文概述了测试环境的主要痛点和约束条件,并介绍了可以有效改善此类系统稳定性的改进方法。 阿里巴巴技术团队改善测试环境稳定性的主要目标是优化容器应用程序的成功率并提高测试环境的稳定性。 本文显示,通过解决应用资源可用性和新资源应用方面的问题,阿里巴巴创建了更流畅的软件研发流程,并由此扩展了更好的最终产品。
痛点
容器应用程序由整个运行时环境组成,并且是隐藏可能用于测试环境的硬件基础结构中差异的有效解决方案。 这些容器应用程序中的故障通常会在进行测试以找出问题发生的地点和方式时暂停研发进度。 这些测试可能涉及整个测试环境中的所有系统。
半年内,阿里巴巴的测试环境容器出现了多达10次问题,导致数百小时的研发时间浪费。 因此,迫切需要显着改善测试环境的稳定性。
在对所有遇到的问题进行彻底分析之后,阿里巴巴确定了测试环境面临的两个主要挑战:
· 已应用的资源变得不可用
测试环境的性能低下和主机虚拟比率高(不在保修范围内)容易出错。 故障主机的容器不会自动迁移,这很可能导致其重新部署和重新启动失败。
调度系统的巡逻使故障主机无法调度。 由于这些主机仍然具有无法脱机,修复和重用的容器,因此主机资源越来越有限。
· 新资源申请的成功率低
测试环境主机分为不共享资源的具有不同优先级的资源池。 测试环境主机的总容量/可用容量不透明,再加上缺少警告,导致由于资源不足而导致调度失败。
资源调度系统并未针对与在线环境截然不同的测试环境进行优化,从而导致成功率较低。
Performance Insights:一切都与数据有关
为了优化测试环境,数据收集是理解主要稳定性问题的关键。 阿里巴巴了解测试环境稳定性的方法概述如下:
自上而下的测试环境稳定性问题的探究过程包括查看以下平台:
·诺曼底:一个用于操作基本应用程序的平台
·大黄蜂:资源应用平台
·Zeus:两层调度系统
·Sigma:小组资源调度系统
·Atom:主机替换系统故障
所有上游和下游系统都有各自独立的数据。 这样做的主要限制是该数据没有跨平台集成和兼容。 即使在每天,每周和每月的时间范围内进行错误分析,它仍然分散在各个平台上,这使得全面的数据分析更具挑战性。
尽管如此,收集到的数据仍帮助团队确定了容器可用性和底层系统屏蔽的特定问题,并据此开发了解决方案。 这些解决方案包括自动更换容器和防止潜在的系统故障。 实施后,将监视测试环境的稳定性,以确定解决方案是否有效。
合理化资源池分配
通常基于以下因素来合理化资源池分配:
· 逻辑资源池
主机标签用于指示每个资源池的不同资源和优先级。 优先级越高,主机越好。
· 容器规格估算
测试环境的容器规格相对较少,其中最通用的是转换为2核4G。 其他估计包括:
-每个资源池的平均每日容器增量。 也就是说,增加的那一天:P0,增量m天间前:PM,日均增加:(P0 - PM)/ M。
-组中每个资源池的计算资源和每日增量份额:
-每个资源池的预测保证金值: Ti = Ri * T ,其中T是总保证金。
· 主机等级
可以根据其房间的等级,历史故障数,硬件配置和发布日期来调整主机设备。
· 集装箱分配规则
根据主机等级和资源池优先级分配与资源池相对应的主机标签。
这种动态分配资源池的概述如下所示。
自动更换容器
如果无法使用正在使用的容器,则将自动进行容器更换。 本质上,此功能会在稳定的主机上创建一个新容器,并使原始容器从故障主机上脱机。
该过程始于Sigma系统识别出故障的主机,例如具有完整磁盘或硬件故障的主机。 然后,Sigma通知Atom系统,该系统随后替换故障主机上的容器。 然后,Atom系统初始化对Normandy系统的主机替换。 最后,通过自动更换将有故障的主机清空,然后进行脱机修复。
防止潜在的系统故障
嵌入式缓冲池
由于测试环境与在线环境之间的差异(并且为了节省成本),主要使用虚拟主机比例较高的测试环境。 这会导致创建和使用容器时出现问题,因此应用了容器缓冲池以防止潜在的故障影响用户。
缓冲池被嵌入到测试环境容器的生产链接的末尾,以预先生产一批容器,并在必要时分配给用户。 即使缓冲容器的应用程序失败,原始生产链接也可以继续生产容器。 每当用户从缓冲池中获取一个容器时,都会将另一个具有相同规格的容器异步添加到缓冲池中,以维持其容量或容器数量。
缓冲池容量
另一个关键点是确定缓冲容器的规格和缓冲池容量,这需要计算每个规格图像资源池的过去应用程序数量,并按比例确定每个缓冲区的容量。 为确保底层系统停止服务时整个系统仍然可用,必须确认高峰时段容器应用程序的数量,允许的服务中断持续时间以及测试环境的主机资源。
此外,还应考虑的另一点是,用户包括优先级各不相同的普通用户(研发和测试人员)和系统用户(例如自动测试系统)。 就测试环境的可用性而言,普通用户通常比系统用户具有更高的优先级。
屏蔽功能
为了最大程度地减少缓冲池对用户的影响,在缓冲池中添加了许多动态开关以屏蔽其某些功能。 例如,可以为特定的应用程序设置是否必须更改容器的主机名。 如果主机名未更改,则成功的应用程序平均花费不到1秒的时间。 在这种情况下,如果应用程序不使用缓冲区功能,则可以立即将其屏蔽。 如果缓冲池本身出现故障,则快速降级会从整个链路中删除缓冲功能。
在交付缓冲容器之前,缓冲池会对容器是否可用进行额外检查,以避免服务部署失败。 缓冲池会定期删除不可用的容器,并添加新的缓冲容器。
结果趋势
成功率分析是全面了解优化效果的关键。 如下所示,从12月21日开始利用缓冲池的全部容量可极大地提高成功率及其稳定性。 成功率下降(例如12月1日的下降)是由于调度失败所致。
根据资源池的预计平衡和警告来调整每个资源池的容量,可以排除调度失败的可能性,并大大降低了成功率的波动性。
在缓冲池满负荷运行后的一周内,内部错误和较低的命中率导致了成功率的不稳定,在修复错误并提高缓冲池的命中率后,成功率得以稳定。
还通过对用户角度(使用缓冲区)和底层系统角度(不使用缓冲区)进行纵向比较来分析每日成功率。 如下所示,缓冲池可以屏蔽大多数底层系统故障,并且当缓冲池用尽时,只会导致性能下降一天。
展望未来
尽管优化后成功率有所提高,但仍然需要进一步关注三个关键方面:
· 自动计划资源池容量
当前的算法还不足以处理某些情况,例如添加或删除过多的容器会导致不正确的余额趋势分析。 另一个问题是由自动调度引起的主机标签混乱的可能性增加。
· 动态调整缓冲区模板类型以及每种模板的数量
缓冲区模板的类型以及每种模板的数量应根据历史应用数据或实时数据进行动态预测和调整。
· 扩展缓冲池的容量
这需要足够的主机资源可用。
此外,测试环境还存在以下更一般性的问题,因此,开发解决方案需要多种多样的方法:
·如何在整个测试环境中提高资源利用率?
·如何缩短容器交付的时间(从用户应用程序到容器交付的时间)?
·如何使应用程序更具可调度性?
展望未来,这些是阿里巴巴技术团队将关注的问题。
(张静张劲的原创文章)
阿里巴巴科技
关于阿里巴巴最新技术的第一手资料和深入信息→在Facebook上搜索“ Alibaba Tech”
翻译自: https://hackernoon.com/optimizing-test-environments-by-containing-stability-73d0f625a1b6
稳定性测试包括哪些