聊聊云原生數據庫
?回歸正題,前兩天有朋友在微信公眾號問我對云原生數據庫有沒有新的看法。實際上很多新興的概念,我的認知也是從模糊到逐步清晰,有個過程的。每過一段時間,對于一些問題的看法就會有些變化。特別是一些比較新的,沒有嚴格定義的數據庫領域的新名詞。
對于云原生數據庫的問題,我以前也寫過幾篇文章談了我的認知和看法,最近這段時間也有一些新的認識。云原生數據庫是國外云廠商最先提出來的,最著名的是亞馬遜的aurora。我剛開始的時候把云原生數據庫和RDS搞混淆了,認為云原生數據庫是RDS換了個更為高大上的名字而已。后來仔細研究以后發現不是那么回事,國外的一些云原生數據庫真對得起“云原生”這三個字。
首先,這些數據庫可以像其他云資源一樣便捷交付,包括可以支持自服務。這個特性與RDS是十分類似的,RDS可能在某些方面會做的比云原生數據庫更好。
其次是資源的動態調度能力,云原生數據庫在CPU,內存,存儲容量,IO能力等方面都可以十分便捷的動態調度,可以隨著業務增長不斷交付新的計算能力,在這方面,云原生數據庫比RDS更為強大。
這些都是我們用戶能夠看到的能力,實際上云原生數據庫與普通的RDS的區別不僅僅如此。云原生數據庫充分利用云底座的能力構建起支持提供云服務的能力。數據庫與云底座的能力的有機融合是云原生數據庫區別于其他數據庫的最為主要的特征。云廠商也會為了增強云原生數據庫的能力而在云底座上進行優化與擴展,使其能力能夠更好的支撐云原生數據庫。
不是隨便一個數據庫從物理機搬到云環境里,做一些運資源調度的接口,通過云平臺能夠向外提供數據庫服務,就可以說這個數據庫是云原生數據庫了,這種數據庫頂多算是RDS之類的數據庫服務,不能算是云原生數據庫。
我們還是以Aurora這個云原生數據庫的鼻祖級的數據庫來分析一下這個問題。Aurora支持Mysql和PG等數據庫,實際上也是使用開源的數據庫作為基礎研發的,我們今天以Postgresql為例。雖然Aurora也使用了PG的開源社區代碼作為基礎,但是Aurora對PG做了適應云的改造,那就是日志即數據庫概念的改造,通過WAL回放,Aurora可以實現基于共享存儲的一寫多讀。在一個Aurora PG實例中寫入的數據,可以在多個(目前最多16個)只讀PG實例中立即讀出,而不需要做數據庫復制,因為底層的數據文件是共享的。利用云底座的云存儲服務,一方面Aurora可以從多副本的云存儲中通過均衡IO負載,從而提升IO的整體能力,Aurora還可以實現低延時的存儲級的數據庫復制,配合WAL回放進一步擴展數據庫的能力。
Aurora在CPU、內存容量上的擴展可以通過只讀實例去做橫向擴展,IO容量可以通過云底座的云存儲去動態擴展,IO處理能力還可以通過云底座的多副本機制去做擴展。數據庫與云底座的深度融合是Aurora作為云原生數據庫的基礎。向上的那些通過云平臺向外提供的服務能力實際上只是應用層的了,和RDS區別并不大。
這里有一個觀點,那就是云原生數據庫一定是要和具體的云深度融合的,亞馬遜的Aurora不可能在谷歌云上運營,谷歌云上只能運營AlloyDB之類的競品。
如果以Aurora為參考來看我們國內的一些云原生數據庫,就更容易看明白了,不管是集中式數據庫還是分布式數據庫,不能說能在云上跑就算是云原生數據庫。如果我們把某著名的國產數據庫按照RDS的方式納管到某個云平臺上,能夠像云平臺內的云原生數據庫一樣方便的使用,我們還是不能把這個數據庫叫作云原生數據庫,頂多就是RDS。因為數據庫和云底座在本質上并沒有深度的融合,云底座并沒有針對數據庫做相應的優化,數據庫也沒有為了更好的使用云底座的能力而做相應的優化改造。
再過兩天就要過年了,我也準備休息休息。過年期間寫一些吃喝玩樂的心得,放松放松心情。過去的一年過得不容易,希望新的一年一切順利。?