每日最新頭條.有趣資訊

雲計算時代的數據庫之戰

“雲計算無疑是今天名列第一的計算趨勢 ,在數據庫領域同樣如此 。客戶越來越喜歡雲模式的按計算、彈性和幾乎無限的規模擴展以及低成本的安裝和管理 。”時任微軟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余年的歷史了,眼下的數據庫已經到了一個變革的關鍵節點,即從馬車時代到汽車時代的更迭。”

數據庫市場的格局正悄然發生改變

趨勢之下,往往預示著新技術在成本、技術上佔絕對的領先優勢,對舊技術而言,這注定是一場被圍剿的行動。美國知名科技領域分析機構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億的銷售額。

雲原生數據庫的架構之變

想要參透雲原生數據庫,首先要回歸產品本身所扮演的角色。如今處理數據不再是僅僅靠算力,主要集中於對智能化算法的研究,而算法又與用戶的需求息息相關,進而演進出雲原生數據庫的框架,即“完整的基礎設施雲化、核心技術的互聯網化以及疊加’大數據+智能化’的平台”。循著雲原生數據庫的框架再對其進行提煉,核心脈絡的三要素逐漸變得清晰,即“雲計算在框架中僅作為基礎算力;行業算法是智能化處理數據的主要工具;形成’數據+智能花的平台’的前提是基礎設施的雲化和核心技術的互聯網化。”再深入一步思考雲原生數據庫的模型,不難聯想到原生數據庫所扮演的其實是“數據中台”的角色。

那麽,什麽是“數據中台”?即通過數據技術,對海量數據進行采集、計算、存儲、加工,同時統一標準和口徑。數據中台將數據統一之後,會形成標準數據,再進行存儲,進而形成大數據資產層,從而為客戶提供高效服務。以阿里雲 PolarDB為例,其在原有的RAFT協議的基礎上開發了一種全新的共識協議(ParallelRaft),在保障數據一致性的前提下,遵從共識協議提升了PolarFS並行寫入性能,在高負載情況下,達到平均延遲縮短一半、系統吞吐量翻倍的效果。這也解釋了為什麽PolarDB不再是一件單一的產品,而是充當一套完整的生態框架協助企業將數據庫遷移上雲。對此,阿里雲數據庫產品總監曹偉對鈦媒體表示,“提供智能是數據庫的未來發展方向,PolarDB將在後續版本中繼續圍繞“數據中台”這一概念,向用戶提供多維分析和分析計算能力。”

與此同時,厘清雲數據庫的架構方向也是理解雲數據庫本質的關鍵所在。當下多模架構成為雲原生數據發展的主流趨勢,即在一個數據庫平台支持多種存儲方式,包括滿足應用程序對於結構化、半結構化、非結構化數據的統一管理需求。一般來說,結構化數據特指表單類型的數據存儲結構,典型應用為銀行核心交易等傳統業務;半結構化數據則在用戶畫像、物聯網設備日誌采集、應用點擊流分析等場景中得到大規模使用;而非結構化數據則側重於海量的的圖片、視頻、和文檔處理等業務,主要應用在金融科技方面。多模架構在降低使用和運維的成本同時,也完成跨部門、跨業務的數據統一存儲與管理,從而實現多業務數據融合,支撐起多樣化的服務。

此外,“計算-存儲層”分離現已演進成主流的技術方向。那麽,何謂“計算-存儲層”分離?即將協議解析、計算等模塊與底層存儲解耦,數據庫雲平台再將存儲層進行分片以實現存儲的彈性水準擴張,同時通過計算層的無狀態設計允許計算層通過增加節點數量線性提升計算能力,從而整個數據庫雲平台的彈性水準擴張。簡而言之,是指數據庫的存儲引擎和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和記憶體的費用即可。

阿里雲PolarDB與傳統數據庫的成本對比 數據來源:阿里雲官方

來自實際場景應用對比之下的數據往往顯得真實的多,作為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(直接記憶體存取)操作硬體設備,通過輪詢的方式監聽硬體設備完成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兩大數據庫全球頂級數據庫學術會議上發表了兩篇論文。”

明星產品阿里雲 PolarDB自2014年立項研發至今,在5年的時間裡,PolarDB迭代過程讓未來的雲原生數據庫的模樣逐漸清晰,即一個數據庫既可滿足當下多類數據庫混合使用效果,又在自研能力和資金優勢基礎之上以產品為契機,進而實現數據庫OLTP(聯機事務處理)與OLAP(聯機分析處理)一體化設計,為企業的數字化升級所需的IT設施架構實現變革性的進化。

在傳統商業數據庫落後於國外之下,布局雲原生數據庫或許能讓中國未來在數據庫領域扳回一城。(本文首發鈦媒體,作者/桑明強,編輯/劉湘明)

獲得更多的PTT最新消息
按讚加入粉絲團