从NoSQL到Lakehouse,Apache Doris的13年技术演进之路
從 2008 年第一個版本開始到今天,Apache Doris 已經走過了 13 個年頭。從推出之初為了滿足百度商業系統的業務專用需求,到后來為解決通用報表與數據分析需求進一步改造,并在 2017 年改名 Palo 開源(詳見 InfoQ 當時報道),再到 2018 年用回 Doris 這個名字并進入 Apache 軟件基金會孵化,Apache Doris 的愿景一直是成為世界頂級的分析型數據庫產品。但與此同時,進入云原生時代,Apache Doris 也已經有了它新的定位和目標。
早在 Apache Doris 開源之初,InfoQ 就曾采訪過項目負責人馬如悅,而今年正好是這個項目開源的第四個年頭,我們再一次找到百度 Apache Doris 主創團隊,跟大家聊聊 Apache Doris 的過去、現在和未來。據透露,目前 Apache Doris 的畢業籌備工作已經啟動,團隊接下來的工作重心之一就是推動 Apache Doris 盡快從 Apache 基金會畢業成為頂級項目。
以下內容整理自訪談實錄。
Apache Doris 的新目標
InfoQ:Apache Doris 發展至今,已經 13 年了,如果要將發展歷史劃分成幾個階段,您們認為是怎樣的?
Apache Doris 團隊:Doris 的十多年歷史,走到今天,我們重新去審視,去掉細枝末節,大體可以分為三個階段:
- “NoSQL”階段(2008-2011 年)
這個階段主要是滿足百度商業系統幾個大業務的專用需求。這幾個業務,需要給幾十萬到幾百萬的客戶或者用戶提供實時的報表分析與可視化能力。而傳統的分析數據庫,基本上主要支撐公司內部自己的 BI 需求,而這些 BI 需求,對數據入庫的時效性、查詢的并發性、查詢的延遲性要求都不是很高。所以使用傳統的分析數據庫根本無法支撐互聯網公司全新的分析需求。當時,我們采用了那時候市場上比較火的 NoSQL KV 數據庫來存取數據,并且自己實現了一個專用的分布式查詢引擎,這個查詢引擎不是 SQL 接口,而是類似 REST API,提供了一些聚合函數調用給業務使用來解決需求。
- “NewSQL”階段(2012-2020 年)
這一階段的研發重點主要是滿足以下新的需求:1) 通用的報表與數據分析需求開始增多,大家需要 SQL 接口;2) 原來的 KV 存儲引擎無法提供足夠的性能支撐越來越多的需求。所以,我們開始研發新的 Doris 系統。首先,我們研發了全新的單機列式存儲引擎 olapengine,先是使用單機 MySQL 來做 SQL 查詢引擎,通過分庫分表方式來解決分布式大規模問題;后來又將單機的列式存儲引擎改造為全分布式列式存儲引擎,把單機 MySQL 查詢引擎改造為 MPP 的 SQL 查詢引擎。分布式存儲和分布式 SQL 查詢引擎的改進,大大提升了性能和應用場景滿足度,Doris 在百度被大規模采用。2017 年,Doris 也正式對外開源。
- “LakeHouse”階段 (2021 年開始)
隨著用戶需求不斷進化和云計算技術的廣泛推進,Doris 需要考慮離線在線一體化、存算分離、實時更新、半結構化數據分析支持等需求。這些需求總結下來,簡單地說就是用戶希望擁有傳統 MPP 數倉和基于數據湖的湖分析融合能力。目前 Doris 就處在這一階段,正在全力研發這些新的功能。
InfoQ:Apache Doris 的設計目標是為了解決什么問題?
Apache Doris 團隊: 因為技術和需求會隨著時間發生變化,Doris 也會跟著每個階段去制定不同的目標。
第一階段 Doris 主要還是滿足專用系統的統計分析需求,第二階段主要是滿足通用的報表與數據分析可視化需求。
到今天,我們發現用戶或者客戶對數據的分析需求,逐漸收斂為三大塊:
而新的 Doris 將會針對這三類場景,進行重點功能和性能設計,以便支撐這三類需求。
InfoQ:Apache Doris 最初的定位是什么?10 多年過去后,這個目標定位是否有了變化?
Apache Doris 團隊:Doris 最初的定位是新式數倉,滿足在線的數據分析場景,主要以高并發小查詢的性能最為出色。但是發展到今天,它的定位正在發生變化,這個主要變化可以用一個 T 形(一縱兩橫)來說明。一縱就是指把原來 Doris 最擅長的在線結構化 MPP 數據分析性能優化到最快,而導入實時化、存儲讀寫性能優化、計算性能優化,這些會學習和借鑒 ClickHouse 的一些設計。兩橫之一是支持半結構化數據,當前全球很多對日志等半結構化數據分析都使用 Elasticsearch,Doris 后續會加強對 ES 所支持場景的滿足能力;另一橫,就是擁抱云原生技術,支持存算分離,支持較大的查詢,滿足對數據科學與機器學習場景的支持,這一塊需要多去借鑒 Snowflake 和 Databricks 的一些設計。
當前 Doris 的新目標,就是主攻這個類似 T 形的一縱兩橫。
只關注性能過于片面
InfoQ:現在業內出現了越來越多的各種 OLAP 軟件,相比較起來,您認為 Doris 具有什么樣的優缺點?適合什么樣的使用場景?
Apache Doris 團隊:Doris 和很多其它競品不大相同的,主要是源于產業實踐。數據庫技術不同于應用層軟件,數據庫技術的研發需要積累多年,并且還要經歷大規模的實踐檢驗。在實踐中發現問題、發現需求,然后解決,這樣整個系統才會比較實用。
Doris 運維非常友好:很多數據庫公司研發數據庫,但是自己又沒有大規模使用,所以對運維友好性支持欠缺。Doris 來自于實踐,所以在多年的發展中增加了大量方便運維的特性,比如高可用、方便的擴縮容等。
比如為了節省成本,Doris 支持分層存儲,即一個表的一個 Partition 分區,可以設置為過了多久以后自動從 SSD 磁盤轉移到 SATA 硬盤上。
比如 Doris 的后端節點,需要管理員在前端主節點手動添加,好多人可能不理解,為什么不是后端節點自動匯報?問出這個問題,就可以發現其沒有一線工程經驗,自動匯報會帶來很多潛在的運維風險,都是我們曾經有過的血淚教訓,比如一個很久以前死掉的節點,突然重新啟動,那么很可能就會誤加入進來,造成查詢不可控。
比如 Doris 支持物化視圖和基礎表的數據一致性,這都是源自一線業務對數據一致性的強烈要求,業務無法接受物化視圖表和基礎表的不一致,因為對終端用戶來講,不一致會帶來很多的理解問題。
綜上,Doris 里面有大量的這種設計,這些功能對于不是一線運維的同學,或者運維經驗不豐富的同學,可能不會了解到其好處,反而還會認為是壞處。
Doris 主要做的不好的我認為有兩處,一個是對傳統數倉的兼容性,畢竟它來自互聯網公司,在推廣到傳統數倉領域時,在一些 SQL 兼容性上遇到了一些問題,當前正在優化解決;另一個是對云原生技術的全面擁抱,Doris 最初設計時,主要還是考慮私有化部署,那時云計算還不火。但當前云技術的采用正在加速,所以 Doris 后續也會加強對云原生的深度融合適配。
InfoQ:2017 年,您在InfoQ 的采訪中說過“性能不該是唯一關注點”,現在您們對 Apache Doris 的要求是否有變化?
Apache Doris 團隊: 我們的觀點還是沒有變化,雖然市場上依舊是看性能為主。我們認為一個生產級別的數據庫,要綜合考慮各個方面,穩定性、易用性等,都需要考慮在內。比如,很多人一直抱怨 Doris 沒有 ClickHouse 快,這個我是認為比較片面的。
就拿性能來說,一個在線系統,尤其針對高并發的在線分析系統,需要關注整個系統對眾多并發查詢都能提供穩定的響應,還要充分考慮預留足夠的資源給可能突發的一些查詢。如果一個查詢就把所有磁盤和 CPU 全部用滿,那么其它查詢如何保證得到足夠的資源進行響應?多并發來了,如何保證系統內存不崩?所以,有些設計不是能不能做到的問題,而是要考慮應該不應該這樣做的問題。 比如 Doris 的每個查詢,就會控制內存和 IO 線程的使用,并不是全量將系統的算力資源耗盡,而是在盡量滿足性能響應需求的情況下,理性控制其使用量。
而易用性、運維友好這個可以追求極致,你會看到 Doris 為了不額外引入 ZooKeeper 這種系統造成運維復雜,自己研發了一套內置的多 FE 系統。
當然,我們在面向 To B 推廣 Doris 時,很多人經常會通過單一 SQL 的查詢性能來衡量這個系統優還是劣,POC 測試對性能非常看重。針對這些情況,Doris 后面會采用類似汽車中的駕駛模式那種形式,提供 Normal 和 Sport 模式。當你將 Doris 設定為 Sport 模式時,Doris 將會以性能最快方式運行,榨取系統每一滴算力。而 Normal 模式,我們更建議在線上使用,以保持系統的穩定性和應對突發請求的能力,不要讓系統始終運行在崩潰邊緣。
InfoQ:您們團隊在這幾年的維護過程中,投入了多少人力,解決了哪些比較關鍵的技術問題?做了哪些功能優化?
Apache Doris 團隊: 這幾年團隊成員有過變化,但團隊規模一直在穩步增加,目前好幾個方向的人員數量加起來有 40 多人,既包含了 Doris Core 核心數據庫的研發,也包含了百度智能云上產品和外圍生態組件的前后端開發人員,還有一支實力強大的產品和運營團隊。
從開源至今,在社區的共同努力下,Doris 得到了前所未有的飛速發展,做了非常多的功能迭代和更新。主要包括以下幾方面:
- 流式導入功能幫助 Doris 從分鐘甚至小時級別的導入延遲推進到了秒級,更好地支撐了準實時的業務需求;
- 完全重構了存儲引擎,提升擴展性的同時,支持了包括二級索引、字典壓縮編碼在內的多項實用功能;
- 進行了大量的大數據生態打通工作,包括Spark、Flink、ES、Hive、Kafka 的直接連通,使得 Doris 不再成為數據孤島;
- 在明細數據上擴展了預聚合模型,完成了明細、聚合模型的數據統一訪問;
- 全新的向量化執行引擎和資源隔離方案也即將發布,將進一步提升 Doris的數據分析性能和業務應用場景;
- 還有其他非常多的穩定性和易用性的提升,也是得益于開源后社區用戶的不斷打磨和反饋。
InfoQ:Apache Doris 和數據湖架構之間有哪些區別和聯系?
Apache Doris 團隊:Doris 最初設計是存算一體化的 MPP 數據倉庫,偏在線分析。而數據湖架構的分析,主要是存算分離,偏離線或者交互式分析,存儲引擎一般是 HDFS 或者對象存儲,而分析引擎類似 Spark/Hive/Presto。
從去年開始,大家已經開始廣泛地推進 Data Warehouse 和 Data Lake 架構的融合,即是所謂的湖倉一體,Lakehouse 的架構。Doris 也正在從數倉架構向 Lakehouse 演進。
InfoQ:在周邊生態上,最近幾年有了一個什么樣的變化?
Apache Doris 團隊:最大的變化就是 SQL 的取勝,實時的取勝,云原生的取勝。
- SQL 的取勝:從使用 Java 寫 MapReduce、Pig,用 Scala 寫 Spark 程序到 PySpark,最終還是 SQL笑到了最后,SQL 占據了數據分析的 80%;
- 實時的取勝:人們對于速度的追求是無止境的,一個事情不能做,希望可以做到,這個事情可以做到了,希望能越快越好。數據分析領域正在全面擁抱實時化的需求,希望實時的數據導入,希望實時的數據產出。從離線做起的 Hive、Spark 正在不斷優化查詢性能,而那些直接從實時性能切入的 MPP 數倉和實時湖分析,比如 Presto,正在全面攻占在線實時市場;
- 云原生的取勝:云原生已經不再是噱頭,而是正在成為關鍵賦能技術,Snowflake 的大賣,讓云原生成為每個數據分析產品都繞不開的領域。
基礎設施軟件必然要開源
InfoQ:您們當初是如何選擇開源的時機的?Doris 加入 Apache 經過了一個什么樣的流程?
Apache Doris 團隊:Doris 從 13 年設計新版時,就考慮到了未來會開源出去,所以,我們在 13 年設計時,就沒有依賴百度內部任何一個庫,并且整個系統也不依賴百度任何服務就可以獨自運作。
百度很多系統難以開源,主要是開始設計時,對百度內部閉源庫和內部系統的依賴較多,導致開源的時候需要大量重寫,最終使得開源難度非常大。Doris 沒有這個問題。
Doris 從 13 年就堅信未來基礎設施軟件必然是開源的,只有開源才能保持活力和持續迭代。并且像 Doris 這種基礎軟件,需要較大投入,如果不開源,不尋找其它價值點,是很難讓一個大公司持續投入資源來維持其不斷發展的。
Apache 是對開源極其友好的基金會,在大數據領域,Apache 軟件基金會的項目都極具影響力,比如 Hadoop 和 Spark 都是 Apache 軟件基金會的項目,所以 Doris 開源時也選擇了 Apache 軟件基金會。
InfoQ:您們認為什么樣的開源軟件可以稱之為是開源成功的?
Apache Doris 團隊: 我們認為衡量開源的成功與否關鍵在于以下三點:
- 被廣泛認可的產品價值
- 繁榮、自治、良性發展的社區生態
- 開源與商業化的平衡與共存
InfoQ:您們怎么看開源文化?您們團隊是如何構建開源文化的?
Apache Doris 團隊: 作為任何一個技術人員,開源已經成為了一種信仰,一方面是解決更多人的問題所帶來的成就感,另一方面就是社區的廣泛參與必定為項目帶來更好的活力,所以我們非常鼓勵團隊成員參與開源。
InfoQ:在參與開源的過程中,您們有什么樣的經驗可以和大家分享?
Apache Doris 團隊: 開源社區不是只有維護團隊,每一個開源產品的使用者其實都是開源社區的一份子。在使用開源產品的同時,也可以多多回饋社區,這樣開源產品才能有更旺盛的生命力。
這里引用我們社區里一些用戶的話 “在開源過程中,你會結識志同道合的朋友,獲得朋友的認可與支持,甚至能夠與自己崇拜的業界大佬共同交流。”、“我們每個人都有能力讓社區變得更好,在社區幫助我們成功支持業務的同時,我們也應該盡自己所能,去回饋社區、幫助社區,哪怕只是一個文檔的修復,也是幫助。”
上面其實也是我們想傳達的理念,參與開源其實沒有什么門檻,我們希望能有更多的小伙伴參與到社區建設中來。不論是提交 Issue 或參與討論、幫助我們打磨產品和豐富功能,或者是修改和完善系統文檔,或者是貢獻應用案例、讓我們知道 Apache Doris 在真實業務場景中還能發揮出超出我們想象的能力,亦或是口碑相傳、讓 Apache Doris 被更多人知曉,都是幫助 Apache Doris 在成長道路上更進一步!
InfoQ:您們如何看待開源項目社區之間的競爭與合作?面對中國開源市場,您有什么好的建議、寄語與大家分享么?
Apache Doris 團隊:開源社區之間其實不存在競爭一說,倒是有非常大的合作空間。
代碼和社區其實不用一概而論,代碼是代碼,社區是社區。 使用代碼的人是用戶,這些用戶是完全自由的,如何選擇一款開源產品及其代碼是由用戶自己的技術認知和業務需求來決定的,這里的競爭是存在于代碼層面的。而開源社區其實在代碼之上,也就是 Apache 理念的 Community Over Code,每個人都可以參與到社區,不管是不是用戶,不管有沒有需求,都可以作為獨立的身份加入到社區里來。
社區的發展有先后之分,社區間的合作可以幫助社區在更大范圍的人群中得到傳播,也能幫助新興社區更快成長,還可以讓開源代碼汲取到更豐富的養分。
對于中國開源市場,希望能有更多的開源項目可以蓬勃發展,這也會讓每一個人從中受益。
開源與商業化協同
InfoQ:您們如何理解開源和商業化之間的關系?
Apache Doris 團隊: 當前大量底層技術產品都采用開源模式,客戶也愿意采用開源產品,所以大環境也會逼著你去開源;另外,在商業市場中存在著 2/8 原則,即 80% 的收入來自 20% 的付費用戶,而另外 80% 的用戶貢獻收入并不高,然而前者無論開源與否,都可能付費;而后者則更喜歡開源產品;但是,其中最重要的一條規律是,前面 20% 付費用戶的選擇會參考后面 80% 用戶的選擇。因此從商業上來看,讓產品開源,讓 80% 的用戶免費使用你的產品,必然會帶來很好的口碑,這直接會影響到那 20% 的高付費用戶,20% 的這群高付費用戶更多地關注服務。
所以,對于未來的技術產品,開源可能成為必須,這個“必須”不一定損害商業模式,反而會促進商業上的成功。 最近一兩年我們也跟很多面向開源軟件領域的投資人有過多次溝通,開源和商業化的之間必定是相互成就的。
但開源與商業化如何協同是當前和未來開源面臨的問題。開源與商業化需要找到一個良性并存的方式,才能將開源推向另一個高度。
當前開源與商業化如何協同,業內都在探索,還在苦苦尋求中。付費技術支持、Open Core、SaaS 模式仍然是三個主要的商業化模式,但是在實際操作中都有其大的問題。
但是,我相信,隨著各類基于開源的商業化公司的不斷探索,成功與失敗,最終一定會探索出比較好的商業模式。
InfoQ:Doris 的商業化路徑是怎么規劃的?目前已經有哪些商業客戶?
Apache Doris 團隊: 商業化路徑方面,我們認為云上才是未來,因此我們數年前就在百度智能云上推出了基于 Apache Doris 的企業版產品 Palo 并提供了云端托管服務,通過云服務的優勢(比如按需取用和更加可控的海量資源、從繁瑣的運維工作中解放人力等)去滿足更多企業上云的需求。我們 云上 Palo 的核心代碼與開源版完全一致,避免用戶可能擔心被公有云廠商強綁定。我們公有云托管服務的價格,比用戶購買物理機甚至云上虛機自行搭建的費用還要低。我們還基于 Palo 提供了管控運維平臺等一系列云上組件,通過豐富的外圍組件給用戶帶來體驗更加的云上服務,目前我們的自助分析平臺 Studio 和可視化運維監控 Manager 已經逐步成熟起來。
目前我們已經拿下的商業化客戶大概有接近 50 家,包括銀聯商務、知乎、四川航空等,更具體的數字就不進一步展開了。
InfoQ:Doris 所在的市場或所覆蓋的應用場景,市場潛力還有多大?
Apache Doris 團隊: 數據分析場景主要是三大塊:數據倉庫與商業智能、日志檢索與分析、數據科學與機器學習場景,這三大場景占據了客戶 80% 的數據分析需求。這三大場景的不斷發展,未來一定會將數據分析的需求推為企業 No.1 的需求。從各大咨詢調研報告來看,數據分析產品的增長依舊位列各種軟件產品的第一位。
本文選自《中國卓越技術團隊訪談錄》(2021 年第五季)。
整理 | 蔡芳芳、Tina
采訪嘉賓:
百度 Apache Doris 主創團隊
馬如悅、張志強、陳明雨、武云峰、楊政國、繆翎、魯志敬等
點擊進入獲得更多技術信息~~
總結
以上是生活随笔為你收集整理的从NoSQL到Lakehouse,Apache Doris的13年技术演进之路的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 9年当上架构师,我的很多想法变了
- 下一篇: 央视新闻联合百度智能云打造的首个“冬奥A