軟體開發界吹起了DevOps風,為了提高程式品質以及部署的速度,紛紛導入持續交付 (Continuous Delivery,CD),eBay也不例外。日前eBay在一場研討會中,揭露了從導入持續整合(Continuous Integration,CI),到去年還推出了CIaaS(CI as a Services)供內部開發之用的歷程。eBay透露,這套CIaaS Live服務,每天可執行12,000次布建(Build),最多可同時執行4萬項工作。
在今年7月eBay和Paypel分家前,Paypal軟體工程師首席Soma Shekar Oruganti是這套CIaaS服務專案的主要推動者之一,他表示,這是eBay內部最大規模的持續整合專案。
但這不是eBay第一次導入CI,早在2011年,eBay資訊團隊就已向內部提供持續整合的服務,不過到了2014年,由於使用需求節節升高,為提高服務的穩定度以及不過,硬體資源效率,eBay資訊團隊被迫改變原本持續整合的基礎架構,建立了這個命名為CIaaS Live的高可用性雲端持續整合服務。
2014年4月時,eBay仍使用虛擬機器來執行持續整合服務,每一個VM只用來執行一個持續整合工具Jenkins服務主機。由於內部持續整合需求大增,負責PaaS團隊被迫改變持續整合架構,來提高資源的利用率,在去年6月開始,改以雲端服務搭配容器(Container)的形式提供持續整合功能。到了11月,Soma Shekar Oruganti說,在CIaaS Live上同時執行的工作已達800項,約可節省10倍的運算資源,在之前整個持續整合的系統需要24,000個CPU核心、54TB的記憶體以及180TB硬碟,但現在只要2,400個CPU核心、7.2TB的記憶體以及18TB硬碟。
工作排程系統Marathon從資料中心運算資源抽象化工具Apache Mesos取得現有的運算資源後,發送命令給Mesos Master,指派Mesos Slave建置持續整合工具Jenkins Master。(圖片來源/eBay)
持續整合工具Jenkins Master建置完成後,根據資料中心運算資源抽象化工具Apache Mesos取得現有的運算資源,發送命令給Mesos Master,指派Mesos Slave建置持續整合工具Jenkins Slave。(圖片來源/eBay)
資料中心抽象化靠Mesos,運算資源省10倍
能支撐如此大量持續整合運算量的系統,必須歸功於運算資源抽象化工具Apache Mesos,它被稱為分散式系統的核心(A Distributed System Kernel),可以統一管理資料中心裡多臺伺服器的運算資源,像是CPU、記憶體、硬碟空間甚至是連接埠,再以API的方式提供這些資源給需要的應用程式像是Hadoop、Spark以及Elastic Search等。
在eBay的CIaaS Live架構中,Mesos部署在內部本來就存在的OpenStack之上,而為了讓Jenkins方便集中管理,Jenkins只部署在Mesos上,並由工作排程系統Marathon負責控制工作的進行。整個CIaaS Live的Mesos叢集設定從Mesos的Slave開始,每個Slave會向Master廣播(Advertise)各自擁有的運算資源,例如Slave 1擁有4 CPU、64GB記憶體以及500GB硬碟,Slave 2有4 CPU、128GB記憶體以及600GB硬碟,而Slave 3有8 GPU、12GB記憶體和250GB硬碟,Mesos Master會將這些可用的運算資源呈交給Marathon。
當有1個需要建立Jenkins Master的需求在工作佇列中,Marathon根據演算法挑選一個從Mesos Master呈交的運算資源,假設這個建立Jenkins Master的任務被指派給Slave 1,此時Mesos Master便會負責在Mesos Slave1啟動Jenkins Master,並由Jenkins Master控制接下來Jenkins持續整合的運算資源調度。
Jenkins Master建置完成後,當有使用者提出持續整合服務的請求,Jenkins Master會根據Mesos Master所呈交現有的運算資源,挑選一個Mesos Slave建立Jenkins Slave執行持續整合的請求,例如是一項需要4GPU、512MB記憶體和3GB硬碟的工作,而Jenkins Master挑選了Slave 3執行任務,而Slave 3切分現有運算資源承接該任務後,將還剩4GPU、11.5GB記憶體和247GB硬碟的運算資源,這些資訊會被回傳給Mesos Master,以供其他任務繼續使用,因此1個Mesos Slave可以接受多項任務指派,直到運算資源耗盡。
只有Master節點需維持高可用
eBay整個持續整合的叢集,使用Apache Zookeeper作為Master的管理工具,Zookeeper是一套集中式的服務,專門管理規模龐大的開源分散式系統,用來維護設定資訊、命名以及分散式系統的同步等工作,以建立高可靠度的服務,因此在持續整合需要高可用性的服務,也用Zookeeper來管理支撐CIaaS Live中重要的Mesos。
為了達到高可用性以及高容錯性,持續整合服務1次啟動,至少會有3臺Mesos Master,這3臺伺服器開啟完成後,便會一一向Zookeeper註冊,並選出一臺Master中的指揮,所有對於Mesos的工作請求,都會先導向Mesos Master的指揮,而這樣的運作方式可以容許同時存在多臺的Mesos Master,以達高可用性的設定。
不只Mesos要達高可用性,連Marathon跟Zookeeper也是,Marathon採用類似Mesos Master的部署方式,而Zookeeper則有內建高可用性的設定。不過,Soma Shekar Oruganti表示,需要高可用性要求的只有Master,就以Mesos為例,只有Mesos Master需要為高可用性做準備,而Slave對於工作來說都是一種資源,可依據需求而增減。不過,Soma Shekar Oruganti表示,由eBay內部隨著持續整合的需求量上升,Marathon後期已無法應付龐大的工作量,因此在2015年2月的時候,他們將Marathon更換成能夠管理更大型叢集的工作排程系統Apache Aurora。
eBay改變持續整合服務的架構後,CIaaS Live除了比之前的方式更節省運算資源外,Soma Shekar Oruganti說,因為他們不再使用虛擬機器安裝Jenkins,而是將Jenkins裝於Docker Container,並且受惠於Mesos管理運算資源的優點,當1個持續整合的副本當掉,重新建置副本的速度快上不少。
Mesos如何廣播資源以及分派工作 |
1.資料中心運算資源抽象化工具Apache Mesos的各Slave節點向主要Mesos Master廣播各自擁有的運算資源 2.Mesos Master向工作排程系統Marathon呈交可用運算資源 3.Marathon透過Mesos Master指派工作給Mesos Slave1 4.Mesos Master命令Mesos Slave1執行Marathon交付之工作 5.Mesos Master呈交可使用的運算資源給持續整合工具Jenkins的Master節點 6.Jenkins透過Mesos Master指派工作給Mesos Slave3 7.Mesos Master命令Mesos Slave3執行Jenkins交付之工作 資料來源:eBay,iThome整理,2015年09月 |