大家好,我叫 Maxim Babenko,是 Yandex 分布式計(jì)算技術(shù)部的負(fù)責(zé)人。今天,我們很高興地宣布,YTsaurus 平臺(tái)開(kāi)源發(fā)布。YTsaurus 是 Yandex 開(kāi)發(fā)的關(guān)鍵基礎(chǔ)設(shè)施類(lèi)大數(shù)據(jù)系統(tǒng)之一,之前我們稱之為 YT。
YTsaurus 是我們近十年努力的成果,我們希望把它與全世界分享。在這篇文章中,我們將介紹 YT 的發(fā)展歷史、我們開(kāi)發(fā)它的動(dòng)機(jī)、它的主要功能以及最適合的領(lǐng)域。
GitHub 存儲(chǔ)庫(kù)中包含 YTsaurus 的服務(wù)器代碼、使用 K8s 的部署基礎(chǔ)設(shè)施、系統(tǒng)的 Web 界面,以及 C++、Java、Go 和 Python 等流行編程語(yǔ)言的客戶端 SDK。所有內(nèi)容都遵循 Apache 2.0 許可,也就是說(shuō),任何人都可以下載并根據(jù)自己的需要修改它。
YT 是如何成為 Yandex 最重要的大數(shù)據(jù)系統(tǒng)的
故事要從 2006 年說(shuō)起。那時(shí),Yandex 已經(jīng)是一家相當(dāng)大的公司。在哪里存儲(chǔ)以及如何處理公司的數(shù)據(jù)成了不小的難題。當(dāng)時(shí),我們的關(guān)注點(diǎn)是來(lái)自多個(gè)服務(wù)的日志。日志處理涉及各種分析,可以解決從改進(jìn)機(jī)器學(xué)習(xí)模型到分析用戶行為(在服務(wù)功能或界面變化時(shí))的各種任務(wù)。
可擴(kuò)展彈性數(shù)據(jù)存儲(chǔ)系統(tǒng)的理念已經(jīng)開(kāi)始流行。它可以執(zhí)行并行計(jì)算,而且無(wú)需擔(dān)心數(shù)據(jù)的物理位置和集群物理組件的容錯(cuò)能力。
2004 年,來(lái)自谷歌的 Jeffrey Dean 和 Sanjay Ghemawat 發(fā)布了 MapReduce:簡(jiǎn)化大型集群上的數(shù)據(jù)處理。在很大程度上,它預(yù)測(cè)了分布式計(jì)算行業(yè)未來(lái)十年的發(fā)展。毫不奇怪,Yandex 開(kāi)發(fā)了類(lèi)似 MapReduce 模型的實(shí)現(xiàn),我們稱之為 YAMR,即 Yet Another MapReduce。
我們以破紀(jì)錄的速度從零開(kāi)始構(gòu)建了 YAMR。無(wú)疑,這對(duì)公司內(nèi)部基礎(chǔ)設(shè)施的發(fā)展產(chǎn)生了巨大的影響。然而,隨著時(shí)間的推移,事情變得越來(lái)越明顯,YAMR 中許多最初的設(shè)計(jì)選擇使得系統(tǒng)無(wú)法有效地演進(jìn)和擴(kuò)展。例如,YAMR 主服務(wù)器是單一故障點(diǎn),無(wú)法擴(kuò)展。
乍一看,自己構(gòu)建基礎(chǔ)設(shè)施的決定似乎是 NIH 綜合癥的一個(gè)典型案例,我們甚至沒(méi)有考慮過(guò)使用像 Apache Hadoop 這樣的開(kāi)箱即用的解決方案。但也不完全是這樣。2015 年 9 月,Yandex 的一隊(duì)工程師前往加州,與一些在生產(chǎn)環(huán)境中使用 Hadoop 技術(shù)棧的人會(huì)面,詢問(wèn)他們關(guān)于限制因素、操作特性以及 Hadoop 將如何發(fā)展的問(wèn)題。
但那時(shí),Hadoop 技術(shù)棧已明顯落后于 YAMR,我們已經(jīng)支持糾刪碼(erasure coding)和 IPv6 連接。問(wèn)題還不止這些。
經(jīng)過(guò)全方位的分析之后,我們決定放棄使用 Hadoop 的想法。與此同時(shí),我們必須在 YAMR 的漸進(jìn)式開(kāi)發(fā)和革命性重寫(xiě)之間做出選擇,最終,我們選擇了后者。在這之前的五年時(shí)間里,我有幸成為一小群狂熱愛(ài)好者中的一員,開(kāi)始了一個(gè)代號(hào)為 YT 的項(xiàng)目。只需適當(dāng)?shù)母倪M(jìn),YT 就完全有可能取代 YAMR。
重要的是要明白,替代 YAMR 并不簡(jiǎn)單。在高峰期,該系統(tǒng)管理的集群總計(jì)有數(shù)千個(gè)節(jié)點(diǎn),有大量應(yīng)用程序的代碼是基于 YAMR API 的。因此,改進(jìn) YT 和從 YAMR 遷移花費(fèi)了我們?cè)S多年的時(shí)間。這個(gè)故事本身有許多很有趣的細(xì)節(jié),或許值得單獨(dú)寫(xiě)一篇文章。
自 2017 年以來(lái),Yandex 就只有一個(gè) MapReduce 系統(tǒng),在規(guī)模和功能方面的開(kāi)發(fā)一直持續(xù)到今天。如今,我們公司運(yùn)營(yíng)著數(shù)個(gè) YT 集群,規(guī)模從幾臺(tái)機(jī)器到幾萬(wàn)臺(tái)服務(wù)器不等。最大的安裝存儲(chǔ)著艾字節(jié)的數(shù)據(jù),使用了幾百萬(wàn)核 CPU 內(nèi)核和幾千個(gè) GPU 卡,夜以繼日地進(jìn)行著計(jì)算。
YTsaurus:名字起源
“YT 會(huì)開(kāi)源嗎?”,我們花了將近 7 年的時(shí)間來(lái)回答這個(gè)問(wèn)題。我們的答案是:YT 不會(huì)開(kāi)源,但 YTsaurus 會(huì)!
我們最初開(kāi)發(fā)的系統(tǒng)叫“YT”。代碼庫(kù)的許多部分中都有這個(gè)縮寫(xiě)。Yandex 內(nèi)部流傳著一個(gè)說(shuō)法,“YT”這個(gè)縮寫(xiě)代表了“Yandex Table”,可能是受到谷歌著名的 Big Table 系統(tǒng)的啟發(fā),但我們并沒(méi)有找到任何可靠的證據(jù)可以支持這個(gè)推測(cè)。
當(dāng)決定以開(kāi)源的方式發(fā)布這個(gè)系統(tǒng)時(shí),我們發(fā)現(xiàn)很難保留原來(lái)的名稱。其中一個(gè)原因是,這個(gè)兩個(gè)字母的組合通常與某個(gè)流行的視頻托管平臺(tái)有關(guān)。
最終,我們選定了“YTsaurus”這個(gè)名字。它有著同樣可愛(ài)而熟悉的“YT”前綴,我們團(tuán)隊(duì)一直把這個(gè)項(xiàng)目看成一個(gè)有生命的東西?,F(xiàn)在,我們終于知道它是什么種族了!
在我們的代碼庫(kù)和文章中,我們經(jīng)常將“YTsaurus”縮寫(xiě)為“YT”。我們自己也還在適應(yīng)全名的過(guò)程中。
系統(tǒng)功能
我們?cè)O(shè)計(jì)的系統(tǒng)既靈活又可擴(kuò)展。目前,它的功能并不局限于經(jīng)典的 MapReduce 技術(shù)。在本節(jié)中,我將描述 YTsaurus 開(kāi)源版本提供的主要技術(shù)能力,從底層存儲(chǔ)到高級(jí)計(jì)算原語(yǔ)。
Cypress:可靠高效的數(shù)據(jù)存儲(chǔ)
任何大數(shù)據(jù)系統(tǒng)的核心都是各種日志、統(tǒng)計(jì)數(shù)據(jù)、索引以及其他結(jié)構(gòu)化或非結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)。YTsaurus 以 Cypress 為基礎(chǔ)構(gòu)建。Cypress 是一種基于樹(shù)的具有容錯(cuò)能力的存儲(chǔ),其功能可以簡(jiǎn)單描述如下:
以目錄、表(結(jié)構(gòu)化或半結(jié)構(gòu)化數(shù)據(jù))和文件(非結(jié)構(gòu)化數(shù)據(jù))為節(jié)點(diǎn)的樹(shù)狀命名空間
透明地將大型表格式數(shù)據(jù)分片為塊,我們可以將表視為單個(gè)實(shí)體,而無(wú)需過(guò)多考慮物理存儲(chǔ)的細(xì)節(jié)
支持表格式數(shù)據(jù)基于行和列的存儲(chǔ)機(jī)制
支持使用不同壓縮級(jí)別的各種編解碼器(如 lz4 和 zstd)壓縮存儲(chǔ)
支持使用具有不同控制和計(jì)算策略的各種糾刪編解碼器進(jìn)行糾刪編碼,而這些策略具有不同的冗余參數(shù)和允許的損失類(lèi)型
支持層次類(lèi)型和數(shù)據(jù)排序標(biāo)志的表達(dá)性數(shù)據(jù)圖式化
后臺(tái)復(fù)制和修復(fù)被刪除的數(shù)據(jù),無(wú)需人工干預(yù)
事務(wù)語(yǔ)義支持嵌套事務(wù)和快照 / 共享 / 排他級(jí)鎖
事務(wù)可以影響許多 Cypress 對(duì)象并無(wú)限期持續(xù)
靈活的配額核算系統(tǒng)
Cypress 的核心是一個(gè)可復(fù)制且可橫向擴(kuò)展的主服務(wù)器,存儲(chǔ)著關(guān)于 Cypress 樹(shù)狀結(jié)構(gòu)的元數(shù)據(jù),以及集群中所有表的塊副本的組成和位置。主服務(wù)器以 Hydra 為基礎(chǔ)實(shí)現(xiàn)為一個(gè)可復(fù)制狀態(tài)機(jī)。Hydra 是一種類(lèi)似 Raft 的專(zhuān)有共識(shí)算法。
Cypress 實(shí)現(xiàn)了一個(gè)具有容錯(cuò)能力的彈性數(shù)據(jù)層。下面將要介紹系統(tǒng)幾乎所有方面都用到了這一層。
MapReduce 計(jì)算和通用調(diào)度器
盡管在人們的眼中,MapReduce 已不再是什么新技術(shù),也沒(méi)什么與眾不同之處,但它在我們系統(tǒng)中的實(shí)現(xiàn)還是很值得關(guān)注的。我們?nèi)匀挥盟M(jìn)行需要高吞吐量的 PB 級(jí)數(shù)據(jù)計(jì)算。
YTsaurus 中的 MapReduce 具有以下特點(diǎn):
豐富的基本操作模型:經(jīng)典的 MapReduce(具有不同的 Shuffle 策略并支持多階段分區(qū))、Map、Erase、Sort,以及一些考慮了輸入數(shù)據(jù)“排序”的經(jīng)典模型擴(kuò)展。
計(jì)算可橫向擴(kuò)展:操作被劃分成作業(yè),在獨(dú)立的服務(wù)器上運(yùn)行。
單個(gè)操作可支持?jǐn)?shù)十萬(wàn)個(gè)作業(yè)。
靈活的分層計(jì)算池模型可以提供即時(shí)和完整性保證,并可以在消費(fèi)者之間公平地分配未充分利用的資源(無(wú)保證)。
向量資源模型支持按不同的比例申請(qǐng)不同的計(jì)算資源(CPU、RAM、GPU)。
使用 Porto 容器化機(jī)制按 CPU、RAM、文件系統(tǒng)和進(jìn)程名稱空間隔離在計(jì)算節(jié)點(diǎn)容器中執(zhí)行的作業(yè)。
可擴(kuò)展的調(diào)度程序可以為集群提供多達(dá)一百萬(wàn)個(gè)并發(fā)任務(wù)。
在進(jìn)行更新或調(diào)度器節(jié)點(diǎn)出現(xiàn)故障時(shí),幾乎所有的計(jì)算進(jìn)度都會(huì)保留。
YT 不僅支持執(zhí)行 MapReduce 操作,還支持在集群上部署用戶提供的任何代碼。
對(duì)于副作用不明確的代碼,YT 使用“普通(vanilla)”操作來(lái)運(yùn)行。平臺(tái)的許多其他組件也都用到了這個(gè)功能,下文會(huì)進(jìn)行討論。
動(dòng)態(tài) K-V 存儲(chǔ)表
實(shí)際上,MapReduce 范式不適合構(gòu)建響應(yīng)時(shí)間低于秒級(jí)的交互式計(jì)算管道。問(wèn)題不僅在于如何處理數(shù)據(jù),還在于如何存儲(chǔ)數(shù)據(jù)。
YT 的靜態(tài)表就像 HDFS 中的一組文件,可以作為 MapReduce 計(jì)算的輸入和輸出。但是,它們不能用在交互式場(chǎng)景中,因?yàn)樗鼈兪桥c速度緩慢的持久存儲(chǔ)介質(zhì)綁定的。通常,對(duì)于交互式場(chǎng)景,應(yīng)用程序會(huì)使用鍵值存儲(chǔ)。鍵值存儲(chǔ)可以橫向擴(kuò)展,并能提供低延遲的讀寫(xiě)訪問(wèn)。
幸運(yùn)的是,2014 年,我們開(kāi)始在 YT 框架內(nèi)開(kāi)發(fā)動(dòng)態(tài)表。它們部分基于 Apache HBase 模型,可以橫向擴(kuò)展,并使用分布式文件系統(tǒng)作為底層存儲(chǔ)。不過(guò),不同于 Apache HBase,動(dòng)態(tài)表被有機(jī)地整合到了整個(gè)生態(tài)系統(tǒng)中:它們相當(dāng)于 Cypress 的節(jié)點(diǎn),可以用于許多需要靜態(tài)表的場(chǎng)景。
例如,在 YT 中,你可以創(chuàng)建一個(gè)動(dòng)態(tài)表作為 MapReduce 操作的結(jié)果,并將其用于基于鍵的快速搜索和插入。同時(shí),你可以創(chuàng)建一個(gè)后臺(tái) MapReduce 進(jìn)程,處理來(lái)自動(dòng)態(tài)表的數(shù)據(jù)樣本,并計(jì)算關(guān)于它的一些統(tǒng)計(jì)信息。
使用 MVCC 模型存儲(chǔ)數(shù)據(jù)。用戶可以通過(guò)鍵或時(shí)間戳查找值。
可擴(kuò)展性:動(dòng)態(tài)表會(huì)被劃分成片(按鍵的范圍劃分),由單獨(dú)的服務(wù)器提供服務(wù)。
事務(wù)性:動(dòng)態(tài)表是 OLTP 存儲(chǔ),可以修改不同表不同分片中的多個(gè)行。
容錯(cuò)能力:提供分片服務(wù)的節(jié)點(diǎn)如果出現(xiàn)單點(diǎn)故障,那么分片會(huì)被移到另一個(gè)節(jié)點(diǎn)而不丟失數(shù)據(jù)。
隔離性:為了實(shí)現(xiàn)負(fù)載隔離,提供分片服務(wù)的節(jié)點(diǎn)會(huì)被分組成包,駐留在不同的機(jī)器上。
在單個(gè)鍵甚至單個(gè)值的層面上進(jìn)行沖突檢查。
熱數(shù)據(jù)響應(yīng)來(lái)自內(nèi)存。
內(nèi)置了類(lèi)似 SQL 的語(yǔ)言,用于查詢掃描和分析。
除了具有 K-V 存儲(chǔ)接口的動(dòng)態(tài)表外,系統(tǒng)還支持實(shí)現(xiàn)了消息隊(duì)列抽象的動(dòng)態(tài)表,即主題和流。你也可以把這些隊(duì)列看成是表,因?yàn)樗鼈冇尚薪M成,并且有自己的模式。在事務(wù)中,你可以同時(shí)修改 K-V 動(dòng)態(tài)表和隊(duì)列中的行。這樣一來(lái),你就可以基于 YT 的動(dòng)態(tài)表構(gòu)建具有 Exactly Once 語(yǔ)義的流處理。
YQL
YQL 是一種基于 SQL 的查詢語(yǔ)言;它是 YT 之上構(gòu)建的第一個(gè)高級(jí)原語(yǔ)。YQL 之于 YT 相當(dāng)于 Hive 之于 Hadoop。這種技術(shù)讓用戶可以用 SQL 編寫(xiě)簡(jiǎn)單的查詢,而不是自己編寫(xiě)代碼構(gòu)建一系列 MapReduce 操作。下面是一個(gè)例子:
SELECT region, AVG(age) AS avg_age_in_region, COUNT(DISTINCT ip) AS ips_count FROM `//home/production/users` GROUP BY region ORDER BY avg_age_in_region;
如今,許多大數(shù)據(jù)任務(wù)都可以表述為簡(jiǎn)單的 SQL 查詢。沒(méi)有 YQL,我們的生態(tài)系統(tǒng)就是不完整的。它是用于在大型數(shù)據(jù)集上進(jìn)行即時(shí)分析和常規(guī)生產(chǎn)計(jì)算的最流行的工具之一。
YQL 有以下好處:
強(qiáng)大的圖執(zhí)行引擎,可以構(gòu)建具有數(shù)百個(gè)節(jié)點(diǎn)的 MapReduce 管道,并可以在計(jì)算過(guò)程中進(jìn)行調(diào)整。
通過(guò)將子查詢存儲(chǔ)在變量中,就可以使用 SQL 將復(fù)雜的數(shù)據(jù)處理管道構(gòu)建成依賴查詢和事務(wù)鏈。
任意復(fù)雜度的查詢,其并行執(zhí)行都是可預(yù)測(cè)的。
高效地實(shí)現(xiàn)連接、子查詢和窗口函數(shù),而且對(duì)它們的拓?fù)浠蚯短讻](méi)什么限制。
大量的函數(shù)庫(kù)。
支持 C++、Python 和 JavaScript 自定義函數(shù)。
支持通過(guò) CatBoost 和 TensorFlow 使用機(jī)器學(xué)習(xí)模型。
在準(zhǔn)備好的計(jì)算實(shí)例上自動(dòng)執(zhí)行一小部分查詢,繞過(guò) MapReduce 以減少延遲。
CHYT
不用說(shuō),大多數(shù)讀者朋友們都聽(tīng)說(shuō)過(guò) ClickHouse。2016 年,這個(gè) DBMS 成為 Yandex 開(kāi)源技術(shù)的先驅(qū),并于 2021 年成為一家獨(dú)立的公司 ClickHouse Inc.。
如今,ClickHouse 是最受歡迎的分析型數(shù)據(jù)庫(kù)之一,它基于列的執(zhí)行引擎非常高效,并集成了各種 BI 系統(tǒng)。ClickHouse 其中一個(gè)很好的特性是源代碼中存儲(chǔ)和計(jì)算部分實(shí)現(xiàn)了良好的隔離,這使得我們?cè)?2018 年構(gòu)建出了 CHYT——ClickHouse 計(jì)算引擎將 YTsaurus 作為存儲(chǔ)集成。
在 YTsaurus 生態(tài)系統(tǒng)中,CHYT 提供了以下功能:
在 YT 中對(duì)靜態(tài)表進(jìn)行快速分析查詢,延遲只有亞秒級(jí)。
重用 YTsaurus 集群中已有的數(shù)據(jù),而無(wú)需將其復(fù)制到單獨(dú)的 ClickHouse 集群。
能夠通過(guò) ClickHouse 的原生 ODBC 和 JDBC 驅(qū)動(dòng)程序集成第三方可視化系統(tǒng)。
我注意到,集成是在相當(dāng)?shù)偷膶哟紊贤瓿傻?。這讓我們可以充分挖掘 YTsaurus 和 ClickHouse 的潛力,即:
支持讀取靜態(tài)和動(dòng)態(tài)表。
部分支持 YTsaurus 事務(wù)模型。
支持分布式插入。
將 YTsaurus 內(nèi)部格式的列式數(shù)據(jù) CPU 高效地轉(zhuǎn)換為內(nèi)存中的 ClickHouse 表示。
主動(dòng)數(shù)據(jù)緩存,在某些情況下,允許完全從實(shí)例內(nèi)存中讀取查詢執(zhí)行數(shù)據(jù)。
ClickHouse 服務(wù)器代碼會(huì)在上述普通操作發(fā)生時(shí)運(yùn)行,使用的計(jì)算資源與 MapReduce 計(jì)算相同。從這個(gè)意義上講,YTsaurus 集群于我們內(nèi)部的 CHYT 集群而言是一朵計(jì)算云。
這使得不同的用戶或用戶團(tuán)隊(duì)可以在單個(gè) YT 集群上運(yùn)行多個(gè) CHYT 集群,彼此完全隔離,用和云類(lèi)似的方式解決資源隔離問(wèn)題。
SPYT
2019 年,Yandex 推出了 SPYT,這個(gè)系統(tǒng)將 Apache Spark 作為 YT 數(shù)據(jù)的計(jì)算引擎集成。與 CHYT 類(lèi)似,普通 YTsaurus 操作為 Spark 集群提供計(jì)算資源。Apache Spark 的設(shè)計(jì)初衷就是為了方便連接第三方存儲(chǔ)并將其作為數(shù)據(jù)源。
SPYT 在 YTsaurus 的生態(tài)系統(tǒng)中也是根深蒂固。得益于與第三方系統(tǒng)豐富的集成能力,它成了編寫(xiě) ETL 工作流的主要方法之一。在底層,Spark 使用了一個(gè)靈活的分布式計(jì)算優(yōu)化器,可以最大化中間數(shù)據(jù)的內(nèi)存存儲(chǔ),并可以實(shí)現(xiàn)具有多個(gè)連接的計(jì)算管道。
各種 SDK
對(duì)于用特定語(yǔ)言編寫(xiě)的系統(tǒng),SDK 通常是自動(dòng)生成的或由用戶社區(qū)的某個(gè)人編寫(xiě)的(長(zhǎng)時(shí)間得不到維護(hù))。但我們用當(dāng)下流行的語(yǔ)言(C++、Python、Java、Go)開(kāi)發(fā)了所有的 API。對(duì)于每一種 SDK,我們都仔細(xì)考慮了它與系統(tǒng)交互時(shí)的所有細(xì)微的不同之處。
因?yàn)榭赡艽嬖?a href="http://srfitnesspt.com/v/tag/1722/" target="_blank">網(wǎng)絡(luò)故障和其他錯(cuò)誤,所以我們用不同語(yǔ)言編寫(xiě)的客戶端庫(kù)都可以重試請(qǐng)求,包括讀寫(xiě)大量數(shù)據(jù)。在創(chuàng)建每一種庫(kù)時(shí),我們都考慮了這門(mén)語(yǔ)言的特性,并盡可能使用這些特性來(lái)簡(jiǎn)化它與系統(tǒng)的交互。
Web 界面
對(duì)于一個(gè)有成千上萬(wàn)的用戶使用的系統(tǒng),必須要有一個(gè)用戶友好的 Web 界面。而且,我們有意沒(méi)有為用戶和管理員創(chuàng)建單獨(dú)的 Web 界面,這幫助我們避免了愛(ài)好者們匆忙創(chuàng)建 Web 管理界面的情況,那很常見(jiàn):畢竟用戶側(cè)更重要,在管理員面前就沒(méi)什么可尷尬的了。
你可以通過(guò) YTsaurus Web 界面完成以下工作:
通過(guò) Cypress 瀏覽文件、表和其他對(duì)象。
創(chuàng)建、重命名或刪除 Cypress 對(duì)象,并修改它們的屬性。
執(zhí)行和查看 MapReduce 計(jì)算。
跨所有引擎執(zhí)行和查看 SQL 查詢歷史——YQL、CHYT、動(dòng)態(tài)表 SQL。
管理系統(tǒng):監(jiān)控集群組件的運(yùn)行狀況,創(chuàng)建、刪除或禁用用戶,管理訪問(wèn)權(quán)限和配額,查看集群組件版本等。
技術(shù)層面看 YTsaurus
服務(wù)器端代碼大部分都是用 C++ 編寫(xiě)的。我們喜歡這種語(yǔ)言,因?yàn)樗墓δ芎茇S富,用它編寫(xiě)的代碼很高效。在開(kāi)源發(fā)布 YTsaurus 之后,我們希望把大量的開(kāi)發(fā)成果分享出來(lái),或許你可以把它們作為單獨(dú)的 C++ 原語(yǔ)來(lái)使用。
服務(wù)器端代碼是使用 Clang 編譯器和 CMake 構(gòu)建系統(tǒng)構(gòu)建的。
系統(tǒng)的個(gè)別部分是用 Go、Python 和 Java 編寫(xiě)的。還有一個(gè) API,讓你可以使用上述 4 種編程語(yǔ)言開(kāi)發(fā)與 YTsaurus 交互的應(yīng)用程序。
代碼庫(kù)會(huì)自動(dòng)與內(nèi)部存儲(chǔ)庫(kù)同步。因此,外部總是可以獲得 YTsaurus 的最新版本。
YTsaurus 在 x86-64 Linux 服務(wù)器上運(yùn)行。
部署和管理
在 Yandex,我們安裝了超過(guò) 20 套 YTsaurus。它們的規(guī)模和配置差異很大,從單集群 5 臺(tái)主機(jī)到 20K+ 不等。YTsaurus 還集成了幾個(gè)內(nèi)部 Yandex 系統(tǒng),包括身份驗(yàn)證、訪問(wèn)控制、審計(jì)、監(jiān)控、硬件管理和容器編排。所有這些系統(tǒng)最大限度地減少了管理集群的工作量。
為了方便用戶,我們投資開(kāi)發(fā)了二級(jí)操作符,用于在 Kubernetes 中自動(dòng)部署 YTsaurus 集群,并支持標(biāo)準(zhǔn)的升級(jí)機(jī)制,可以在停機(jī)狀態(tài)下升級(jí)到新版本。該操作符讓你可以在幾分鐘內(nèi)把 YTsaurus 集群部署到 Minikube、公有云或本地 Kubernetes 上。
通過(guò)修改元數(shù)據(jù)樹(shù)(Cypress)中的系統(tǒng)節(jié)點(diǎn),可以動(dòng)態(tài)地管理集群配置。使用基本的 Cypress 命令(如 list、get、set 和 remove),你可以創(chuàng)建帳戶、添加用戶或計(jì)算池、授予目錄訪問(wèn)權(quán)限或退役集群節(jié)點(diǎn)。
特別值得注意的是動(dòng)態(tài)配置各個(gè)組件的能力:通過(guò)修改特定屬性,你可以調(diào)整緩存大小、心跳周期或節(jié)點(diǎn)上的日志記錄設(shè)置。
YTsaurus 是一個(gè)計(jì)算平臺(tái),因此,用戶代碼的執(zhí)行是隱式的。為了運(yùn)行和隔離不受信任的代碼,YTsaurus 使用了 Yandex 開(kāi)發(fā)的容器化系統(tǒng) Porto。為了在多租戶集群中實(shí)現(xiàn)完全的用戶隔離,建議將 Porto 安裝為 Kubernetes CRI。這可以充分釋放 YTsaurus 作業(yè)隔離和在不同操作中使用自定義環(huán)境的能力。
當(dāng)然,如果沒(méi)有可觀測(cè)性工具——日志記錄、定量監(jiān)測(cè)和跟蹤,運(yùn)營(yíng)大型分布式系統(tǒng)是不可能的。YTsaurus 會(huì)生成結(jié)構(gòu)化日志,用于審計(jì)和監(jiān)控用戶操作,并且提供了詳細(xì)的調(diào)試日志,用于更深層次的問(wèn)題診斷。此外,該系統(tǒng)支持 Prometheus 格式的指標(biāo)導(dǎo)出,并通過(guò) Jaeger gRPC 協(xié)議進(jìn)行鏈路追蹤。
基于 YTsaurus 可以構(gòu)建什么?
讓我們通過(guò)幾個(gè)例子看一下 Yandex 是如何使用這個(gè)系統(tǒng)的。
YTsaurus 最具啟發(fā)性、最典型的用例之一是創(chuàng)建 DWH。例如,來(lái)自 Yandex Taxi、Yandex Eats、Yandex Deli 和 Yandex Delivery 的訂單以原始格式以最小的延遲接收到 YTsaurus 動(dòng)態(tài)表中。每月的數(shù)據(jù)量可達(dá)數(shù)百 TB。
然后,我們用各種工具處理訂單,例如,大多數(shù)分析型數(shù)據(jù)集市是通過(guò) YQL 和 SPYT 進(jìn)行準(zhǔn)備的。數(shù)據(jù)總量超過(guò) 6PB。CHYT 用于即時(shí)分析,各種可視化則在 Yandex DataLens 中創(chuàng)建。Yandex 的其他服務(wù)中也存在類(lèi)似的用例,如 Yandex Market、Yandex Music 和 Yandex Travel。
還有一些非常具體的用例。例如,Yandex 所有的三臺(tái)超級(jí)計(jì)算機(jī)都由 YTsaurus 調(diào)度程序管理。許多具有不同類(lèi)型 GPU 的節(jié)點(diǎn)連接到 YT,并分布在不同的池樹(shù)中。這使得用戶可以顯式指定所需的 GPU 模型,并使用存儲(chǔ)在 YTsaurus 中的數(shù)據(jù)。
目前,YTsaurus 動(dòng)態(tài)表存儲(chǔ)的數(shù)據(jù)達(dá) PB 級(jí),大量的交互服務(wù)都以它們?yōu)榛A(chǔ)構(gòu)建。Yandex 廣告團(tuán)隊(duì)是最大的內(nèi)部客戶之一。在 HighLoad++ 2022 大會(huì)上,我的同事們探討了他們?cè)?YTsaurus 上構(gòu)建交互式流處理的方法。
結(jié)語(yǔ)
YTsaurus 是一個(gè)有著豐富歷史的大工程。如果你感興趣,就請(qǐng)看一看 YTsaurus,找一些對(duì)自己有用的東西。也許你會(huì)喜歡我們?cè)诖a中實(shí)現(xiàn)的技術(shù)解決方案,或者找個(gè)機(jī)會(huì)部署 YTsaurus 并實(shí)際地試用一下。
-
開(kāi)源
+關(guān)注
關(guān)注
3文章
3189瀏覽量
42251 -
處理系統(tǒng)
+關(guān)注
關(guān)注
0文章
92瀏覽量
16650 -
分布式計(jì)算
+關(guān)注
關(guān)注
0文章
27瀏覽量
4455
原文標(biāo)題:YTsaurus:EB 級(jí)存儲(chǔ)和處理系統(tǒng)現(xiàn)已開(kāi)源
文章出處:【微信號(hào):AI前線,微信公眾號(hào):AI前線】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論