你說你說云生的,云同意嗎?
現在的數據庫產品不僅數量多,種類多,新概念也多,一個不小心就能被繞進去。最近這幾天,我來做些功課,分析一下云原生、HTAP、AI4DB/DB4AI等目前紛紛擾擾的概念。今天先聊聊這些年十分熱門的云原生數據庫。
可能很多朋友對云原生的概念理解的不是十分清晰,對“云原生數據庫”(Cloud native database)和“云就緒數據庫”(Cloud Ready Database)這兩個概念比較模糊。這些年我們上云了,在云上用RDS(關系型數據庫服務),可以做到DBAAS,想用即用,但是很多RDS都只是Cloud-ready,云就緒的,而不是云原生的。
目前業內對云原生數據庫的概念定義也十分模糊,很多企業都是自己說自己是云原生數據庫,然后根據自己的特點來定義云原生數據庫的概念。實際上云原生的概念最初是容器廠商提出來的,后來才被廣大的分布式數據庫廠商引用,現在幾乎所有的國產分布式數據庫都號稱自己是云原生的。我們先不談云原生到底是個什么概念,從云原生數據庫出現的目的來看看云原生數據庫應該具有的特征與能力吧。
云原生數據庫是為了應用全面運行于云上而設計的數據庫產品,其提供了云上其他的IT基礎設施類似的特征,包括數據庫服務開箱即用、高可擴展性、彈性、健壯性、資源隔離、自動化、簡化管理、低成本以及區域可訪問性。
某些傳統數據庫,比如Mysql、PG、Mongodb雖然也可以與云平臺高度集成,并以RDS服務的形式在云上提供服務,但是其本質并不是為云而設計的,因此并不能直接稱為云原生數據庫,而只能說是“云就緒”數據庫。
有些數據庫,特別是現在的大多數分布式數據庫,在設計上都借鑒了云的特性,并且盡可能符合云部署架構,但是它們并不能與云平臺很好的融合,利用云平臺的彈性資源能力獲得更好的擴展性和彈性,并利用底層的云平臺的能力獲得高并發、低延時、穩定的數據庫服務能力。這樣的分布式數據庫,如果非要說是云原生的,也是比較牽強的。
從嚴格意義上講,云原生數據庫是與云平臺高度融合的,在設計時就已經考慮了依靠云底座的能力的分布式數據庫系統。通過云架構的資源解耦、資源池化等設計,具備了高彈性、高可用性、可擴展性等特點。其彈性不僅僅在于橫向擴展,而是更高要求的彈性伸縮,當業務負載高時可以擴容,業務負載和需求低時可以快速縮容,這樣才可以更好地實現成本最低。從健壯性上看,云原生數據庫必須能夠在系統故障后不丟失任何數據。當系統的某個部分出現故障時,云原生數據庫可以在運維人員不干預,不影響業務的情況下自動修復。
從管理方面,云原生數據庫的重要特性是資源隔離、自動化、簡化管理和低成本。資源隔離是云原生數據庫的一個更為重要的特性,云原生數據庫可能為很多應用服務,因為數據庫中的各個租戶會共享大量的資源,因此隔離十分重要,任何一個應用的故障都不能影響其他應用,這才能確保云原生數據庫提供良好的服務能力給應用。自動化,自助服務是云基礎設施最為重要的特性之一,云原生數據庫也應該為用戶提供此類能力。
簡化管理應該是云原生數據庫的一個最為重要的能力,只不過現在的大多數云原生數據庫在這方面做的都不夠好,一個優秀的云原生數據庫應該把所有的管理都與云平臺高度集成,利用云平臺的管理能力來管理云原生數據庫,對于用戶來說,不需要為數據庫的性能、可用性、數據安全、故障處置去操心,這一切都應該在云平臺層面很好的解決了,甚至自動化完成了。
區域可訪問性是云原生數據庫需要提供的另外一個重要的能力,這個能力讓用戶可以隨時隨地訪問數據。用戶的應用可能會隨著云而遷移,甚至切換到一個異地數據中心,數據庫的訪問能力也必須能夠不受應用的遷移的影響,也應該自動的提供訪問能力。不管底層是如何實現的,能力是必須具備的。
從上面的描述來看,云原生數據庫實際上是和云底座緊密相關的,并不是把一個分布式數據庫部署到某個云上,就算是云原生數據庫了。數據庫產品必須在底層設計,資源分層的時候就和云底座的資源池化技術相兼容。因此一個通用的第三方數據庫產品要成為一個完善的云原生數據庫,必須是支持多云部署,云異構部署的。實際上最初的云原生數據庫都是以公有云或者私有云的方式供應的,因此在這方面都做了深度的適配。現在問題來了,傳統的數據庫廠商也在做云原生數據庫了。那么這些數據庫是如何做到云原生的呢?我想可能還是以喊口號為主吧。
實際上我們也不需要糾結數據庫是不是云原生,能夠與云上的應用很好的配合,并且滿足我今天所說的一些云原生數據庫的主要特征,并且在數據庫內核中對云平臺的資源供給不穩定性、IO延時不確定性等做了很好的處理,這樣的數據庫系統,就是“云友好”的數據庫,云友好的數據庫系統,對于企業的應用上云也就夠用了。也不一定非要追求什么“云原生”了。真正的云原生數據庫很可能是“云鎖定”的,你選擇云的時候,可能就捎帶腳把數據庫也已經選好了,或者說你要選擇云原生數據庫,那么你的選擇權就被剝奪了。這又何苦來哉呢?