首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

优化Marathon:Part 3

本系列文章分为三个部分,我们将回顾过去的三年,总结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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200916A084WB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券