數據庫應用需要什么樣的云原生能力
?原本早上起來想寫點什么的,不過這些天一直覺得有點乏力,早上起來啥也不想干。吃過午飯才感覺好一些。正好腦子里在想些問題,就立即把它寫下來吧,否則有可能這種一閃念的靈感就消失無蹤了。
前兩天有個客戶問我啥叫云原生數據庫,我給他講了半天,他聽的還是有點云里霧里,最后說,這東西聽起來確實不錯,不過對于我們這種企業來說,用處并不大。確實是的,像他們這種央企的二級子公司,一共就二十來套數據庫系統,談得上大系統的幾乎沒有。我給他介紹的云原生數據庫的好處,對他們來說確實也沒有太吸引人的地方。
國外的云原生數據庫在公有云上運營的較多,如果我的這個客戶在國外,選擇購買云原生數據庫服務應該是首選,不過在國內,受到一些數據安全方面的限制,無法采購公有云服務。國內的所謂云原生數據庫往往都不是構建在公有云上,通過數據庫服務來獲利的。只要是能夠橫向擴展的,能在云上跑的數據庫,都可以打出云原生數據庫的旗號來。
實際上對于云原生數據庫,也沒有特別恰當的定義。我認為能夠與云平臺緊密融合的,能夠像云上的標準組件一樣提供服務,并且具有與云平臺一樣的橫向擴展能力的數據庫產品,都可以稱為是云原生數據庫。那么一個云原生數據庫產品應該有哪些能力呢?
首先是要符合“云”的特點,具有極強的自服務能力,即買即用,即申請即用。讓數據庫服務可以像云主機或者云上RDS一樣便捷的申請,申請完成后可以實現秒鐘級或者分鐘級快速交付。這一點實際上實現起來并不難,普通的云上RDS也是這樣實現的,數據庫軟件安裝在裸金屬服務器上,需要時創建數據庫實例,并綁定相應的資源即可。
其次是彈性可擴展能力,云的特點就是彈性可擴展,不受單機硬件資源的限制。談到彈性可擴展,大家往往就會直接想到分布式數據庫。如果按照這個標準,難道只有分布式數據庫才算是云原生數據庫嗎?實際上情況并非如此。彈性可擴展其限制并非只有CPU,內存這些具有單機上限限制的資源。在上云的絕大多數數據庫應用里,這方面存在限制的寥寥無幾。存儲的IO能力,IO延時實際上對于很多應用來說更為重要。這也是目前用戶對云原生數據庫產品詬病較多的地方。如果我想購買1TB的存儲容量,但是我需要5萬IOPS,那么不好意思,我沒法賣給你,我們的的IOPS是按照5000/TB來賣的,你必須買10TB的容量才能買到5萬IOPS。云原生數據庫產品應該能夠和云平臺緊密融合,并利用云平臺的彈性可擴展能力來為用戶提供不同選項的配置。亞馬遜的AURORA可以通過讀寫分離來提供CPU資源的橫向擴展能力,并且通過云平臺的底層存儲機制動態復制副本,擴充IO能力,從而滿足不同種類的業務需求。因此一個數據庫產品號稱是云原生的,數據庫與云底座之間肯定不是簡單的疊加部署的關系,必須做大量的優化適配工作才能做好的。
第三是高可用,利用云平臺的高可用能力,加強數據庫的可用性。數據庫產品本身就有高可用解決方案,云平臺也有,但是二者可能不完全兼容,因此云原生數據庫在云上必須與云底座做更好的融合,綜合雙方的優勢才能夠形成最佳的解決方案。
第四是跨數據中心高可用能力,無論是私有云還是公有云環境,一朵云總不可能是永遠不會出問題的。因此作為云原生數據庫產品,必須能夠支持這種跨數據中心的,跨云的高可用。
第五是彈性資源調度能力,上云的最終目的還是為了不斷地降低企業的IT成本,我們的企業中,經常會存在某套系統,峰值資源需求極大,但是峰值應用往往只是月底月初的幾天,但是為了不出問題,我們必須為其配置最大的資源。資源動態調度,動態擴縮容目前還沒有成為大多數大型企業的剛需。不過地主家也會缺錢的,隨著數據庫的爆發式增長,未來動態縮容也會成為剛需的。
和國外不同,我國的企業級應用大多數還是部署在私有云環境的,甚至還有一些像本文開頭說的那家企業一樣,如果為了享受云原生數據庫的一些便利,還非得上一套復雜的云底座,那么就比較麻煩了。因此如果云原生數據庫廠商能夠提供一套小型的云數據庫底座,那么對于用戶來說就十分友好了。不必像Oracle Database Cloud一樣連硬件都配置好,只需要提供一套通用硬件環境的小型云底座即可。還有一些數據庫廠商并不是云平臺廠商,他們想和某個云廠商合作,人家也不見得搭理你。既然云不來就你,數據庫廠商可以自己去就云啊。自己開發一個數據庫云底座,作為一個完整的解決方案去為客戶服務也是不錯的方式。
這幾天腦子還是有點亂,今天也是想到哪寫到哪,總之我的觀點是云原生數據庫的需求是強烈存在的,但是我們目前的號稱云原生數據庫的產品大多名不副實,數據庫廠商也不能只是喊喊口號,而應該讓你的產品變得真正像是云生的。?