從“云原生”到“比Flink快十倍”:RisingWave的尋找自我認(rèn)知之旅

RisingWave作為一個(gè)從2021年初開(kāi)始開(kāi)發(fā)的流計(jì)算系統(tǒng),一直將自己定位于幫助用戶簡(jiǎn)單高效的構(gòu)建實(shí)時(shí)分析應(yīng)用。自從2022年4月正式以Apache 2.0協(xié)議在GitHub開(kāi)源后,RisingWave這一開(kāi)源項(xiàng)目不斷迭代,目前已經(jīng)在數(shù)十家不同規(guī)模企業(yè)中實(shí)現(xiàn)落地,并且每日的開(kāi)源部署(Kubernetes方式)量一直保持在數(shù)百。

盡管我們的產(chǎn)品一直按照我們自己預(yù)計(jì)的方向不斷發(fā)展,我們的宣傳口徑卻在過(guò)去的一年多時(shí)間中經(jīng)歷了多達(dá)5次的修改,可以說(shuō)是每?jī)扇齻€(gè)月便會(huì)更改一次我們的宣傳標(biāo)語(yǔ)。以下便是我們所用過(guò)的宣傳標(biāo)語(yǔ):
第一版:
RisingWave: a cloud-native streaming database.
第二版:
RisingWave: a streaming database in the cloud.
第三版:
RisingWave: a distributed SQL streaming database in the cloud.
第四版:
RisingWave: a distributed SQL database for stream processing.
第五版:
SQL stream processing with Postgres-like experience; more than a modern alternative to Apache Flink.
第六版:
SQL stream processing with Postgres-like experience; 10X faster and more cost-efficient than Apache Flink.
從公司角度來(lái)講,其實(shí)并不愿意頻繁改動(dòng)宣傳標(biāo)語(yǔ),因?yàn)檫@意味著需要不斷重新制作宣傳材料,并調(diào)整宣傳方式。然而宣傳標(biāo)語(yǔ)的改動(dòng)也意味著我們對(duì)自身產(chǎn)品定位的不斷更新。畢竟,一個(gè)新項(xiàng)目的誕生與發(fā)展,總是免不了重新認(rèn)識(shí)自我,尋找自己的位置。在本文中,我就來(lái)講講我們?cè)谶M(jìn)行這些改動(dòng)背后的心路歷程。
第一次改動(dòng):從“云原生”到“云上”
RisingWave最初的宣傳標(biāo)語(yǔ)是“a cloud-native streaming database"。這個(gè)標(biāo)語(yǔ)伴隨了RisingWave的整個(gè)2021年。那個(gè)時(shí)候并沒(méi)有人關(guān)注RisingWave,也沒(méi)有人關(guān)心RisingWave到底是什么。而當(dāng)我們逐步對(duì)外介紹RisingWave的時(shí)候,便發(fā)現(xiàn)了一個(gè)問(wèn)題:不少人對(duì)什么是cloud-native,也就是云原生,并不清楚。畢竟,云原生蘊(yùn)含了太多的含義:是否意味著RisingWave只在云上賣?還是使用了云上的基礎(chǔ)設(shè)施服務(wù)?還是說(shuō)可以用Kubernetes方式部署?還是使用了針對(duì)云更加友好的設(shè)計(jì)?當(dāng)聽(tīng)眾對(duì)一個(gè)關(guān)鍵詞產(chǎn)生各種各樣的猜想的時(shí)候,作為講者就非常艱難了:畢竟多數(shù)聽(tīng)眾并不希望花時(shí)間了解一個(gè)自己并不關(guān)心的產(chǎn)品。
基于此,我們做出了第一次改變:刪除“云原生”這一個(gè)關(guān)鍵詞,并直接描述成“云上”的流數(shù)據(jù)庫(kù)。這樣的標(biāo)語(yǔ)簡(jiǎn)明易懂:RisingWave是面向云所設(shè)計(jì)的產(chǎn)品。至于架構(gòu)是什么,部署方式是什么,等等問(wèn)題,就留給感興趣的聽(tīng)眾進(jìn)一步摸索吧 :-)
第二次改動(dòng):從“流數(shù)據(jù)庫(kù)”到“分布式SQL流數(shù)據(jù)庫(kù)”
將RisingWave的標(biāo)語(yǔ)改成“云上”的流數(shù)據(jù)庫(kù)之后,我們不再需要糾結(jié)如何解釋“云原生”這個(gè)關(guān)鍵詞了。但繼續(xù)向更多聽(tīng)眾解釋什么是RisingWave的時(shí)候,我們便發(fā)現(xiàn)了一個(gè)問(wèn)題:什么是“流數(shù)據(jù)庫(kù)”?流數(shù)據(jù)庫(kù)怎么用?那時(shí)候的我們還是非常堅(jiān)持的使用“流數(shù)據(jù)庫(kù)”這個(gè)名詞(并且一直使用到現(xiàn)在),但的確非常想傳遞給用戶使用RisingWave的方法。畢竟,作為一個(gè)流處理系統(tǒng),使用SQL的方式進(jìn)行交互可以大幅降低用戶的使用門檻,的確是個(gè)不錯(cuò)的賣點(diǎn)。
根據(jù)這些,我們決定將“SQL”這個(gè)關(guān)鍵詞加上,并且提及分布式,讓大家都知道RisingWave并非一個(gè)單機(jī)系統(tǒng)。這一小小的改變直接寫明了RisingWave的用法,讓我們?cè)谂c聽(tīng)眾溝通時(shí)的門檻降低了不少。
第三次改動(dòng):從“流數(shù)據(jù)庫(kù)”到“用于流處理的數(shù)據(jù)庫(kù)”
在宣傳標(biāo)語(yǔ)中放棄“流數(shù)據(jù)庫(kù)”這個(gè)關(guān)鍵詞是我們?cè)趫F(tuán)隊(duì)內(nèi)部做出的一個(gè)相對(duì)比較大的決定。這個(gè)決定是在2022年年底做出的。在使用了“流數(shù)據(jù)庫(kù)”這個(gè)名詞一年多的時(shí)間之后,選擇直接放棄,還是經(jīng)過(guò)了不少掙扎的。然而,選擇放棄“流數(shù)據(jù)庫(kù)”的原因也是顯而易見(jiàn)的:要解釋清楚什么是“流數(shù)據(jù)庫(kù)”真不容易!在2022年10月,我們已經(jīng)開(kāi)始從閉門造車走向了逐步對(duì)外落地,而在拜訪用戶的過(guò)程中,我們往往發(fā)現(xiàn)“流數(shù)據(jù)庫(kù)”這個(gè)詞給潛在用戶造成了不少的困擾。“流”往往意味著實(shí)時(shí),而“流數(shù)據(jù)庫(kù)”聽(tīng)起來(lái)給人感覺(jué)像是“實(shí)時(shí)數(shù)據(jù)庫(kù)”,也就是大家所熟知的ClickHouse、Apache Doris、StarRocks等實(shí)時(shí)分析數(shù)據(jù)庫(kù)。然而,RisingWave的定位與這些數(shù)據(jù)庫(kù)截然不同,并且,RisingWave在使用場(chǎng)景中與這些數(shù)據(jù)庫(kù)更屬于互補(bǔ)的關(guān)系。而如果我們將“流數(shù)據(jù)庫(kù)”解釋成“既是流處理系統(tǒng)又是數(shù)據(jù)庫(kù)”的話,又給人造成了不小的疑惑:這個(gè)系統(tǒng)到底是流處理系統(tǒng)還是數(shù)據(jù)庫(kù)?
與其為了堅(jiān)持使用一個(gè)名詞而增添大量不必要的解釋工作,還不如回歸第一性原理,使用最簡(jiǎn)單的方式給出最直白的解釋。因此,我們選擇了直接將RisingWave定位于“數(shù)據(jù)庫(kù)”,并且是一個(gè)“用于流處理的數(shù)據(jù)庫(kù)”。這樣一來(lái),我們?cè)僖膊恍枰獮榻忉尅傲鲾?shù)據(jù)庫(kù)”與“實(shí)時(shí)分析數(shù)據(jù)庫(kù)”之間的區(qū)別而煩惱,并可以專注在布道“流處理”這一概念上了。
第四次改動(dòng):從“數(shù)據(jù)庫(kù)”到“PostgreSQL與Flink”
第四次改動(dòng)發(fā)生在2023年的4月。當(dāng)RisingWave開(kāi)源一周年之后,我們已經(jīng)積累了一定的早期用戶,開(kāi)始尋找如何面向更大的潛在用戶群體布道RisingWave。從一對(duì)一向聽(tīng)眾布道,轉(zhuǎn)向直接面向群體普及,需要經(jīng)歷一個(gè)巨大的轉(zhuǎn)變:當(dāng)一對(duì)一與人溝通時(shí),我們常常有機(jī)會(huì)細(xì)致的解釋RisingWave,并針對(duì)用戶的具體場(chǎng)景給出解決方案。而當(dāng)面向群體普及時(shí),我們便不再可能進(jìn)行這種私下交流了。更重要的是,絕大多數(shù)個(gè)人并沒(méi)有足夠大的動(dòng)力去了解新興事物:每個(gè)人會(huì)更加自然的關(guān)心自身熟悉的內(nèi)容,并從自己的角度出發(fā)去理解外部的世界。
這一客觀事實(shí)讓我們對(duì)宣傳RisingWave的方式做出了徹底的轉(zhuǎn)變:與其解釋RisingWave是什么,還不如解釋RisingWave在用戶的世界中處于怎樣的位置。很顯然,對(duì)于絕大多數(shù)數(shù)據(jù)平臺(tái)工程師來(lái)說(shuō),PostgreSQL與Apache Flink是兩個(gè)相當(dāng)熟悉的系統(tǒng):PostgreSQL是數(shù)據(jù)庫(kù)的代名詞,而Flink是流處理的代名詞。RisingWave的使用方式幾乎與PostgreSQL一致,而其使用場(chǎng)景與Flink高度相似。既然如此,將RisingWave描述成“SQL stream processing with Postgres-like experience; more than a modern alternative to Apache Flink.”便顯得非常淺顯易懂了。
當(dāng)然,作為一個(gè)擁有十多年歷史的老牌流處理產(chǎn)品,F(xiàn)link在不少用戶心中還是有著一種象征意味的:正如當(dāng)年Hadoop象征著由MapReduce開(kāi)創(chuàng)的大數(shù)據(jù)時(shí)代一樣。盡管所有人都知道,那個(gè)年代所打造的產(chǎn)品終究無(wú)法在云時(shí)代繼續(xù)引領(lǐng)潮流,但作為后來(lái)者,在沒(méi)有足夠數(shù)據(jù)支撐的情況下,我們更傾向于用柔和的方式來(lái)描述與先驅(qū)者的關(guān)系。這也是第四次改動(dòng)將RisingWave的描述止于“more than a modern alternative”的原因。
第五次改動(dòng):從“Flink替換”到“比Flink快10倍”
在進(jìn)行第四次改動(dòng)后的兩個(gè)月,我們選擇再一次對(duì)宣傳標(biāo)語(yǔ)進(jìn)行改動(dòng)。而這一次,我們選擇了更加激進(jìn)的策略:直接指出“RisingWave比Flink快10倍”的這一結(jié)果。進(jìn)行這一改動(dòng)出于兩個(gè)原因:第一,RisingWave終于在這個(gè)月(2023年6月)發(fā)布穩(wěn)定版 - RisingWave 1.0版本;第二,在經(jīng)過(guò)數(shù)月的大量性能測(cè)試之后,我們終于可以非常自信的給出“比Flink快10倍”這一結(jié)論。
當(dāng)然,只要是對(duì)性能評(píng)測(cè)有所了解的工程師們都應(yīng)該知道,一切評(píng)測(cè)都是相對(duì)的:幾乎沒(méi)有系統(tǒng)能夠?qū)崿F(xiàn)在同等環(huán)境下比其競(jìng)品實(shí)現(xiàn)10倍性能提升。然而,經(jīng)過(guò)反復(fù)的實(shí)驗(yàn),我們得出了非常一致的結(jié)論:
RisingWave在簡(jiǎn)單stateless計(jì)算中比Flink實(shí)現(xiàn)性能提升10-30%;
RisingWave在復(fù)雜stateful計(jì)算中比Flink實(shí)現(xiàn)性能提升10-100倍。
考慮應(yīng)該使用更加保守的宣傳口徑,我們選擇了“10倍”這一數(shù)字。
事實(shí)上,RisingWave并非第一個(gè)實(shí)現(xiàn)比Flink快10-100倍的流處理系統(tǒng)。早在3年前,F(xiàn)link的原創(chuàng)團(tuán)隊(duì)TU Berlin數(shù)據(jù)庫(kù)組便拋棄Flink從頭開(kāi)發(fā)了新一代流處理引擎NebulaStream,并實(shí)現(xiàn)了10-100倍的提升(論文:https://nebula.stream/paper/zeuch_cidr20.pdf)。類似于NebulaStream,RisingWave相比于Flink實(shí)現(xiàn)了巨大性能優(yōu)勢(shì)的原因也是非常顯然的:
拋棄了JVM語(yǔ)言,使用了Rust這一高性能編程語(yǔ)言;
拋棄了類似MapReduce式的中間抽象層,直接對(duì)數(shù)據(jù)庫(kù)算子進(jìn)行深度優(yōu)化;
存儲(chǔ)感知計(jì)算,使用更好的存儲(chǔ)結(jié)構(gòu)來(lái)便于計(jì)算加速。
當(dāng)一個(gè)系統(tǒng)已經(jīng)有了充分的落地經(jīng)驗(yàn)以及詳盡的數(shù)據(jù)支撐時(shí),選擇直面前輩進(jìn)行挑戰(zhàn),才是對(duì)技術(shù)創(chuàng)新最好的致敬吧!
后記
本文梳理了RisingWave在過(guò)去一年多時(shí)間中經(jīng)歷的多次宣傳方式調(diào)整。這些調(diào)整的背后,便是RisingWave尋找自我認(rèn)知的旅程。相信隨著時(shí)間的推移,RisingWave會(huì)不斷地迭代宣傳標(biāo)語(yǔ),尋找到最適合的那個(gè)自我。
關(guān)于 RisingWave
RisingWave是一款分布式SQL流處理數(shù)據(jù)庫(kù),旨在幫助用戶降低實(shí)時(shí)應(yīng)用的的開(kāi)發(fā)成本。作為專為云上分布式流處理而設(shè)計(jì)的系統(tǒng),RisingWave為用戶提供了與PostgreSQL類似的使用體驗(yàn),并且具備比Flink高出10倍的性能以及更低的成本。