目前在線上應用,尤其是無狀态的線上應用領域,docker容器已經成為執行層的事實标準,有大量雲服務商提供容器雲服務。但在離線計算領域,還很少有服務商提供這樣的能力。
但離線計算在實際生産中使用很廣,小到一個腳本任務,大到大資料分析;而且離線計算對資源隔離、環境隔離的需求更高,這正是docker容器的優勢。是以,阿裡雲容器服務抽象出離線計算的基本模型,推出了基于docker容器的離線計算功能。其核心功能是:
作業編排
作業排程與生命周期管理
存儲與日志等功能的內建
首先介紹一下離線計算的基本概念。下表中列出了離線與線上應用的概念對比。
概念
離線應用
線上應用
容器
任務執行單元
服務的執行單元
運作曆史
任務出錯重試的執行曆史
無
服務(任務)
一個特定的功能,可以分割成若幹個容器來執行
一組功能相同的容器
應用(作業)
若幹個任務的組合
若幹個服務的組合
簡言之,一個離線作業包含若幹個任務,每個任務可以由若幹個容器來執行,每個容器可以有多個運作曆史;而一個線上應用包含若幹個服務,每個服務可以有若幹個容器同時服務。
跟線上應用一樣,我們使用dockercompose來描述和編排作業。dockercompose支援docker的絕大部分功能,比如:
cpu、記憶體等資源限制
資料卷(volume)
環境變量與标簽
網絡模型、端口暴露等
除此之外,阿裡雲容器服務還擴充了以下功能:
容器數量:每個任務分成多少個容器
重試次數:每個容器重試多少次
移除容器:容器運作完後是否删除,可選政策是remove_finished(删除完成的容器)、remove_failed(删除失敗的容器)、remove_all(删除全部容器)、remove_none(不删除)
dag模型的任務依賴:同一個作業的任務之間可以有依賴關系,被依賴的任務會先執行。
下面是一個離線作業的dockercompose示例。
需要注意的幾點是:
隻支援version2的docker compose
需要在作業級别添加标簽<code>aliyun.project_type: "batch"</code>,沒有該标簽或标簽值不為batch則認為是線上應用
不管restart設定為什麼值,都會被修改為no
用<code>aliyun.depends</code>标簽指定依賴,可以依賴多個任務,用<code>,</code>分隔
<code>aliyun.retry_count</code>預設值為3
<code>aliyun.remove_containers</code>預設值為remove_finished
容器狀态由容器的運作及退出狀态決定;任務狀态由該任務中所有容器的狀态決定;作業狀态由該作業的所有任務決定。
運作中(running):容器在運作
完成(finished):容器退出且exitcode==0
失敗(failed):容器退出且exitcode!=0
運作中(running):有容器在運作
完成(finished):所有容器都完成了
失敗(failed):有容器失敗次數超過給定值
運作中(running):有任務在運作
完成(finished):所有任務都完成了
失敗(failed):有任務失敗了
上述狀态都可以通過api擷取,友善使用者自動化運維。
容器之間、任務之間會有資料共享和交換,共享存儲可以解決這一問題。比如hadoop上跑mr作業,是通過hdfs來交換資料的。在容器服務中,可以使用三類共享存儲,其特性及應用場景對比如下:
存儲
優點
缺點
适用範圍
ossfs資料卷
跨主機共享
讀寫、ls性能低;修改檔案會導緻檔案重寫
共享配置檔案;附件上傳
阿裡雲nas資料卷
跨主機共享;按需擴容; 高性能、高可靠性;挂載速度高
成本略高
需要共享資料的重io應用,如檔案伺服器等;需要快速遷移的重io應用,如資料庫等
使用者自己內建成三方存儲,如portworx
将叢集内的雲盤虛拟成共享的大磁盤;性能高;snapshot、多拷貝
需要一定運維能力
同nas
具體使用資料卷的幫助,可以參考下列文檔:
<a href="https://yq.aliyun.com/articles/7581">在阿裡雲容器服務上使用oss資料卷(volume)</a>
<a href="https://yq.aliyun.com/articles/52523">在阿裡雲容器服務中使用nas(nfs)資料卷</a>
<a href="https://yq.aliyun.com/articles/8307">用oss資料卷實作wordpress附件共享</a>
日志和監控是分析離線作業的重要工具。阿裡雲容器服務內建了阿裡雲sls與雲監控功能,隻要在編排模闆中添加一個标簽,就可以将日志收集到sls,将容器的cpu、記憶體等資料收集到雲監控。具體使用友善請參考下面的文檔,這裡不再細寫。
<a href="https://help.aliyun.com/document_detail/26036.html">內建日志服務</a>
<a href="https://help.aliyun.com/document_detail/32471.html">容器監控服務</a>
第二步,選擇應用->建立應用->使用模闆建立,填入上文中的編排模闆,并建立應用。
第三步,選擇應用->您的應用,可以檢視應用的運作狀态,如下圖所示。
