優化Marathon:Part 3


本系列文章分爲三個部分,咱們將回顧過去的三年,總結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

D2iQ(原Mesosphere)是世界領先的企業級雲平臺供應商,助力企業實現開源和雲原生創新,交付智能化企業級生產運營體驗。D2iQ是Mesos早期開發和企業級部署的頂級專家,也是企業和網絡規模環境中先進分佈式計算需求的領導權威,在大規模分佈式計算方面擁有12年的豐富經驗,是全球惟一一家同時提供Mesos和Kubernetes的總體解決方案的公司。D2iQ經過企業級的技術、培訓和專業服務,爲企業領航並加速雲原生轉型落地。


D2iQ總部位於美國舊金山,在中國和歐洲設有分公司。目前,D2iQ已完成D輪融資,投資者包括Andreessen Horowitz、HPE、Khosla Ventures、Koch Disruptive Technologies、微軟和T. Rowe Price Associates。D2iQ已爲多家美國《財富》 50強、中國聯通、三一重工、一汽集團等全球知名企業提供雲原生創新解決方案。



點擊「閱讀原文」,獲取Mesosphere DC/OS Platform解決方案詳情

本文分享自微信公衆號 - D2iQ(d2iq_apac)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索