本系列文章分为三个部分,咱们将回顾过去的三年,总结Marathon稳定性方面的经验,与你们分享。在第一部分中,咱们介绍了适用于许多不一样类型的工做和团队的文化。在第二部分中,咱们介绍了有助于实现稳定Marathon的软件工程最佳实践。本文,咱们将分享D2iQ对于Marathon的测试技术和发布Pipeline管理技术,Pipeline可使咱们比用户更早发现问题,对Marathon的稳定性有很大影响。html

第三部分:测试Pipelinegit
在以前的文章中,咱们讨论了团队文化,它强化了咱们的代码文化和代码设计。接下来,咱们将介绍测试和发布Pipeline的过程,它可能对Marathon的稳定性影响最大。尤为是Pipeline技术,可以使咱们比用户更早发现问题。github
我将首先概述Pipeline阶段,而后深刻探讨Loop(循环)。 web
概 述 微信
Marathon一般会被看成DC/OS客户集群的一部分发送给客户。有些甚至是无外网环境下的集群。这意味着咱们不能有一个完整的时间连续部署Pipeline。咱们不能每周为集群打屡次补丁。所以,咱们必须将精力集中在持续集成,即 CI上,并确保覆盖尽量多的用例。网络
咱们的CI Pipeline大体有三个阶段。分别为测试阶段、浸泡阶段和混合工做负载阶段。每次代码更改时运行的第一个测试是单元测试。而后是集成测试。集成测试将建立本地Mesos集群并调用Marathon API。咱们称之为白盒测试,由于咱们对小集群的状态进行了假设。一旦代码更改经过了这些测试并生效,它就被集成到DC/OS中。而后,Pipeline会针对完整的集群运行系统集成测试。咱们称之为黑盒测试,由于咱们测试系统时就好像咱们是一个对它知之甚少的用户。在系统集成测试过程当中,咱们还引入了一些简单的故障场景,例如网络分区和leader崩溃。并发
全部测试均在不到一个小时的时间内运行。它们的寿命很短,没法捕获诸如内存泄漏之类的bug。所以,它们不涵盖长期用例。浸泡集群这时候就发挥用处了。浸泡集群是一个长时间运行的DC/OS主集群,具备预约义的工做负载。对于咱们须要在发布以前进行组合测试的不一样服务的不一样场景,它是理想的测试平台。app
在浸泡集群以后,咱们有一个称为混合工做负载测试的东西。这是一个在超大型集群上运行一天的测试,该集群具备超过 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
欢迎点击【阅读原文】,获取Mesosphere DC/OS Platform解决方案详情,或联系D2iQ销售团队了解更多: sales@d2iq.com
往期精彩文章
关于D2iQ

点击“阅读原文”,获取Mesosphere DC/OS Platform解决方案详情
本文分享自微信公众号 - D2iQ(d2iq_apac)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。