天天看點

論分布式資料庫TiDB架構的“存”與“算”

作者:何朝洋​

在雲計算基礎設施IaaS服務中,“存”與“算”的分界是清晰的,客戶會分别為“存”與“算”按需消費。不隻是專門的存儲服務如S3、對象存儲、檔案存儲、NAS等,即使是在最基本的虛拟機服務ECS上,“存”也需要由消費者進行選擇,而選擇的對象是雲盤,即位置對使用者透明,不需要消費者關心是否在計算節點的本地:其實連計算節點本身位于何處也是無需關心,又何談本地。随着雲計算服務的持續發展,“存”與“算”的界限,無論是從消費模式上,還是從技術上,都呈現出越來越清晰的趨勢。

而在PaaS層的資料庫服務中,則出現兩種情況。一種是“存”與“算”也由消費者分别選擇并擴縮,而另一種則是購買服務時,“存”與“算”是固定捆綁的架構組合,可以定義大小,但無法相對獨立地選擇、部署與擴縮。

引發上述資料庫服務不同消費模式的因素,實質上是在雲中部署的資料庫産品本身不同的技術架構,即“存”“算”分離,或“存”“算”一體。由于對單體資料庫談“存”與“算”的分離與一體,并沒有多大意義,是以,主要是針對分布式資料庫而言,其不同的特性帶來了業界較為廣泛的讨論。

那麼,首先分析一下,在“存”“算”基礎設施愈來愈獨立清晰的趨勢下,建立在其上的資料庫服務“存”“算”一展現象從何來呢?不難發現,雲平台上這樣的資料庫服務,大多都是基于“從非雲環境中、應企業級On Premise需求産生與發展而來”的資料庫産品。也就是說,其産品本初的設計理念就與“雲”無關,隻是後來為了尋求不同的商業模式而部署在雲上而已;而大多數“存”“算”分離的資料庫産品,其創始之初,就面向雲環境進行設計,其中最典型的就是雲原生分布式資料庫TiDB。這裡,順便澄清一下現在極為流行的雲原生概念,相當多的人混淆了雲适配部署與雲原生的概念,認為隻要部署在雲上,就是雲原生了。其實雲原生的概念與其字面意思極為直白契合,就是指在“雲環境”中“原生”的,而不是從别的地方遷來的,即**“雲原生”就是生長于雲上的,而非雲原生則是遷移到雲上的,這也正是TiDB差別于同類産品的設計初衷與架構特點**。這與要深入了解目前同樣火熱的NFT,就必須先正确了解“區塊鍊原生”概念的道理是一樣的。

相信現在,關于“雲”的問題應該是比較清晰了:“存”“算”分離是雲原生的架構,而“存”“算”一體則不是,這一點相信讀者不會有太多的疑問。那麼,接下來的問題是:“雲原生”就一定好嗎?面向企業級的需求,“存”“算”分離與“存”“算”一體孰優孰劣?

世界上本來就沒有絕對的好與絕對的壞,“存”“算”一體架構的設計,也是在滿足企業需求的過程中自然産生的,對分布式資料庫而言,“存”“算”一體的設計,無論是對傳統單體資料庫的替代上,還是對采用業務單元化政策的局部性滿足上,還是對基于已有成熟資料庫體系以二次開發建構分庫分表資料庫産品的友善性上,都産生了積極的曆史作用。在那種情況下,不去考慮“雲”的趨勢與設計需求,也是合理的。

然而,過去幾十年的曆史已經證明,計算機技術的發展是極為迅速的,無論是軟體還是硬體,當然包括資料庫技術同樣如此。

首先,往遠處看的話:從計算機科學發展的角度,在雲計算大趨勢的驅動下,“計算”與“存儲”技術相對獨立的發展道路已經越來越明顯,越來越清晰。可以想見,未來“計算”力相關的技術、架構與産品必将會發展到比如今所有極為先進的狀态;未來“存儲”相關技術、架構與産品也必将會進展到一個無法完全預計的嶄新階段,同時越來越“智能”。并且從目前的形勢看,這個未來并不會太久遠,如TiDB這樣的“存”“算”分離架構無疑是适合那個未來的各種可能的,因為它本身就是為此而原生的,而“存”“算”一體在未來或許将變得無從談起;而從國際上先進資料庫技術發展的實際情況來看,絕大多數嶄新的、最前沿的資料庫相關技術與産品,都是雲原生的,換句話說,都是采用“存”“算”分離的架構,這一點,幾乎少有例外;而近期TiDB Cloud産品與相關的雲營運政策釋出與實施以後,為了在存儲與計算層面都能很适配各種優秀的雲基礎設施,“存”“算”分離的架構就顯得更加必要與先進了。

(或許可以猜測,把磁盤挂在本地這種現存商業計算機的架構,也是由企業/個體對計算機使用的商業模式驅動的,而不一定是技術驅動的必然結果)

其次,往近處看:對企業級現階段數字化轉型中,傳統單體資料庫替換的緊迫需求而言,大量的事實已經證明,TiDB“存”“算”分離的架構的雲原生架構的資料庫完全可以滿足各種實際的業務轉型需求:

. 對于企業線上彈性伸縮的業務發展需求,多地多中心多活的可靠性需求來講,雲原生架構無疑是最為得心應手的,因為這本就是其設計的初衷;

. 對于企業業務運作的性能訴求,首先從架構上并沒有分布式架構中“存”“算”分離就劣于“存”“算”一體的技術理由;同時,近年來國際上雲計算基礎設施(存、算、網)的高速進展以及其上雲原生資料庫驚人的性能飛躍事實,也證明了雲原生資料庫的高性能與無限發展潛能;或許有人說“存”“算”一體同時還可以相容單體資料庫的優勢,1. 試問,在新一代業務發展更新對分布式資料庫提出強烈訴求的前提下,單體資料庫的适配還有意義嗎?2. 其實,雲原生資料庫廠商如果想做,也完全可以實作對單體資料庫的相容。但大多數的雲原生資料庫開發者并不想做這樣的事情:有開發帶寬為什麼不用在更有意義的進展上呢?

. 對于從傳統資料庫時代就一直強調的、CPU級别的多租戶功能,試問:在現階段K8S容器化雲計算标準環境進展普及如此迅猛的時代,這個級别的多租戶還有意義嗎?其實還是同樣的邏輯,這樣的功能開發也并不困難,雲原生的廠商應該也不會把帶寬優先放到這裡來;

. 對于企業降本增效的訴求,“存”“算”分離不但可以各自根據“計算”與“存儲”不同的發展速度(多數情況下各有增長快慢)與不同的服務級别要求(有的是計算要求高,有的是資料量大)靈活設計各自的方案規模,同時,對于脍炙人口的通過資料壓縮“降本”,很明顯也是“存”“算”分離能夠真正産生降本的實效,因為它可以把“降本”與“增效”分開來看,而不是“降本”的同時必須“降效”,那這種降本的意義就會大打折扣。

例子還有很多.......

還有一個比較重要的方面: TiDB一直認為自己最開始并不是面向開發一個資料庫而設計的,其最初的價值觀就是提供未來社會的新一代“資料服務平台”,是以它更加需要一個“存”“算”分離的設計架構,而不是傳統資料庫領域最常見的存算一體。

最後還有一點需要強調:除了TiDB Cloud之外,對于其它将“雲”政策當成技術與業務核心發展戰略的企業來講,雲原生架構無論是面向現在與未來,自然是最為适合的;