聊聊調度云服務
今天聊下調度,為什么說這個,主要是最近和人討論和服務和服務之間的功能分界,被追問AWS data pipeline、AWS Step Functions和AWS Batch的區別,甚至追問Migration和pipeline的分界。因此特別寫一篇文章說一說調度。
調度(scheduler),這個詞說高大上也高大上,說low也low,看你怎么理解。理解low的會認為這就是定時任務,說高大上的知道要做好里面的難度,怎么解決***任務沖突,***資源利用其實都是很困難的事情。
聊到正題,AWS datapipeline/AWS Step Functions/AWS Batch三個服務在AWS分類里面分布放在“計算”“分析”“應用程序服務”三個大類里面,說明這幾個服務完全都是一個層次的東西。
為什么會被人為沖突和重復呢,關鍵是這幾個服務看上去都像是調度服務,負責任務的安排。下面分布來看看幾個服務都是什么?
1. AWS data pipeline
https://aws.amazon.com/cn/datapipeline/?nc2=h_m1
這個是正經的大數據服務,EMR團隊負責孵化出來。最開始核心解決的問題就是EMR服務的任務調度和數據移動,后面擴展到把大數據的相關的各個服務串接起來,解決服務和服務之間的數據移動和任務調度。
支持的服務包括DynamoDB,RDS,Redshift,S3,EC2,EMR。解決就是這些服務的周期的任務調度和數據搬遷。
服務將任務統一抽象叫著Activity,收費也是按照使用的activity按需計費。
這個服務解決的場景就是大數據常見的ETL/數據集成場景,不過它只提供很少的數據轉換能力,大部分是客戶自己編寫任務(Activiy)然后上傳到服務中調度,去完成業務邏輯的轉換。
2. AWS Step Functons
https://aws.amazon.com/cn/step-functions/?nc2=h_m1
step functions是16年AWS revient大會新發布的服務,在這之前,AWS發布了一款AWS Lambda服務,Lambda服務是一個應用框架,使用者只需要編寫業務邏輯代碼片段(函數),放到框架中運行,而不用關心底層服務器的配置,實現了serverless,極大的簡化了簡單應用開發的門檻。
但是aws發現,當業務代碼片段越來越多的時候,就需要有一個工具來協調和編排業務邏輯之間的依賴關系,以及管理這些代碼片段(函數)的運行。這就誕生了step functions服務。
Step functions核心編排和調度的對象是Lambda服務商的邏輯代碼片段(函數),并提供可視化診斷能力,快速問題定位。
Step functions也是按需收費,這個收費是按照轉換次數來收費。(轉換是stepfunctions定義的一個概念,當您從應用程序工作流的一個步驟轉到下一個步驟時,您會在狀態之間進行轉換,我們將這一過程稱為狀態轉換。其實說白了,一個步驟到另外一個步驟,這個過程就是step functions幫你根據你定義的業務邏輯做的調度的過程,一次轉換就是stepfunctions幫你調度一次,然后就收你一次費用。)
去看這個step functions和AWS data pipeline內部調度原理其實是一樣的,核心的就是DAG狀態機,但是兩者調度的對象不一樣,data pipeline調度的是hadoop任務,這些任務運行本身至少是秒級以上,而step functions調度的對象是函數,毫秒級別的,所以具體實現的時候stepfunctions會要求輕量和高效很多,內部應該是通過事件來傳遞狀態,應該是全內存實現,不像datapipeline一樣持久化要求很高。
幫助中也有描述step functions的限制,是通過token bucket來維護服務的能力。
Some Step Functions API actions are throttled using a token bucket scheme to maintain servicebandwidth.
3. AWS Batch
AWS Batch調度的對象就更粗暴和簡單,主要是HPC(AWS都是EC2)。前面有寫過一篇HPC相關的博客,可以看看:云服務讓HPC死而復生。
AWS Batch實際解決的場景是傳統的金融,生物,視頻轉碼等,有很多自編寫的任務,需要HPC來完成,通過Batch可以簡化這些工作的實現,實現一些定時的調度。
AWS Batch和前面不同的核心區別是,step functons和datapipelie對資源都不可見,解決的是任務/函數的調度,這是因為底層的大數據框架或者lambda框架本身就是分布式框架,解決的就是資源的管理和分配。AWS Batch調度的對象是HPC,所以AWS Batch和HPC綁定很緊密,核心要解決的問題就是任務并行調度到各種HPC資源上,同時可以解決一些分布式的問題。AWS聲稱可以自動分布任務,推測只是根據配置簡單的做任務并行分布。
AWS Batch automatically provisions computeresources and optimizes the workload distribution based on the quantity andscale of the workloads.
這個服務本身定位為促進HPC的銷售,所以在AWS里面不收費。另外,AWS Batch 可與商用開源工作流引擎和語言集成 (如 PegasusWMS 和 Luigi),讓您能夠使用熟悉的工作流語言為批量計算管道建模。核心是解決客戶使用習慣問題。
AWS Batch調度的也是大顆粒任務,核心調度能力和Data pipeline有點類似,不過和各種HPC集成,以及對工作流語言的支持是其中的關鍵。
***簡單總結一下吧。三個服務的核心功能都是調度,一些基本的調度能力,以及狀態機是可以服用,但因為其調度的對象,核心場景不同。所以底層的實現機制存在差異以及主要的對接能力也不太一樣,產品形態,收費模式,以及工作側重點都不同。
【本文為51CTO專欄作者“大數據和云計算”的原創稿件,轉載請通過微信公眾號獲取聯系和授權】