大資料/監控的實用DevOps
大資料技術已成為學術界和工業界日益關注的焦點。這些技術使企業能夠從其可用資料中提取有價值的見解,因此越來越多的中小企業對使用此類技術表現出越來越濃厚的興趣。用於處理大量資料的分散式框架,例如Apache Hadoop[1]、Spark[2]或Storm[3]越來越受歡迎,並且基於它們開發的應用程式也越來越普遍。然而,開發滿足業務關鍵型雲應用程式預期的高質量標準的軟體對於中小企業來說仍然是一個挑戰。在這種情況下,模型驅動開發 (MDD) 正規化和流行的標準(例如 UML、MARTE、TOSCA[4])對解決這一挑戰寄予厚望。在開發大資料應用程式期間,監控每個應用程式版本的效能非常重要。獲得的資訊可供軟體架構師和開發人員用來跟蹤已開發應用程式隨時間的演變。監控也有助於確定影響不同應用程式版本質量的主要因素。在整個開發階段,執行的應用程式在記錄資訊的詳細程度方面往往更冗長,以便開發人員可以深入瞭解已開發的應用程式。由於日誌的冗長性,資料密集型應用程式會產生大量監控資料,這些資料需要收集、預處理、儲存並提供高階查詢和視覺化功能。很明顯,需要一個可擴充套件、高可用且易於部署的平臺來監控多個大資料框架。該平臺可以收集資源級指標(例如 CPU、記憶體、磁碟或網路),以及從 Apache HDFS、YARN、Spark 和 Storm 收集的框架級指標。
在所有開發環境中,尤其是在 DevOps 環境中,基礎設施和應用程式效能監控非常重要。它允許開發人員檢查當前效能並評估潛在的效能瓶頸。大多數監控工具和服務側重於提供特定應用程式和/或平臺的獨立檢視。這意味著,如果 DIA 基於多個平臺,則很可能一個監控解決方案無法支援所有平臺。DMon 的設計使其能夠監控最常見的大資料平臺以及系統/基礎設施指標。這樣,在開發過程中,只有一個監控解決方案能夠處理所有監控需求。
當然,平臺監控是不夠的,大多數情況下開發人員需要了解其應用程式的效能。DMon 可以輕鬆擴充套件以透過JMX或自定義日誌格式收集指標。然後,可以使用 DMon 查詢和視覺化所有生成的指標。
目前市場上有很多工具和服務致力於監控不同的雲部署資源和服務。大資料服務也不例外,以下是一些使用的解決方案:
- Hadoop 效能監控 UI[5]提供了一個 Hadoop 內建解決方案,用於快速查詢效能瓶頸並提供可能針對更好效能進行調整的配置引數的視覺化表示。基本上,它是一個輕量級的 Hadoop 伺服器監控 UI。其主要優勢之一是 Hadoop 發行版中的可用性和易用性。另一方面,它在效能方面被證明是相當有限的。例如,每個任務在 gc 中花費的時間相當高。
- SequenceIQ[6]提供了一個用於監控 Hadoop 叢集的解決方案。SequenceIQ 提出的用於監控的架構基於 Elasticsearch[7]、Kibana 和 Logstash。該架構的主要目標是在監控工具和現有的 Hadoop 部署之間實現清晰的分離。為此,使用了三個 Docker 容器。簡而言之,監控解決方案由客戶端和伺服器容器組成。伺服器容器負責實際的監控工具。在此特定部署中,Kibana 用於視覺化,Elasticsearch 用於合併監控指標。透過 Elasticsearch 的功能,可以水平擴充套件和叢集多個監控元件。客戶端容器包含要監控的工具的實際部署。此例項包含 Logstash、Hadoop 和 collectd 模組。Logstash 作為客戶端連線到 Elasticsearch 叢集並在那裡儲存已處理和轉換的指標資料。基本上,此解決方案由一系列用於監控不同層級不同指標的工具組成。此解決方案的主要優勢之一是能夠輕鬆地向系統新增和刪除不同的元件。此架構的另一個有趣方面是能夠輕鬆地從工具中提取不同的資訊。
- Datastax[8]提供了一個解決方案 OpsCenter,可以將其整合以監控 Cassandra[9]安裝。使用 OpsCenter,可以監控 Cassandra 例項的不同引數。它還可以處理其執行的實際機器提供的許多其他引數。OpsCenter 公開了一個互動式 Web UI,允許管理員向部署中新增或刪除節點。OpsCenter 提供的一個有趣功能是自動負載平衡。為了將 OpsCenter 與其他工具和服務整合,提供了開發人員 API。
DICE 監控平臺 (DMon)[10]架構被設計為一個 Web 服務,它能夠部署和管理多個子元件,這些子元件又能夠監控大資料應用程式和框架。與其他監控解決方案相比,DMon 旨在提供儘可能多的有關大資料框架子元件當前狀態的資料。這一意圖帶來了許多傳統監控解決方案中不存在的技術挑戰,因為提供近乎即時的細粒度指標需要一個系統,該系統應具有高可用性以及易於擴充套件性。傳統上,Web 服務是使用單體架構構建的,其中系統的大多陣列件都在單個程序(傳統上是 JVM)中執行。這種型別的架構具有一些關鍵優勢,例如:部署和網路非常簡單,而擴充套件此類系統需要在負載均衡器例項後面執行服務的多個例項。另一方面,這種單體架構有一些嚴重的限制,這將直接影響 DMon 的開發。首先,對一個元件的更改可能會對應用程式看似無關的區域產生不可預見的影響,因此新增新功能或任何新開發在時間和資源方面都可能代價高昂。其次,各個元件不能獨立部署。這意味著,如果只需要服務的特定功能,則無法將其解耦和單獨部署,從而阻礙了可重用性。最後,即使元件被設計為可重用的,它們也往往更注重可讀性而不是效能。
考慮到單體架構的這些侷限性,我們決定為DMon使用所謂的微服務架構,該架構在大型網際網路公司中被廣泛使用。這種架構用輕量級服務的分散式系統替換了單體服務,這些服務在設計上是獨立的並且專注於狹窄的領域。這些服務可以單獨部署、升級和擴充套件。由於這些微服務是松耦合的,因此它更好地實現了程式碼重用,而對單個服務的更改不應該需要更改其他服務。整合和通訊應使用HTTP(REST API)或RPC請求進行。我們還想將相關的行為分組到單獨的服務中。這將產生高內聚性,使我們能夠透過僅修改或更新一項服務而不是多項服務來修改整個系統行為。DMon使用REST API在不同服務之間進行通訊,請求有效負載編碼為JSON訊息。這使得建立同步或非同步訊息變得更加容易。

該圖顯示了DMon平臺的整體架構,它將與異常檢測和跟蹤檢查工具一起成為lambda架構的一部分。為了建立一個可行的lambda架構,我們需要建立三層:速度層、批處理層和服務層。Elasticsearch將代表服務層,負責載入收集的監控資料的批處理檢視,並使其他工具/層能夠在其上進行隨機讀取。速度層將用於檢視最近的資料並在查詢函式中表示它。在異常檢測的情況下,這意味著使用無監督學習技術或使用來自批處理層的預訓練模型。批處理層需要對儲存在Elasticsearch中的資料集的大部分進行任意函式計算。這意味著執行長時間執行的作業來訓練預測模型,然後可以在速度層上例項化這些模型。然後,所有訓練好的模型都將儲存在服務層中,並透過DMon查詢進行訪問。平臺的核心元件是Elasticsearch,用於儲存和索引收集的資料,以及Logstash,用於收集和處理日誌檔案資料。Kibana伺服器提供了一個使用者友好的圖形使用者介面。構成DMon的主要服務如下:dmon-controller、dmon-agent、dmon-shipper、dmon-indexer、dmon-wui和dmon-mas。這些服務將用於控制核心和節點級元件。
大資料技術正在不斷發展。因此,任何監控解決方案都必須跟上不斷變化的指標和指標公開系統。例如,DMon能夠監控當前正在使用的最常見的平臺,但是尚未支援Apache Flink等新平臺。
此外,DMon已經支援一些基本的資料預處理,例如平均、視窗和過濾,未來版本可能需要其他操作。資料匯出格式也是如此。
DMon已在DICE當前支援的所有大資料平臺上進行了測試。這些包括
- Apache Yarn(包括HDFS)
- Apache Spark(1.6.x和2.x.x版本)
- Apache Storm
- Cassandra
- MongoDB
除了這些平臺之外,DMon還能夠透過collectd收集各種系統指標。簡而言之,它支援所有collectd 支援的指標。在開發過程中,應用程式指標在某種程度上比平臺指標更重要,因此,DMon可以輕鬆擴充套件以透過Logstash過濾器外掛支援任何所需的日誌或指標格式。
需要說明的一點是,為使用多個支援平臺的DIA收集的指標可以根據接收到的時間戳輕鬆聚合和匯出。例如,如果我們有一個使用Spark的DIA,而Spark又執行在Yarn和HDFS之上,則DMon能夠顯示上述平臺在任何給定時間範圍內的所有指標。
DICE監控平臺是一個分散式、高可用系統,用於監控大資料技術以及系統指標。將DMon的目標與DICE的願景相一致,即整合模型驅動開發和DevOps,以實現高質量資料密集型應用程式的快速開發。
DMon在多個層面實現了自動化:監控叢集節點上軟體元件的部署、監控平臺本身的輕鬆管理,或基於收集的資料自動建立視覺化。由於與DICE部署服務(基於Cloudify和Chef cookbook)緊密整合,軟體工程師/架構師只需要在DDSM模型或TOSCA藍圖中註釋相應的節點為可監控節點,部署服務就會在選定的節點上安裝和配置代理,以便DIA部署到叢集的那一刻,執行時資料就會流入DMon平臺,而無需終端使用者進行任何手動干預。
該平臺採用微服務架構設計,易於部署和操作,適用於異構分散式雲環境。我們報告了使用Vagrant指令碼在Flexiant Cloud Orchestrator和OpenStack上成功部署的情況。
這項工具的工作突出了在DevOps環境中對專業監控解決方案的需求。使用輕量級但高吞吐量的分散式監控解決方案,能夠跨廣泛的大資料服務收集數千個指標,這一點至關重要。在處理開發中的應用程式的初步版本時,這種重要性更加明顯。像DMon這樣的監控解決方案可以提供應用程式版本當前效能的出色概覽。
- ↑ http://hadoop.apache.org/
- ↑ https://spark.apache.org/
- ↑ http://storm.apache.org/
- ↑ https://www.oasis-open.org/committees/tosca/
- ↑ https://www.datadoghq.com/blog/monitor-hadoop-metrics/
- ↑ http://sequenceiq.com/
- ↑ https://www.elastic.co/
- ↑ https://www.datastax.com/
- ↑ http://cassandra.apache.org/
- ↑ https://github.com/dice-project/DICE-Monitoring