編者按:本文轉自鈦媒體,作者桑明強,創業邦經授權轉載。
“云計算無疑是今天名列第一的計算趨勢 ,在數據庫領域同樣如此 ??蛻粼絹碓较矚g云模式的按計算、彈性和幾乎無限的規模擴展以及低成本的安裝和管理 ?!睍r任微軟SQLServer中國研發團隊總經理的Prakash Sundaresan 孫博凱(現為微軟亞太研發集團首席技術官)在主題為“數據庫新征途—關系數據庫40年”的圓桌對話環節上表示到。那一年,是2010年。
也是在那一年,云計算技術的興起讓整個數據庫市場呈現暗流涌動的狀態,表現在以AWS Aurora為首的美國數據庫公司和以阿里云為首的中國數據庫公司紛紛開啟了數據庫上云的新時代。在這個階段中,他們利用平臺管控的優勢,將用戶存儲在傳統單機架構下的數據逐步遷移至云端,云原生數據庫的雛形初顯。
在距離孫博凱那段發言4年之后,AWS發布了業內首個云原生數據庫Aurora。在3年后的9月份,阿里云在國內率先發布了云原生數據庫PolarDB,并于2018年4月正式商用。
同年11月,騰訊云也緊隨其后,發布了新一代自研云原生數據CynosDB,“CynosDB的推出對于豐富騰訊云數據庫產品矩陣,提升騰訊云的產品技術能力具有里程碑的意義,同時,良好的兼容特性和極致性價比,將大大推進企業的’上云’進程。”騰訊云數據庫產品總監祝百萬在發布會上談到。
作為深諳“快速迭代”是產品研發范式演進之道的互聯網科技公司,阿里云旋即于今年5月21日發布了PolarDB的重大更新,“提供傳統數據庫一鍵遷移上云能力,幫助企業將線下的MySQL、PostgreSQL和Oracle等數據庫輕松上云,最快于數小時內遷移完成?!睋⒗镌品矫婢_計算,數據庫的云上成本不到傳統數據庫的1/6,截至當天,已有將近40萬個數據庫到阿里云上。此外,阿里云智能數據庫事業部負責人李飛飛在發布會上表示,“自70年代的關系型數據庫開始,迄今為止已經有50余年的歷史了,眼下的數據庫已經到了一個變革的關鍵節點,即從馬車時代到汽車時代的更迭?!?/p>
數據庫市場的格局正悄然發生改變
趨勢之下,往往預示著新技術在成本、技術上占絕對的領先優勢,對舊技術而言,這注定是一場被圍剿的行動。美國知名科技領域分析機構Gartner曾預測,到2023年,全球3/4的數據庫都會跑在云上。換句話說,在接下的5年時間內,過去以線下數據庫為主導的市場態勢將逐步演進到以云原生數據庫為導向的市場新態勢。
傳統商業數據庫市場未來預計將呈現下滑趨勢 數據來源:Gartner,安信證券研究中心
以傳統數據庫市場為例,市場運作的基本模式為售賣傳統軟件許可證,線下用戶根據需求則需要按“核”購買,一“核”一年的費用約為20萬元,這其中還不包括后期的升級數據庫的費用,高昂的初期部署的成本將大多數初創公司拒之門外。不久之前,Oracle就曾與國內某大型央企展開過曠日持久的談判,在售賣產品的基礎上,試圖讓其一次性繳納6000萬的服務費。
可以感受得到的是,過去幾十年是傳統數據庫的高光時刻,根據相關數據顯示,截至2017年數據庫市場總規模高達368億美元,其中傳統數據庫一度占比逾80%。但隨著傳統數據庫的日漸式微,讓企業不得不轉投云原生數據的懷抱,表現為近幾年傳統數據庫份額在逐年下降。據第三方機構統計,到2021年,傳統商業數據庫市場將下降20%至30%。阿里云智能數據庫事業部負責人李飛飛表示,“94%阿里云上的頭部客戶正在使用我們阿里云數據庫服務,云上數據庫的使用率和阿里云頭部客戶交叉率是非常好的。”由此不難看出,原本傳統數據庫堅實的防線正在被云廠商撕裂,交接將是時間長短層面博弈的問題。
從MongoDB的營收構成中也可一窺端倪。2016財年,Atlas營收占比只有1%;2017財年中已經提升至7%;而到2018財年第一季度,在總營收中的占比已經達到了11%。MongoDB Atlas,是其與公有云服務廠商合作,自身團隊為客戶部署所打造的云數據庫。Atlas營收迅速增長,可以反映出市場對于這種數據庫云化模式的認可。
從技術便捷性的角度來分析,緣由傳統數據庫要跟現在的物理機器綁定,加之其已歷經50余年的“用戶需求修改蠶食”,其內核已經變得尤為紛繁復雜,這也直接導致其迭代的速度變得十分緩慢。與此同時,當用戶的業務需求容量大于此前的預估容量時,彼時傳統數據庫較低的可擴展性能則顯得捉襟見肘。相比之下,云原生數據庫天生所具備的云計算的彈性能力以及開源數據庫的易用、開放特點卻讓其在互聯網的“數據大爆炸時代”之下適應地游刃有余。
與此同時,互聯網時代所帶來的爆炸性增長的數據量和愈加繁復的數據類型將迫使企業 IT 架構從傳統商業軟件進化為互聯網架構,進而應對不可預測的峰谷流量和業務的快速創新。在《淘寶技術這十年》一書中,阿里技術人員回憶到,2004年左右,技術人員們花錢如流水,買得IOE(IBM的小型機、Oracle數據庫、EMC存儲設備)這三家的對口銷售年年升職。淘寶從起初的一個單機傳統數據庫、到4個節點、16個節點,最后到20個節點,成為是彼時全球最大的Oracle集群。
然而,兩個致命的問題直接鎖住了國內意欲打造自由傳統商業數據庫的可能性,其一是當直面龐大的消費者人群基數所帶來的更為復雜的數據類型時,傳統商業數據庫的改造性較差;其二,傳統數據庫的核心技術掌握在少數企業手中,安全問題存在極大的不確定性,這里可以參考后期斯諾登所爆出來的棱鏡門事件。
在這樣的大環境之下,一旁的IOE則顯得格外突兀,對于大多數富有前瞻性和自衛性(保持競爭力)的數據庫公司來說,一場去IOE運動迫在眉睫。在去IOE化的過程中,最為重要的一點就是建立與支撐系統云化配套的運行維護管理體系。對于阿里來說,引入云計算技術在讓計算資源得以靈活調配的同時也帶來了一些不確定性。傳統的分工界面、工作流程以及應急預案都會隨著系統云化程度的加強而逐步變化,尤其在對軟件的維護方面,這將是一場顛覆性的考驗。
改造首先從接入層實施了全面的云桌面正式開始,緊接著是對CRM系統的接入模塊和BOSS系統的帳詳單存儲工作進行云化試點。除了對硬件的虛擬機和X86化改造,阿里云也聚焦于基于分布式數據庫和開源數據庫的應用軟件改造,在一些新建的生產系統中,全部采用云計算技術進行系統建設。對于阿里來說,這不亞于進行一次“脫胎換骨”療程。換骨之后則是新生,在去年的雙11零點的第一秒,于這一秒內云數據庫內以極致的彈性頂住了瞬時增長一百倍的洪峰,同時也支撐起去年的雙11,高達2135億的銷售額。
云原生數據庫的架構之變
想要參透云原生數據庫,首先要回歸產品本身所扮演的角色。如今處理數據不再是僅僅靠算力,主要集中于對智能化算法的研究,而算法又與用戶的需求息息相關,進而演進出云原生數據庫的框架,即“完整的基礎設施云化、核心技術的互聯網化以及疊加’大數據+智能化’的平臺”。循著云原生數據庫的框架再對其進行提煉,核心脈絡的三要素逐漸變得清晰,即“云計算在框架中僅作為基礎算力;行業算法是智能化處理數據的主要工具;形成’數據+智能花的平臺’的前提是基礎設施的云化和核心技術的互聯網化?!痹偕钊胍徊剿伎荚圃鷶祿斓哪P?,不難聯想到原生數據庫所扮演的其實是“數據中臺”的角色。
那么,什么是“數據中臺”?即通過數據技術,對海量數據進行采集、計算、存儲、加工,同時統一標準和口徑。數據中臺將數據統一之后,會形成標準數據,再進行存儲,進而形成大數據資產層,從而為客戶提供高效服務。以阿里云 PolarDB為例,其在原有的RAFT協議的基礎上開發了一種全新的共識協議(ParallelRaft),在保障數據一致性的前提下,遵從共識協議提升了PolarFS并行寫入性能,在高負載情況下,達到平均延遲縮短一半、系統吞吐量翻倍的效果。這也解釋了為什么PolarDB不再是一件單一的產品,而是充當一套完整的生態框架協助企業將數據庫遷移上云。對此,阿里云數據庫產品總監曹偉對鈦媒體表示,“提供智能是數據庫的未來發展方向,PolarDB將在后續版本中繼續圍繞“數據中臺”這一概念,向用戶提供多維分析和分析計算能力?!?/p>
與此同時,厘清云數據庫的架構方向也是理解云數據庫本質的關鍵所在。當下多模架構成為云原生數據發展的主流趨勢,即在一個數據庫平臺支持多種存儲方式,包括滿足應用程序對于結構化、半結構化、非結構化數據的統一管理需求。一般來說,結構化數據特指表單類型的數據存儲結構,典型應用為銀行核心交易等傳統業務;半結構化數據則在用戶畫像、物聯網設備日志采集、應用點擊流分析等場景中得到大規模使用;而非結構化數據則側重于海量的的圖片、視頻、和文檔處理等業務,主要應用在金融科技方面。多模架構在降低使用和運維的成本同時,也完成跨部門、跨業務的數據統一存儲與管理,從而實現多業務數據融合,支撐起多樣化的服務。
此外,“計算-存儲層”分離現已演進成主流的技術方向。那么,何謂“計算-存儲層”分離?即將協議解析、計算等模塊與底層存儲解耦,數據庫云平臺再將存儲層進行分片以實現存儲的彈性水平擴張,同時通過計算層的無狀態設計允許計算層通過增加節點數量線性提升計算能力,從而整個數據庫云平臺的彈性水平擴張。簡而言之,是指數據庫的存儲引擎和SQL引擎兩部分互相松耦合獨立工作的架構。
一般來說,這種類型的分離架構由存儲、SQL和元數據三個模塊組成。存儲層是數據庫的存儲引擎,負責處理數據的存儲管理,同時包含路由及事務控制,保障數據的ACID特性,除此之外,存儲層還應還具備索引、查詢條件過濾、排序等一系列功能;SQL層為中間件層,主要負責處理SQL請求,上層對接應用程序,將應用程序的訪問請求分發給存儲層,并接收存儲層返回的數據結果;而元數據區負責存儲整個數據庫的所有元數據信息。目前AWS Aurora在SQL訪問的單一過程上也采用了類似的架構。
數據來源:安信證券研究中心整理
無獨有偶,阿里云 PolarDB通過利用高速網絡做到分布式共享存儲,從而達到“計算-存儲層”全面性的分離。這種分離架構到來的直接影響是對存儲節點和技術節點進行彈性索擴容,緣由技術節點具備一寫多讀的功能,進而滿足云原生數據庫時代用戶在云上按需、按量使用、極致彈性等一系列在“馬車時代”的傳統數據庫所不能提供的服務。正是基于此架構的上的技術優勢,讓阿里云 PolarDB在sysbench(一款開源的多線程性能測試工具,可以執行CPU/內存/線程/IO/數據庫等方面的性能測試,目前是業界標準的測試評估工具)中拔得頭籌——“與傳統數據庫相比,阿里云 PolarDB多達十倍性價比;與國外領先的廠商(如AWS Aurora)相比,阿里云 PolarDB在某些情況下性能達到前者的兩倍。”
若技術層面來分析,阿里云 PolarDB采用的計算和存儲分離架構讓“計算—存儲”資源池化。數據庫通過計算節點運轉,計算節點則組成了計算資源池;數據都存儲在存儲節點之上,同時存儲節點也組成了一個存儲資源池。當CPU和內存不能匹配需求時,可以擴充計算資源池,當容量或IOPS(每秒進行讀寫)不能匹配需求時,則可擴充存儲資源池,這兩個池都是按需擴容,而且存儲節點和計算節點可以沿著兩個方向進行優化。
反觀傳統數據庫部署模型則是一種煙囪模型,一臺主機既要跑數據庫又要存取數據,性能交叉之下帶來兩個問題。其一,緣由CPU和磁盤的配比主要取決于實際業務的需求,很難提前找到最優比例,直接導致難以選擇最為匹配的機型;其二,帶來了磁盤碎片問題,在一個生產集群中存在部分使用率極低的機器磁盤,有的甚至不到10%,但出于業務穩定性要求,這些機器磁盤會獨占主機的CPU,對于主機的資源分配來說,這是一種極為奢侈的資源浪費。通過存儲資源池化,這兩個問題都能得到解決,SSD的利用率得到提高,成本自然也降低下來。
若從存儲成本的只讀實例來分析,緣由傳統數據庫做只讀實例。所謂的實施“一寫多讀”方案,即通過搭建只讀副本的方案,先拷貝一個最近的全量備份恢復一個臨時實例,緊接著讓臨時實例連接主庫或者其它binlog(二進制日志)源同步增量數據。當數據增量追上時,則將臨時實例加到線上升級為一個只讀副本。這種方式存在兩個問題,一方面是耗時,搭建一個只讀實例需要的時間往往與數據量成正比;另一方面費用昂貴,這其中需要增加一份存儲的成本,例如當用戶購買一個主實例加上五個只讀實例,則需要付7~8份存儲的錢(其中是7份還是8份主要取決于主實例是兩副本還是三副本)。
而在阿里云 PolarDB架構之中,這兩個問題都得以很好的解決。其一,新增只讀實例無需拷貝據,云原生數據的優勢讓無論多龐大的數據量都可以于2分鐘之內創建出來;其二,主實例和只讀實例共享同一份存儲資源,通過這種架構去增加只讀副本,可以做到零新增存儲成本。此時,用戶只需支付只讀實例消耗的CPU和內存的費用即可。
來自實際場景應用對比之下的數據往往顯得真實的多,作為2007年全國第一家在港交所上市的零售行業的代表銀泰百貨,高額的數據庫運維成本對銀泰來說無異于一杯難以下咽的苦酒。據披露,銀泰僅在2016當年光線下數據庫成本已經達到了千萬級別以上。于是乎銀泰決定把會員庫遷移到云原生數據庫平臺,這一舉動也讓銀泰收到了理想的效果。在去年雙11大促上,銀泰在頂住20倍峰值波動的同時,成本較傳統線下數據庫相比節省逾60%。
云原生數據庫的性能進擊
華為云數據庫資深架構師黃偉曾公開表示到,“云原生數據庫其實是一個冰山模型,冰山之下的數據庫引擎云化才是其核心所在。”數據真正被管理和處理是由數據庫引擎完成的,多數的云廠商會提供兩類:一類是原生的數據庫引擎,第二類則是優化的數據庫引擎。根據黃偉團隊的實驗,在32個連接數情況之下HWSQL比原生MYSQL性能好一些,但差距不明顯。伴隨著連接數的增多,以連接數8000個為例,HWSQL的性能大約是MySQL的十倍以上。由此觀之,經過云優化的數據庫引擎往往會比原生的數據庫提供更好的性能及可靠性。
以MySQL為例,用戶能感受到的首先是一個VM(虛擬機)下面懸掛著一塊或者多塊盤,云供應商為了更高的可靠性,將用戶數據在云盤上會存儲在三個不同的機架上的三個不同的服務器上的三塊不同的盤中去,一旦其中任何一個結點或者任何一個機架或者任何一個數據中心宕機,以確保數據庫系統仍然具備可用性。在這種模式下,加上MySQL在磁盤上自動雙寫的特性,MySQL的問題顯露無遺,盤上大量的需要雙寫的數據,在給云上帶來極大的負擔同時也占用著網絡帶寬,處理事件時延也隨之增加。對于企業來說,數據庫的長時延則是一個嚴重的缺陷。
而云上的“計算-存儲層”分離架構卻很好的解決了這個問題,分離的結果就是每個模塊專注自身的線程處理,計算結點和存儲結點可以獨立的去擴展。此外,眾所周知,存儲在進行容災備份的同時,數據庫也要做一份容災,此時存儲結點可以和備份容災整合到一起,而計算結點下到存儲結點的數據只需要原來的七分之一,網絡帶寬占用和時延隨之提升,直接表現在性能上的大幅提升。
阿里云 PolarDB作為Gartner數據庫魔力想象中國唯一入選,主要得益于其在存儲引擎和計算引擎性能方面的優化。在存儲引擎優化方面,緣由關系型數據庫是IO(輸入與輸出)密集型應用,因此想要提高數據庫的性能關鍵要提升IO的性能,這也解釋了為什么過去十年數據庫領域為何要用SSD(固態硬盤)替換HDD(機械硬盤)。
縱深于數據庫處理的吞吐能力的提升除了需要前沿的硬件技術,其中包括3DXpoint存儲介質的Optane存儲卡(超高速內存新技術)、NVMe (邏輯設備接口規范)SSD和RoCE RDMA(新的內存訪問技術)網絡,還需要實現軟件棧整個IO鏈條的深度優化,即將數據庫、文件系統、網絡通訊協議、分布式存儲系統以及設備驅動貫通。于這一點上,阿里云 PolarDB通過在軟件層對高速的Optane卡和大容量高吞吐的NVMe SSD進行組合,兩者兼并為混合存儲層,而混合存儲層的好處是既保證了數據寫入的低延遲、高吞吐、高QoS(服務質量),又使得整體方案兼具較高的性價比。
“PolarDB首次將OS Bypass(操作系統旁路)和零拷貝兩個核心技術運用于云原生數據庫上。”李飛飛表示到。旁路內核的作用則在于榨干硬件性能,為此阿里云數據庫團隊大膽拋棄Linux內核提供的機制(如塊設備)、文件系統入(如ext4)、TCP/IP協議棧和socket編程接口,選擇另起爐灶,開發一整套在用戶態運行的IO和網絡協議棧。
阿里云 PolarDB用戶態協議很好地解決了內核IO協議快慢的問題,一方面用戶程序在用戶態直接通過DMA(直接內存存?。┎僮饔布O備,通過輪詢的方式監聽硬件設備完成IO事件,消除了上下文切換和中斷的開銷;另一方面,用戶程序將IO處理線程與cpu逐一進行映射,每個IO處理線程都獨占CPU達到處理不同的IO請求和綁定不同的IO設備硬件隊列的效果。
值得一提的是,一個IO請求完整生命周期都在一個線程、一顆CPU上處理,無需鎖進行互斥。這種技術最大化地實現了與高速設備進行性能交互,實現在保持線性的擴展能力的同時,也讓一顆CPU高達約20萬次/秒的IO處理能力,這也就意味著4顆CPU便可達到每秒80萬次IO處理的能力,在性能和經濟層面上遠高于內核。
“零拷貝”則意味著整個過程CPU不用訪問被同步的數據塊,為了實現這一點,阿里云 PolarDB巧妙地通過RDMA將日志數據發送到存儲節點內存之中,存儲節點之間通過RDMA互相復制,每個存儲節點用SPDK將數據寫入NVMe接口的存儲介質里。主庫和只讀節點之間通過物理復制同步數據,直接將數據更新到只讀節點的內存里,從而從物理復制上實現數據庫的多副本。
在計算引擎性能優化方面,首先阿里云 PolarDB針對高并發場景對引擎的內部鎖做了大量優化,例如將latch(鎖存器)分解成粒度更小的鎖、將latch改成引用計數的方式從而避免鎖競爭等,值得一提的是,阿里云PolarDB還將部分熱點數據結構改成了Lock Free(無鎖)的結構,例如Server層的MDL鎖。
其次,緣由當下多數SSD硬盤是4K對齊(一種高級硬盤使用技術,用特殊方法將文件系統格式與硬盤物理層上進行契合,為提高硬盤壽命與高效率使用硬盤空間提供解決方案),而MySQL代碼還是按照早期磁盤512字節對齊的方式刷日志的方式,帶來的直接表現則是讓磁盤進行很多不必要的讀操作,從而局限了SSD盤的性能,因而阿里云PolarDB在日志提交過程中進行了相關優化,同時其采用的Double RedoLog Buffer(雙重日志緩沖區)進一步提升了并行度。
最后也是極為重要的一點,阿里云 PolarDB除了在基于數據頁維度的并行性能提高上下足了功夫,還對物理復制中的必要流程進行了相關的優化,以在MTR日志中增加了一個長度字段為例,這個簡單的優化操作節省了將近60%在日志解析階段所消耗的時間成本。此外,通過復用Dummy Index內存數據結構,減少了其在Malloc/Free上的開銷,從而達到提高復制性能、降低時延的目的。
回歸理性,探索云原生數據庫的未來
云原生數據庫在近些年掀起的近乎燎原之勢主要得益于在其在成本層面和支持云服務層面的優勢,但我們必須清醒地認識到,眼下的云原生數據庫還沒有步入真正的成熟(技術、市場)階段,無法真正取代市場對傳統數據庫的需求。
眼下大多云計算廠商所開發的數據庫系統,市場目標在于在自家產品的云上提供服務,而不是作為傳統軟件賣許可證。因而,對于很多打算擺脫Oracle欲采用國產數據庫,但因為一些特殊的原因目前沒打算上云的用戶則錯過此類產品。
另一方面,緣由云計算供應商所開發的數據庫只能在自家的云上提供服務,對于大多數獨立軟件商來說,他們往往更傾向于一個類似傳統的、獨立的關系數據庫,而這個數據庫可以在各個云計算平臺上運行,因而目前仍停留在“云優先”的戰略之中,即并非要求企業自動的全“云”化,而是依據業務延伸的需要實時更新和優化企業云戰略部署,逐步實現企業“云”化。
以工商銀行最近公布的最新集采、供應商為例,甲骨文以9693.9萬元入圍操作系統及數據庫類軟件產品升級保護項目,這也從側面說明了傳統商業數據庫仍具備著相當的不可取代性,云原生數據庫是大趨勢,但數據庫云上之路則是一個長期的過程。
最后,目前云計算廠商主要業務為提供云服務,而云計算供應商在云上一般會提供多種數據庫平臺,例如MySQL、PostgreSQL以及自研的數據庫。云廠商自研的數據庫只是其中一種,只是提供給客戶更多的選擇,并不見得有真正的優勢。
從技術衍生階段的角度來看,云數據庫一般分三個階段,第一是數據庫的服務化,提供一個好的運維,做好數據庫的體檢與服務;第二是改進引擎,針對云的基礎設施來提高它的性能和可靠性;第三是自研引擎,自研引擎的含義是基于云設計,擁有著極高的性能/極大的規模/極高的可靠性。
以在中國云計算市場占主導地位的阿里云為例,阿里云數據庫產品總監曹偉告訴鈦媒體,“目前阿里云正處于第三階段,在擁有100多項專利的同時,還在去年的VLDB和今年的SIGMOD兩大數據庫全球頂級數據庫學術會議上發表了兩篇論文?!?/p>
明星產品阿里云 PolarDB自2014年立項研發至今,在5年的時間里,PolarDB迭代過程讓未來的云原生數據庫的模樣逐漸清晰,即一個數據庫既可滿足當下多類數據庫混合使用效果,又在自研能力和資金優勢基礎之上以產品為契機,進而實現數據庫OLTP(聯機事務處理)與OLAP(聯機分析處理)一體化設計,為企業的數字化升級所需的IT設施架構實現變革性的進化。
在傳統商業數據庫落后于國外之下,布局云原生數據庫或許能讓中國未來在數據庫領域扳回一城。
本文(含圖片)為合作媒體授權創業邦轉載,不代表創業邦立場,轉載請聯系原作者。如有任何疑問,請聯系editor@cyzone.cn。