Uber開源其大規模指標平台M3

2021-09-16 18:10:22 字數 2083 閱讀 8472

uber的工程團隊發布了其開源指標平台m3,該平台已經在uber內部使用多年。構建這個平台是為了取代基於graphite的系統,m3提供了集群管理、聚合、收集、儲存管理、分布式時序資料庫(tsdb)以及帶有其查詢語言m3ql的查詢引擎。

\u0026#xd;\n\u0026#xd;\n

uber之前的指標和監控系統是基於graphite的,由乙個共享的carbon集群作為支撐,nagios負責告警,grafana負責提供儀錶盤功能。這種方式的問題在於彈性和集群能力比較差、擴充套件carbon集群的運維成本比較高以及缺少副本的功能,使得每個節點都面臨單點故障的風險。新的m3指標系統就是為了應對這些問題而產生的。除了擴充套件性、全域性性、跨資料中心的響應式查詢之外,新系統的目標還包括標記指標、維持以statsd和graphite格式傳送指標的服務的相容性。rob skillington是uber的軟體工程師,在最近的文章中描述了m3的架構。m3目前儲存了66億條時序資料,每秒收集5億個指標並且每秒儲存2000萬個指標。

\u0026#xd;\n\u0026#xd;\n

初始版本的m3包含了一些開源的元件,包括用於聚合的statsite、用於儲存的cassandra以及用於索引的elasticsearch。但是這些元件逐漸被內部實現替代了,這主要是因為不斷增加的運維成本以及對新特性的需求。在uber,因為很多團隊在廣泛使用prometheus,m3在構建的時候,整合prometheus作為遠端的儲存後端。

\u0026#xd;\n\u0026#xd;\n

prometheus的整合是通過乙個sidecar元件實現的,該元件會向本地區域(regional)的m3db例項寫入資料,並將查詢擴充套件至「區域間協調器(inter-regional coordinator),它會從本地區域的m3db(儲存引擎)例項協調讀取」。這種模型的執行方式類似於thanos,thanos是prometheus的乙個擴充套件,提供了跨集群聯合、無限制儲存以及跨集群全域性查詢的功能。但是,uber團隊基於各種原因並沒有選擇thanos,主要原因在於非本地儲存的指標所帶來的高延遲。thanos從aws s3中拉取並快取指標資料,因此會帶來相關的延遲和用於快取的額外空間使用,鑑於uber在延遲方面的需求以及龐大的資料量,這種方式是不可行的。

\u0026#xd;\n\u0026#xd;\n

m3的查詢引擎提供了所有指標資料的全域性檢視,無需跨區域的副本。指標寫入到本地區域的m3db例項中,副本對區域來講是本地化的。查詢既可以訪問本地區域例項,也可以訪問儲存指標的遠端區域中的協調器。結果是在本地聚合的,未來的工作計畫是所有的查詢都會在遠端協調器中進行。

\u0026#xd;\n\u0026#xd;\n

m3允許使用者指定每個指標儲存的儲存期限和粒度,就像carbon一樣。m3的儲存引擎會將每個指標在區域內生成三個副本。為了減少磁碟的使用,會採用自定義的壓縮演算法對資料進行壓縮。大多數的時序資料庫都具有壓縮整理(compaction)的特性,較小的資料塊會重寫到較大的資料塊中,並重新組織結構以便於提公升查詢效能。m3db盡可能地避免這種壓縮整理,從而最大限度地利用主機資源進行更多的併發寫入操作並實現穩定的寫入和讀取延遲。

\u0026#xd;\n\u0026#xd;\n

skillington在文章中說到,「m3db只有在絕對必要的時候,才會將基於時間的資料壓縮整理到一起,比如回填(backfilling)資料,或者將時間視窗索引檔案聯合在一起具有一定意義的時候」。指標使用乙個流模型進行縮小取樣(downsample),當指標進入的時候,縮小取樣的流程就會執行。

\u0026#xd;\n\u0026#xd;\n

因為promql缺少了一些特性,所以uber內部使用了m3自己的查詢語言m3ql。在能夠處理的指標基數方面會有一些限制,這主要指的是查詢而並非儲存。m3通過採用bloom過濾器和記憶體對映檔案的索引,優化了對時間資料的訪問。bloom過濾器用來確定集合中是否存在某些內容,在m3中,它用來確定要查詢的序列是否需要從硬碟中檢索。團隊目前正在致力於新增在kubernetes上執行m3的功能。

\u0026#xd;\n\u0026#xd;\n

m3是使用go語言編寫的,可以通過github獲取。

\u0026#xd;\n\u0026#xd;\n

檢視英文原文:uber open sources its large scale metrics platform m3

RedHat已更改其開源許可規則

對於程式設計圈外的人來說,軟體許可證似乎並不重要,但是,在開源領域,開源許可是非常重要的。因此,領先的linux公司red hat宣布了一件大事,所有新的由red hat發起的使用gnu通用公共許可證 gplv2 或gnu通用公共許可證 lgplv2.1 的開源專案,將再補充乙個gplv3許可證。g...

VMware開源其View客戶端

vmware開源了其view客戶端軟體,view客戶端能讓使用者從linux客戶端連線到vmware view管理的遠端windows桌面。vmware公司希望他們的合作夥伴能使用除windows xp或linux之外的作業系統開發非x86裝置的客戶端。u0026 xd n vmware view以...

HP開源其webOS瀏覽器Isis

hp開源了isis,乙個基於qtwebkit的瀏覽器,該瀏覽器遵循了開源webos管理模式。isis的發布是件有意思的事情,它基於qtwebkit,最初由nokia開源。hp決定使用基於webkit的瀏覽器引擎主要是因為它的快速和標準的規格。isis利用客戶 服務端模型將使用者介面和渲染過程分離,這...