本系列文章分为三个部分,我们将回顾过去的三年,总结Marathon稳定性方面的经验,与大家分享。在第一部分中,我们介绍了适用于许多不同类型的工作和团队的文化。在第二部分中,我们介绍了有助于实现稳定Marathon的软件工程最佳实践。本文,我们将分享D2iQ对于Marathon的测试技术和发布Pipeline管理技术,Pipeline可以使我们比用户更早发现问题,对Marathon的稳定性有很大影响。
第三部分:测试Pipeline
在之前的文章中,我们讨论了团队文化,它强化了我们的代码文化和代码设计。接下来,我们将介绍测试和发布Pipeline的过程,它可能对Marathon的稳定性影响最大。尤其是Pipeline技术,能够使我们比用户更早发现问题。
我将首先概述Pipeline阶段,然后深入探讨Loop(循环)。
概 述
Marathon通常会被当作DC/OS客户集群的一部分发送给客户。有些甚至是无外网环境下的集群。这意味着我们不能有一个完整的时间连续部署Pipeline。我们不能每周为集群打多次补丁。因此,我们必须将精力集中在持续集成,即 CI上,并确保覆盖尽可能多的用例。
我们的CI Pipeline大致有三个阶段。分别为测试阶段、浸泡阶段和混合工作负载阶段。每次代码更改时运行的第一个测试是单元测试。然后是集成测试。集成测试将创建本地Mesos集群并调用Marathon API。我们称之为白盒测试,因为我们对小集群的状态进行了假设。一旦代码更改通过了这些测试并生效,它就被集成到DC/OS中。然后,Pipeline会针对完整的集群运行系统集成测试。我们称之为黑盒测试,因为我们测试系统时就好像我们是一个对它知之甚少的用户。在系统集成测试过程中,我们还引入了一些简单的故障场景,例如网络分区和leader崩溃。
所有测试均在不到一个小时的时间内运行。它们的寿命很短,无法捕获诸如内存泄漏之类的bug。因此,它们不涵盖长期用例。浸泡集群这时候就发挥用处了。浸泡集群是一个长时间运行的DC/OS主集群,具有预定义的工作负载。对于我们需要在发布之前进行组合测试的不同服务的不同场景,它是理想的测试平台。
在浸泡集群之后,我们有一个称为混合工作负载测试的东西。这是一个在超大型集群上运行一天的测试,该集群具有超过 150 个 c5.18xlarge EC2 实例(74vcpu,144GB memery,详情请参考注 4)。我们启动了数百个Marathon和Jenkins实例以及数以千计Mesos任务。只有模拟这种大规模测试,给系统带来压力,才有机会发现更多的bug。
循 环
尽管Pipeline听起来不错,但在实践中却很难运行。集成测试尤其让我们头疼,它们大约有30%的时间会出现问题,对于这些片状测试,要么不断的反复重试,要么就忽视某些错误。这是一种让我感到不舒服的方法。任何片状测试在其核心都存在潜在的bug。为了查找这些bug,我们需要更多的数据,为了生成这些数据,我们引入了循环。循环会运行Marathon大约 50 次/天,并将其报告到仪表板(请参阅图 1 和图 2)。因此,两天后,我们就运行了100次,有了足够的数据来查看哪些测试失败了,并进行调试。我们在100次运行中发现了两次失败。任何高于这个水平的东西都不可接受。我们花了大约一年的时间才达到2%的失败率。这是值得的,因为它让我们有信心处理更有效的重构和特性。
图1:Marathon1.5的循环仪表板显示了四个失败的构建
图2:我们曾经进行的片状测试的可视化。
回 顾
回顾一下过去的三年,我们取得了很大的进步。然而,最近几个月,我发现我们的解决方案通常是为Marathon量身定做的。在其它项目中使用我们的Pipeline并非易事,也并不是灵丹妙药。有些系统并没有“崩溃”设计。一些团队找到了其它的方式来合作并取得成功。所以请酌情采纳我们的建议。
随着版本的更迭,Marathon变得越发的稳定了,我们也将发布了前所未有的功能,为此深感自豪。
前 景
未来我们将何去何从?第一步是关于我们的新库USI(注5),它抽象了许多Marathon式的调度,并强制执行了我们认为非常重要的声明式模式。我们还进一步减小了异步代码。USI基本上是一个事件循环,用于更新Mesos和框架的内部状态并发布新的事件(注6)。它还附带了许多我们希望与 Mesos 框架的任何开发人员共享的测试工具。
我们还希望在我们的测试Pipeline中看到更多的故障注入并生成随机输入。这有助于我们比客户更早发现更多错误。
注4:详见以下链接获取规格说明
https://aws.amazon.com/ec2/instance-types/
注5:详见
https://github.com/mesosphere/usi
注6:查看文档中的设计页面
https://mesosphere.github.io/usi/design/index.html
领取专属 10元无门槛券
私享最新 技术干货