Mini-Mesos:一個Mesos的測試基礎框架

軒墨發表於2017-09-20
本文講的是Mini-Mesos:一個Mesos的測試基礎框架【編者的話】Mini-Mesos建立在思科Intercloud服務與Container Solutions服務合作的基礎上,它是基於 Apache License 2.0版本下的開源專案。本文主要介紹了在容器解決方案與極限程式設計(XP)之間所存在的一些聯絡,以及如何在發展集容器化應用和Mesos框架的同時還開展TDD的核心XP實踐和持續整合,介紹了用於構建Mesos框架的測試工具Mini-Mesos。

大多數人知道我是通過極限程式設計(XP)和XP相關的東西如:物件導向程式設計,測試驅動開發,測試資料管理和高效系統構建。對於一些人來說,我們所做的工作在容器解決方案和XP之間的聯絡似乎很弱或根本不存在。但是,仔細想一想,你會發現這兩者之間的聯絡是很強的。

極限程式設計所講都是關於縮短反饋迴路的,這裡是典型的洋蔥圖:
XP-feedback.gif


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的測試基礎框架


相關文章