本文讲的是Mini-Mesos:一个Mesos的测试基础框架,【编者的话】Mini-Mesos建立在思科Intercloud服务与Container Solutions服务合作的基础上,它是基于 Apache License 2.0版本下的开源项目。本文主要介绍了在容器解决方案与极限编程(XP)之间所存在的一些联系,以及如何在发展集容器化应用和Mesos框架的同时还开展TDD的核心XP实践和持续集成,介绍了用于构建Mesos框架的测试工具Mini-Mesos。
大多数人知道我是通过极限编程(XP)和XP相关的东西如:面向对象编程,测试驱动开发,测试数据管理和高效系统构建。对于一些人来说,我们所做的工作在容器解决方案和XP之间的联系似乎很弱或根本不存在。但是,仔细想一想,你会发现这两者之间的联系是很强的。
极限编程所讲都是关于缩短反馈回路的,这里是典型的洋葱图:
Don Wells, 2001, via wikipedia.
反馈回路在XP中是非常重要的,因为该方法试图帮助开发团队更快地响应客户的需求。这就是为什么,尽管面向对象(或面向组件)的开发并非XP中明确的组成部分,但它是重要的,因为设计良好的对象可以快速地重新组合以服务于新的客户需求。这就是为什么重构和测试驱动开发是XP的必要组成部分。
重构和测试驱动开发
重构是在不改变功能的情况下改进代码。如果没有配套的测试来确保代码以相同的方式运行,这样做是非常危险的。
测试驱动开发(TDD)是关于设计的。由于先写测试样例,我们不得不考虑我们的接口和对象之间的相互作用。在 Steve Freeman 和 Nat Pryce的大力推广下,对于不断成长的面向对象系统来说,使用模拟对象的TDD是一个非常好的方法。
TDD的一个很大的副作用是,你将剩下一套像样的测试用例,这就意味着你可以在或多或少的安全状态下重构代码。 (一旦测试用例写定,测试套件就是一种安全网和检查的集合,以确保一切都或多或少地如重构之前一样工作)。
测试基础设施
正如使用TDD一样,我们很多人过去通常为基础设施编写测试用例。比如,我过去通常编写测试用例来ping通所有的数据库、消息系统以及确保支付系统正常运行等。我们这样做有两个原因。首先,如果出现问题,测试套件将会指向问题所在之处,测试用例用来诊断问题。其次,我们这样做是因为我们经常无法控制基础设施,这些测试帮我们向监控staging、pre-prodoction和生产环境的运维团队传递信息。
云端
一旦云技术开始变得普遍,我们就不得不思考,如何在不破坏我们过去习以为常的紧密反馈循环的情况下向云端部署。换句话说,我们必须仔细考虑如何部署,测试和重构我们基于云的系统。这确实是很重要的,比如我们如何启动云端的虚拟机,然后根据新的用户需求来更新它?我们如何在本地来重建云端来解决任何基础设施的问题?
Mesos
随着云技术以及我们所构建的一系列解决方案的发展,一年前,Apache Mesos闯入我们的生活,该工具使我们能够更有效地利用我们的硬件。对于拥有大量的计算资源的客户来说,这是很重要的,因为使用Apache Mesos确实可以给他们节省大笔资金。(关于Mesos好处更加详细的解释可以在容器解决方案的网站上,Phil Winder所撰写的一篇文章中找到)。
那么,对于我们来说,一旦Mesos的时代来临,一个新的问题将会出现:我们如何在发展集容器化应用和Mesos框架的同时还开展TDD的核心XP实践和持续集成?
引入Mini-Mesos
容器解决方案提供了两个关键的服务。一方面,它们能够在生产环境中顺利部署和管理应用。另一方面,他们提供应用开发。因此,我们必须拿出一些工具来帮助应用程序开发和基础设施设计。
迅速解决操作性问题的一种方法是重现在你笔记本中的完整的开发环境,Docker组件只需一小步便可实现。不幸的是,它不具有对Mesos的任何支持,这就意味着我们必须建立自己的Mesos集群,并部署到Docker中,然后手动运行我们的测试,这可能需要几分钟,而对于较复杂的框架,可能需要几十分钟。因此,XP提供的反馈回路被彻底摧毁。我们意识到我们不得不创造自己的测试工具,用于构建Mesos框架。我们称这种工具Mini-Mesos。
Mini-Mesos有三个主要特点:
- 它允许开发人员在他们的本地机器上启动Mesos集群,来完成他们正在开发的任何框架。
- 它具有以编程方式操作集群的API。我们称之为“容器API。”
- 它具有用于查询集群状态的API。我们称之为“集群状态API。”这个API可以让我们获得集群的状态以运行自动化测试。
由于这些特征,首先我们能够构建自己的容器化应用程序和Mesos框架的测试,这提高了设计并使得我们能够进行快速重构。因为我们可以实例化集群,运行测试套件,并在几秒钟内摧毁它,所以我们有一个快速的开发周期;也就是说,在确认我们最近的改变之前,我们并没有部署到真正的云端,或者引入我们的代码。
总之,Mini-Mesos使我们在开发应用和框架时能够利用我们最喜爱的开发方法:极限编程。
总结
1998年,我还是一个学生,我用Java的反射库瞎搞出一个测试运行器用来寻找以“test”开头的方法,后来,我发现了JUnit的,可能当时我傻笑着想竟然让我偶然发现了一个好方法。
那时候,我们需要构建自己的工具来实践XP,现在也是如此。我们要打造工具以便允许我们针对云端来实践XP。Mini-Mesos就是一个让我们能够做到这一点的工具。这是一个新东西,现在已经在我们的工具之列,它几乎包含了Apache的Mesos,Hashicorp的Terraform,各种CI工具,当然也包括JUnit。总之,这些新的工具和旧的经典工具正在为分布式系统的发展提供新的SDK基石。
有关Mini-Mesos如何使用的例子,请参见Git上的Mesos/ ElasticSearch项目,更多详情参见Mini-Mesos。
原文链接:Mini-Mesos: What’s a Nice XPer Doing in a Company Like This?(翻译:李加庆)
原文发布时间为:2015-10-12
本文作者:YiGagyeong
本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Mini-Mesos:一个Mesos的测试基础框架