使用Apache Mesos 打造分布式資源調度系統

2020-11-28 開源中國

Netflix使用Apache Mesos運行了一系列批處理、流式處理,以及服務類型的工作負載。兩年多來,我們創建了層出不窮的用例,例如實時異常檢測、批處理作業的訓練和模型構建、機器學習編排,以及基於Node.js的微服務。最近發布的Apache Mesos 1.0意味著這項技術已經成熟,相比我們首次使用該服務時已經有了巨大的改進。

我們最初使用Apache Mesos的動力主要在於該技術能夠將來自同一個EC2實例的資源更為細化地分配給不同規模的任務。如果不使用Mesos或其他類似的資源管理器,將無法為數量日益增加的實例進行更細化的分配,導致無法獲得令人滿意的利用率,或只能自行開發類似於Mesos的技術,至少也要開發出其中的部分功能。

越來越多的流式處理和批處理作業開始使用容器,這也推動了基於Mesos的資源調度技術的使用。最近開發者已經可以從基於Docker的容器通過Mesos集群獲得一系列服務類型的工作負載。本文將概括介紹Netflix工程團隊使用Apache Mesos打造的一些項目。我們將介紹該技術所滿足的不同用例,以及每個用例是如何高效使用這種技術的。有關每個項目的進一步細節請參閱下文給出的博文連結。

使用Apache Mesos打造雲端原生調度機制

為了從不同EC2實例為任務分配資源,我們需要一種能對可用資源進行調度,並能在分布式EC2實例上啟動和監控任務的資源管理器。Apache Mesos可將要使用集群的「框架」的資源分配,與框架任務的資源調度區分處理。當Mesos確定要將多少資源分配給框架後,將由框架的調度器決定在什麼時候將哪些資源分配給哪個任務。這樣的調度器是一種相當簡單的API,因此也能更專注於調度邏輯,並對分布式系統中不可避免出現的故障做出回應。藉此用戶可以針對不同用例編寫不同調度器,不像Mesos那樣為所有用例使用一個統一的調度器。下圖來自Mesos文檔,展示了「框架1」收到「代理1」的指令啟動兩個任務的過程。

一段時間來,Mesos社區已經出現了多種針對不同用例的調度器,並為用戶提供了相應的API。

Netflix在AWS EC2彈性雲中運行了多個微服務。在原生雲環境中運維Mesos集群要求我們必須確保除了與數據中心內部運維類似的任務外,調度器還能同時處理另外兩方面內容:運行任務的代理壽命更短暫,以及Mesos代理集群具備根據需求變化自動伸縮的能力。另外我們所處理的用例需要實現一種比First fit類型的分配更先進的資源調度機制。例如按照CPU、內存,以及網絡帶寬的用量將多個任務裝箱(Bin packing)到不同代理,藉此實現資源碎片最小化。裝箱還可以幫助我們釋放儘可能多的代理,在不影響運行中任務的前提下終止空閒代理,讓代理集群的擴張速度放緩。

為找出現有調度器在此類能力方面的缺失,去年我們開發了一種名為Fenzo的調度庫。Fenzo可以根據需求自動縮放代理集群,並根據由健康標準(Fitness criteria)和約束組成的多種調度目標為任務分配資源。這些健康標準和約束可通過插件進行擴展,並具備少量內建的通用實現,例如為了實現高可用跨越EC2可用區對作業進行任務裝箱和分散。JVM上運行的任何Mesos框架都可使用Fenzo Java庫。

Netflix對Mesos的運用

目前我們通過Apache Mesos集群運行了三個項目。

Mantis

Mantis是一種以原生雲服務方式運行的反應式流處理平臺,主要側重於運維數據流的處理。Mantis包含多種不同用例,例如實時儀錶盤、預警、異常檢測、衡量指標生成,以及流數據的即席交互式探索。我們使用Mantis主要是為了簡化團隊成員訪問實時事件和以此為基礎構建的計費應用程式的過程。目前Mantis的事件流處理能力已高達每秒800萬條事件,可不間斷運行數百個流處理作業。我們有一個此類作業主要側重於視頻內容的處理,可以針對內容提供細化的洞察,例如巴西地區iPad上播放紙牌屋第四季第一集時遇到了問題。這一功能需要不間斷追蹤數百萬不同的數據排列組合方式。

Mantis平臺包含一個主(Master)集群和一個代理(Agent)集群。用戶可以將流處理應用程式以作業的形式提交,並在代理集群內一個或多個工作進程(Worker)上運行。主集群會使用Apache Mesos中包含的Fenzo調度庫優化作業工作進程的資源分配。這種分配操作的目標之一在於將需要持續不間斷運行的流處理作業與只需要短時間運行的交互式作業分布到不同代理上,這樣當短時間運行的作業運行完畢後,即可收縮代理集群的規模。下圖展示了Mantis的體系結構。來自不同作業的工作進程可以通過基於Cgroups的資源隔離機制在同一個代理上運行。

Titus

Titus是一種Docker容器作業管理和執行平臺。最初Titus主要用於實現包含算法訓練(類似於視頻推薦、A/B測試單元體分析等任務)的批處理作業,以及需要每小時運行一次的即席報表和分析作業。最近為了提供一致的本地開發體驗以及實現更細化的資源管理,Titus開始為服務類型的作業(Netflix微服務)提供支持。Titus首個服務類型的用途是使用伺服器端的NodeJS進行API的重構。

上述Titus體系結構示意圖展示了使用Fenzo從Mesos代理分配資源的主節點。Titus可與Netflix微服務和AWS生態系統實現緊密集成,包括與服務發現、基於軟體的負載平衡、監控,以及我們的CI/CD管線、Spinnaker等技術進行集成。在Mesos中編寫自定義執行器的能力使得我們能夠輕鬆地對容器運行時進行優化,使其與生態系統的其他部分更為匹配。

Meson

Meson是一種通用的工作流編排和調度框架,主要可用於管理機器學習管線。

Meson主要適用於對CPU、內存,以及磁碟空間等資源有著不同要求的作業所組成的異構環境。它可以支持通過一個共享集群運行Spark作業和其他批處理作業。在基於Cgroups的隔離機制幫助下,代理上的不同任務將使用相互隔離的資源運行。Meson的調度器會根據圖表(Graph)評估任務的就緒情況,並通過Mesos提供的資源啟動已經就緒的任務。失敗處理措施包括重新啟動失敗的任務,以及自動終止被確定為已經出錯的任務。

上述示意圖展示了Meson的體系結構。Meson團隊目前正在著手使用Fenzo調度庫增強其調度能力。

Apache Mesos的繼續完善

在我們持續完善Mantis、Titus和Meson項目的過程中,Apache Mesos提供了穩定、可靠、可伸縮的資源管理平臺。我們通過開源的Fenzo以及在MesosCon大會上分享創意等方式參與到了Mesos的社區貢獻中。您可以在即將舉辦的MesosCon Europe 2016大會上與我們交流,或查看我們之前參與2014、2015年,以及今年上半年活動的總結(學到的經驗和Meson)。

對於這些項目,我們的未來計劃包括增加SLA(服務級別協議,例如為服務和批處理形式的作業提供不同的容量擔保),對代理和容器的安全加固,改善運維效率和能見度,以及對更廣泛用例的支持。為了取得更長足的進展,目前我們正在圍繞Mesos、Fenzo以及我們的框架開展一些非常激動人心的項目。


英文原文:Distributed Resource Scheduling with Apache Mesos

中文譯文:InfoQ

相關焦點

  • Apache Airflow 2.0 發布,Airbnb 開源的調度系統
    Apache Airflow 2.0.0 已正式發布,Airflow 是一個靈活、可擴展的工作流自動化和調度系統,可編集和管理數百 PB 的數據流。
  • Apache DolphinScheduler 1.3.2 發布,性能提升 2~3 倍
    引言大數據任務調度作為大數據建設中的核心基礎設施,在經過社區用戶們長期的使用中,不少用戶對調度也提出了很多新的要求,為此,Apache DolphinScheduler
  • Apache Mesos 0.23.0 發布,集群管理器
    utility to declare a single, variadic 'join' function instead of several separate declarations of various discrete arities[MESOS-1991] - Remove dynamic allocation from Option[MESOS-2023] - mesos-execute
  • Apache分布式日誌系統:高通量、低延遲
    網絡設備、系統及服務程序等,在運作時都會產生一個叫log的事件記錄;每一行日誌都記載著日期、時間、使用者及動作等相關操作的描述。它存在於大家每天的工作中,是一組只追加,嚴格有序的記錄序列。日誌是一種很有效的數據結構,可用來解決很多分布式系統的問題。
  • 資源管理與調度系統Yarn
    在這種情況下,由於每種類型作業使用的資源量不同,有些集群的利用率通常不高,而有些則滿負荷、資源緊張。為了提高伺服器資源利用率、解決資源共享問題,一種方法是把他們合併到一個大集群,但這同時暴露了其它問題,比如一臺擁有32G內存的伺服器同時部署了HBase和Spark,HBase的RegionServer啟動時佔用了20G內存,Spark執行某個任務時也需要使用20G內存,但發現沒有足夠的內存資源使用了。
  • Apache SkyWalking(Incubating) 5.0.0-alpha 發布
    5.x版本系列的首次發布,系統迎來了全新的UI和功能特性。現代化的UI,後端複雜的分析能力,展現了從3.x到5.x的跨越,以及技術迭代。新版本從7個維度可視化剖析分布式系統的運行情況1. 幫助從單個實例的角度查看系統的運行情況。可以通過搜索框查詢到任何一個在運行的進程。
  • Apache Hadoop 3.0.0 GA 正式發布,要求 Java 8
    請在測試環境中使用。更多關於YARN Timeline Service v.2的知識請參見http://hadoop.apache.org/docs/r3.0.0-beta1/hadoop-yarn/hadoop-yarn-site/TimelineServiceV2.htmlShell腳本重寫Hadoop的Shell腳本被重寫解決了之前很多長期存在的bug,並且引入了一些新的特性。
  • 基於神經網絡的分布式交互指揮系統的方案設計
    基於此,指揮系統本質上是一個信息交互系統和決策執行系統,必須滿足各級指揮的根本需求:精確、簡單、實時、便捷、高效。 二、核心需求的技術實現 基於神經網絡的分布式交互指揮系統 仁光科技以全球最先進的智能交互技術為主,通過融合現代科技,推出了「基於神經網絡的分布式交互指揮系統」。實現了分布交互決策、智能輔助運籌及指揮內容數碼化代碼化。
  • 大數據基礎知識:Hadoop分布式系統介紹
    Hadoop是Apache軟體基金會下一個開源分布式計算平臺,以hdfs(Hadoop Distributed File System)、MapReduce(Hadoop2.0加入了YARN,Yarn是資源調度框架,能夠細粒度的管理和調度任務,還能夠支持其他的計算框架,比如spark)為核心的Hadoop為用戶提供了系統底層細節透明的分布式基礎架構。
  • 通用設計:指揮調度系統——複雜行動的大腦與神經
    設計目的主要用於重大事件行動、複雜情況處置等情景的推演及調度,包括訓練情境及實際指揮情境。運用信息化手段輔助組織實施和控制演練,為行動方法研究、行動方案預案推演提供手段。同時可用於實際行動的指揮調度。建設目標系統按照「導、控、評、教、演、訓」等實際訓練要求進行頂層設計,明確指揮調度訓練使用適應性指標範圍,明確「導、控、評、教、演、訓」各類技術要求使用指標。
  • 這群螞蟻找不到北了,華為:我來調度一下
    而同樣的道理,計算機集群有時也會面臨這種問題,某個節點出了差錯,整個集群就無法高效運轉,這時就需要一個調度系統。在計算機中,調度就是一種將任務分配給資源的方法。無論是在單機系統還是分布式集群當中,調度器都是非常核心的組件。
  • 分布式電源系統的的供電方式應用及發展趨勢
    分布式電源系統的的供電方式應用及發展趨勢。近年來,我國各地分布式電源系統發展迅速。分布式電源的出現,是對傳統UPS供電技術的探索和創新,能夠徹底解決傳統模式建築中電源容量不足、電源利用率低,改造困難等問題,最大程度降低數據中心的建設成本和運營成本。
  • 一文理解分布式架構
    在分布式數據系統中,用戶感覺不數據是分布的,即用戶不須知道關係是否分割,有無副本,數據存在於那個站點以及事物在哪個站點上執行。簡單來說:在一個分布式系統中,一組獨立的計算機展現給用戶的是一個統一的整體,就好像是一個系統似的。分布式系統作為一個整體對用戶提供服務,而整個系統的內部的協作對用戶來說是透明的,用戶就像是指使用一個mysql 一樣。
  • 分布式電源系統DPS的特點、優缺點及前景分析
    分布式電源系統DPS的特點DPS分布式電源產品是為機房伺服器等設備提供不間斷供電系統的轉換電源設備,兩路市電輸入,內置大容量電池組,確保為伺服器提供不間斷供電。DPS分布式電源系統不再使用統一的直流電源給系統供電,而是對系統中不同設備、不同電路板、甚至對同一電路板上不同的電路採用不同的電源供電。系統中低頻電路和高頻電路,小電流負載和大負載供電線路完全分離。
  • 一步一圖,帶你了解分布式架構的前世今生
    如上圖所示,分布式系統作為一個整體對用戶提供服務,而整個系統的內部的協作對用戶來說是透明的,用戶就像是指使用一個mysql 一樣。描述:使用集群是系統解決高並發、海量數據問題的常用手段。通過向集群中追加資源,提升系統的並發處理能力,使得伺服器的負載壓力不再成為整個系統的瓶頸。(5)資料庫讀寫分離
  • Apache Eagle:分布式實時 Hadoop 數據安全方案
    Apache Eagle提供一套高效分布式的流式策略引擎,具有高實時、可伸縮、易擴展、交互友好等特點,同時集成機器學習對用戶行為建立Profile以實現實時智能實時地保護Hadoop生態系統中大數據的安全。背景隨著大數據的發展,越來越多的成功企業或者組織開始採取數據驅動商業的運作模式。
  • 引領數據創新,星環科技分布式資料庫KunDB亮相數據技術嘉年華
    趙志強主要從介紹星環KunDB產品、KunDB如何使用分布式技術解決分庫分表方案的核心痛點、KunDB上私有雲的技術總結、KunDB主要開發路線四個方面做有關主題演講,與參會人員分享星環科技近些年在分布式資料庫上所做的努力和貢獻,並希望未來將分享更多相關前沿技術。
  • Apache RocketMQ 4.4.0 發布
    這樣,Topic 資源之間也就具備了一定的隔離性,用戶無法訪問沒有權限的 Topic 資源。同時,開源用戶使用帶有 ACL 鑑權信息的開源客戶端可以無縫對接雲 MQ,而無需對業務系統進行任何的其他改造。
  • 除了尋找梅森素數,分布式技術還能做這些!
    可見,GIMPS不僅激發了人們對梅森素數尋找的熱情,作為全世界第一個基於網際網路的分布式計算項目,它也充分證明了分布式技術對於人類發展的重大意義。分布式應用除了在GIMPS項目中致力於尋找最大的梅森素數之外,還在其他領域中發揮著巨大的作用,例如: RC-72(密碼破解)系統、尋找對抗癌症的有效藥物、SETI@home在家尋找外星文明等等。