阿里妹導讀:雲計算大潮來襲,傳統數據庫市場正面臨從新洗牌的情境,包括雲數據庫在內的一批新生力量崛起,動搖了傳統數據庫的壟斷地位,而由雲廠商主導的雲原生數據庫則將這種「改變」推向了高潮。
雲時代的數據庫將面臨怎樣的變革?雲原生數據庫有哪些獨特優點?在 DTCC 2019大會上,阿里巴巴副總裁 李飛飛博士就《下一代雲原生數據庫技術與趨勢》進行了精彩分享。數據庫
李飛飛(花名:飛刀),阿里巴巴集團副總裁,高級研究員,達摩院首席數據庫科學家,阿里雲智能事業羣數據庫產品事業部負責人,ACM 傑出科學家。跨域
以下圖所示的是 Gartner 關於全球數據庫市場份額的報告,該報告指出目前全球數據庫市場份額大約爲400億美金,其中,中國數據庫市場份額佔比爲3.7%,大約爲14億美金。安全
具體到數據庫市場分佈,傳統五大數據庫廠商 Oracle、Microsoft、IBM、SAP、Teradata 佔比達到了80%,雲數據庫的份額佔比接近10%,而且雲數據庫市場份額佔比每一年也在快速增加,所以, Oracle、MongoDB 等也在大力佈局其在雲數據庫市場的競爭態勢。網絡
根據 DB-Engines 數據庫市場分析顯示,數據庫系統正朝着多樣化、多元化的方向發展,從傳統的 TP 關係型數據庫發展到今天的多源異構的數據庫形態。目前,處於主流位置的仍是你們耳熟能詳的數據庫系統,好比商業數據庫 Oracle、SQL Server以及開源的 MySQL、PostgreSQL 等。而一些比較新的數據庫系統,好比MongoDB、Redis 則開闢了一個新的賽道。數據庫 License 的傳統銷售方式在逐漸走下坡路,而開源以及雲上數據庫 License 的流行程度卻在不斷提高。數據結構
正如 AWS 創始人 Jeff Bezos 所說:「The real battle will be in databases」。由於雲最先是從 IaaS 作起來的,從虛擬機、存儲、網絡,到如今如火如荼的語音識別、計算機視覺以及機器人等智能化應用,都是基於 IaaS 的,而數據庫就是鏈接 IaaS 與智能化應用 SaaS 最爲關鍵的一環。從數據產生、存儲到消費的各個環節,數據庫都相當重要。架構
數據庫主要包括四大板塊,即 OLTP、OLAP、NoSQL 以及數據庫服務和管理類工具,也是雲數據庫廠商發力的四個方向。對於 OLTP 而言,技術發展已經歷經了40年,而現在你們還在作的一件事情就是「加10元和減10元」,也就是所謂的事務處理。當數據量變得愈來愈大和讀寫衝突的緣由,對數據進行在線實時分析的需求衍生出了 OLAP。因爲須要 Scale out,而數據強一致性不可以獲得保證,就有了NoSQL 。而最近又出現了一個新名詞—— NewSQL,這是由於 NoSQL 也有所不足,故將傳統 OLTP 的 ACID 保證與 NoSQL 的 Scale out 能力進行了整合,變成了NewSQL。併發
縱觀數據庫40年來的發展歷史,從最先的關係型數據庫時期,衍生出了 SQL、OLTP 等技術;到數據量急劇增加,須要避免讀寫衝突,經過 ETL、數據倉庫以及 Data Cube 等技術實現了 OLAP;再到今天,面對異構多源的數據結構,從圖到時序、時空到向量等,也就誕生了 NoSQL、NewSQL 等數據庫,同時也出現了一些新的技術,好比 Multi-Model 和 HTAP 等。負載均衡
數據庫系統最爲主流的架構是 Shared Memory:共享處理器內核,共享內存而且具備共享的本地磁盤,這樣的單機架構屬於很是主流的架構,傳統的數據庫廠商基本採用的也是這樣的架構。運維
而隨着互聯網企業的大規模發展,如 Google、Amazon 以及阿里巴巴,你們發現原來的單機架構有不少限制,其可擴展性以及吞吐量沒法知足業務發展需求,因而就衍生出了 Shared Disk/Storage 架構,即共享存儲架構。也就是說數據庫底層多是分佈式存儲,經過利用 RDMA 這樣的快速網絡讓上層的數據庫內核看起來像是在使用本地的磁盤,但其實是分佈式存儲。上面能夠有多個獨立計算節點,通常是一寫多讀,可是也能夠作多寫多讀,這就是共享存儲架構,其中比較典型的表明就是阿里雲的 POLARDB 數據庫。機器學習
另一種架構是 Shared Nothing 。共享存儲雖然有諸多優勢,解決了不少問題,可是 RDMA 網絡也存在不少的限制,好比其跨越 Switch 甚至是跨 AZ 和 Region 的時候性能都會有所損失。分佈式的共享存儲達到必定的節點數量以後,性能會出現必定的損耗,因此不能保證訪問遠程數據和訪問本地數據的性能徹底相同,因此共享存儲的架構當擴展到十幾個節點以後就達到了 scale out 擴展的上限了。此時,若是應用須要繼續擴展怎麼辦呢?那就須要實現分佈式架構了,比較典型的就是 Google Spanner,其利用原子鐘技術可以實現跨數據中心的數據一致性和事務一致性。而在阿里雲,基於 POLARDB 實現的分佈式版本 POLARDB-X 採用的也是 Shared Nothing 架構。
這裏須要注意的一點就是:Shared Nothing 和 Shared Storage 能夠結合。能夠在上層作 Shared Nothing,而對於下層的 Shard 分片採用 Shared Storage 架構。這樣混合架構的好處在於可以減輕分出太多 Shard 的痛點問題,減小分佈式事務distributed commit的 機率,由於 distributed commit 的代價很是昂貴。
總結三種架構設計,若是在 Shared Storage 架構上作到多寫多讀而不是一寫多讀,實際上也就實現了 SharedEverything 。將 Shared nothing 和 Sharedstorage 架構進行結合的 hybrid 架構應該是後續數據庫系統發展方向的一個重要突破點。
上面從架構方面分析了雲時代的主流數據庫架構。從技術上來說,除了架構上的不一樣,雲原生時代還有一些不一樣點。
多模(Multi-model)
其一是多模(Multi-model),多模主要有兩種,即北向和南向。南向表示存儲結構是多種多樣的,數據結構能夠是結構化的也能夠是非結構化的,能夠是圖、向量、文檔等,但對於用戶只提供一個 SQL 的查詢接口或者 SQL-Like 的接口,這部分業界比較典型的就是各類各樣的數據湖服務。而北向的多模就是存儲只有一種,通常是經過 KV 存儲數據形態來支持結構化、半結構化以及非結構化數據,但但願可以提供不一樣的查詢接口,好比 SPARQL、SQL、GQL 等。業界典型的表明是微軟 Azure 的CosmosDB。
數據庫智能化+自動化管控平臺
數據庫的自治化也是很是重要的發展方向,從數據庫的內核以及管控平臺兩個角度都有不少技術點能夠作。在數據庫自治化部分,阿里巴巴認爲,須要作到自感知、自決策、自恢復以及自優化。自優化比較簡單,就是在內核中利用機器學習的方法來進行優化。而自感知、自決策、自恢復更多的是針對管控平臺的,好比如何保證明例的巡檢,當出現問題後如何可以自動快速修復或者自動切換等。
新硬件: 軟硬件一體化設計
雲原生數據庫的第三大核心點是軟硬件一體化設計。數據庫首先是一個系統,而系統就須要可以安全高效地使用有限的硬件資源。因此數據庫系統的設計和發展必定是和硬件性能和發展緊密相關的,咱們不可以面對硬件的變化而堅持舊有數據庫設計不改變,好比 NVM 出來以後就可能對傳統的數據庫設計有一些衝擊。而新硬件所帶來的變化也是數據庫系統設計須要考慮的。
RDMA、NVM 以及 GPU/FPGA 等新硬件或者架構的出現,對於數據庫的設計都會提供新的思路。
高可用
高可用是雲原生最基本的要求之一,上雲的用戶勢必不但願業務出現中斷。高可用最簡單的解決方案就是冗餘,能夠作 Table 級別的冗餘,也能夠作 Partition 級別的冗餘。不管是使用哪種,基本上都是三副本,甚至更多的時候須要作四副本或者五副本,好比金融級別的高可用可能須要作兩地三中心或者兩地四中心。
對於高可用的多副本而言,如何保證副本之間的數據一致性?在數據庫裏面有一個經典的CAP理論,其理論結果是在 Consistency、Availability 和 Partition Tolerant 三者之間只能選擇兩個。如今你們的通常選擇都是 C+P,同時對於 A 而言,經過三副本技術和分佈式一致性協議,使得 A 達到6個9或者7個9,這樣基本上就作到了100%的 CAP。
前面介紹了數據庫市場背景和雲原生數據庫的基本要素,接下來我將結合阿里雲 POLARDB 以及 AnalyticDB 兩款數據庫系統,分享以上技術的具體落地狀況。POLARDB 是阿里雲的雲原生數據庫,目前已有很是深厚的技術積累。咱們在VLDB 2018,SIGMOD 2019等國際學術會議上發表了相關論文,主要介紹存儲引擎等方面的技術創新。
POLARDB 採用共享存儲架構,一寫多讀。共享存儲架構有多個優點,首先是計算和存儲分離,計算節點和存儲節點能夠分開實現彈性縮擴容;其次,POLARDB 突破了 MySQL、PG 等數據庫對於單節點規格和可擴展性的限定,可以實現 100TB 存儲容量以及每一個節點100萬 QPS 的性能;此外,POLARDB 可以提供極致的彈性能力,備份恢復能力也有很大提高。在存儲層,每一個數據塊都採用三副本高可用技術,同時對於 Raft 協議進行了修改,經過實現並行式的 Raft 協議保證了三副本數據塊之間的數據一致性,提供了金融級高可用。POLARDB 還能作到100%兼容 MySQL 以及 PG 等數據庫生態,能夠幫助用戶實現無感知的應用遷移。
因爲底層是共享的分佈式存儲,PolarDB 屬於 Active-Active 的架構,主節點負責寫入數據,從節點負責讀取數據,所以,對於進入數據庫的事務而言,主備節點都處於Active 狀態,其好處在於經過一份物理存儲避免了在主從之間不停地作數據同步。
具體而言,POLARDB 有一個 PolarProxy,也就是前面的網關代理,下面有 POLARDB 的內核以及 PolarFS,最下面對接的是 PolarStore,利用 RDMA 網絡管理底層的分佈式共享存儲。PolarProxy 會對客戶需求作分發,將寫請求分配到主節點,而對於讀請求而言,則會根據負載均衡以及讀節點的狀態實現對於讀請求的分配,這樣就可以儘量地實現資源的最大化利用以及性能的提高。
POLARDB 共享存儲採用分佈式+三副本。其中 Primary 節點負責寫,其餘節點負責讀,其下層是 PolarStore,每部分都會有三副本的備份,經過分佈式一致性協議保證數據一致性。這樣設計的優點在於可以實現存儲與計算分離,同時可以作到無鎖備份,因此備份可作到秒級。
在一寫多讀的狀況下,POLARDB 可以實現快速伸縮。舉例而言,從2核 vCPU 升級到32核或者從兩個節點擴展到4個節點,都可以在5分鐘以內生效。存儲和計算分離可以帶來的另外一大好處是下降成本,由於存儲和計算節點能夠獨立地進行彈性伸縮,充分體現成本優點。
下圖展現了 POLARDB 如何利用物理日誌實現持續恢復。左側是傳統數據庫的架構,而在 POLARDB 裏面,因爲採用了共享存儲,所以可基本保留相似傳統數據庫利用物理日誌進行恢復的過程,經過共享存儲實現持續恢復,作事務的 Snapshot 恢復。
對比一下,若是 MySQL 作主備架構,首先須要在主庫裏面有一個邏輯日誌和物理日誌,在備庫裏面要重放主庫的邏輯日誌,而後再按照主庫的方式作邏輯日誌和物理日誌。而在 POLARDB 裏面,由於是共享存儲,可直接經過一份日誌實現數據恢復,備庫可以直接將所須要的數據恢復出來,而不須要去重放主庫的邏輯日誌。
POLARDB一寫多讀集羣的另外一大優點是動態 DDL 的支持。在 MySQL 架構下,如要對數據的 Schema 進行修改,須要經過 Binlog 去 Replay 到備庫,所以備庫會存在Blocking 的階段,須要必定時間 Replay 動態的 DDL。而在 POLARDB共享存儲架構下,全部 Schema 信息以及 metadata 均以表的形式直接存儲在存儲引擎裏面,只要主庫改完了,那麼備庫的元信息也實時同步更新,所以不會存在 Blocking 的過程。
POLARDB 的 Proxy 最主要的做用就是作讀寫分離、負載均衡、高可用切換以及安全防禦等。POLARDB 是一寫多讀架構,當請求進來以後,須要進行讀寫的判斷,將寫請求分發到寫節點,將讀請求分發到讀節點上去,而且對於讀請求作必定的負載均衡。這樣就能保證會話的一致性,而且完全解決了讀不到最新數據的問題。
無損彈性是 POLARDB 監控的模塊之一。分佈式存儲須要知道分配多少磁盤量 /Chunk,POLARDB 會監控未使用的 Chunk 量。好比當可用量低於30%的時候,就會在後臺自動地對其進行擴容,這使得應用基本不受影響,可連續寫數據。
對於雲數據庫 POLARDB 而言,以上技術帶來的最大優點是極致的彈性。這裏咱們以一個具體的客戶案例進行說明。以下圖所示,紅線部分指離線資源的消耗狀況,這些成本是客戶不管如何都須要付出的,而其上面的部分則是計算資源的需求。
好比客戶在三、4月有新品上市,5月還有促銷活動,這兩個時期計算需求會很是大。如按照傳統架構方式,可能須要在新品上市以前就將容量彈到更大的規模,而且保持這樣的水位,到了後面的促銷階段又須要彈到更高的規格,成本很是高昂。但若是可以作到極致彈性,好比 POLARDB 的存儲與計算分離,實現快速彈性擴容,那麼用戶就只需在藍色方塊出現以前將容量彈上去,以後再彈下來便可,這樣就能大幅下降成本。
除了雲原生數據庫 POLARDB ,阿里雲數據庫團隊在其餘方向還有衆多探索。
若是企業須要極致的 Scale out 能力,像阿里巴巴以及傳統行業中的銀行、電力等對高併發、海量數據支撐要求極高的用戶,共享存儲架構只能支持彈至十幾個節點,確定是不夠的。所以,阿里雲數據庫團隊也採用 Shared Nothing 作水平拓展,將Shared Nothing 與 Shared Storage 相結合,造成 POLARDB-X 。POLARDB-X 支持金融級跨可用區數據強一致, 對支持海量數據下的高併發事務處理有着極好的性能表現。目前,POLARDB-X 在阿里內部已上線應用,利用存儲計算分離、硬件加速、分佈式事務處理和分佈式查詢優化等技術,成功支持了在雙11這樣的場景下阿里巴巴全部業務核心鏈路數據庫洪峯的挑戰,咱們後續將推出商業化版本,敬請期待。
此外在 OLAP 分析型數據庫方向,阿里雲數據庫團隊自主研發了數據庫產品——AnalyticDB,在阿里雲的公有云和專有云上均有售賣。AnalyticDB 擁有幾大核心架構特色:
近日,AnalyticDB 打榜 TPC-DS,在性價比方面達到了全球第一,經過了 TPC 官方的嚴苛認證。同時,介紹 AnalyticDB 系統的論文即將在 VLDB 2019 會議上展示。AnalyticDB 的經常使用應用場景是從 OLTP 應用咱們的數據傳輸與同步工具 DTS 至AnalyticDB 進行實時的數據分析。
自治數據庫平臺:智能調參上線 iBTune (individualized Buffer Tuning)
雲原生數據庫的特色之一是自治化,阿里雲內部有個平臺叫 SDDP(Self-Driving Database Platform——自治化數據庫平臺),SDDP 會對各個數據庫實例進行實時的性能數據採集,並使用機器學習方法建模進行實時調配。
iBTune 的基本思想是,每一個數據庫實例都包含一個 Buffer Size,傳統數據庫裏面的Buffer Size 是提早分配好的,不能變化。而在大型企業裏,Buffer 是一個資源池,須要消耗內存,所以但願作到彈性自動調配每一個實例裏的 BufferSize。好比淘寶商品庫的數據庫實例晚上不須要那麼大的 Buffer,那麼就能夠自動將其 Buffer Size 彈下來,到早上再自動彈上去,同時要求不影響其 RT。爲了知足上述需求並進行自動Buffer 優化,阿里雲數據庫團隊構建了 iBTune 系統,目前監控近 7000個數據庫實例,經過長期運營,可平均節省20TB 內存。介紹 iBTune 項目的核心技術論文也發表在了今年的 VLDB 2019大會上。
雲上的數據安全是很是重要的內容,阿里雲數據庫團隊在數據安全方面也作了大量的工做。首先,數據落盤加密,在數據存儲的時候就進行加密。此外,阿里雲數據庫也支持 BYOK,用戶能夠將本身的密鑰拿到雲上來實現落盤加密以及傳輸級別的加密。將來,阿里雲數據庫還將在內存處理時實現全程加密,對日誌實現可信驗證等。
阿里雲數據庫按照工具產品、引擎產品以及運營管控的全程數據庫產品分類提供服務。下圖展示的是阿里雲——雲數據庫經常使用鏈路,經過 DTS 工具將線下數據庫遷移到線上,基於數據需求/分類,分發相當系型數據庫、圖數據庫以及 AnalyticDB 等。
目前 POLARDB 數據庫的增勢迅猛,已經服務於通用行業、互聯網金融、遊戲、教育、新零售、多媒體等多個領域的龍頭企業。
而 AnalyticDB 在分析型數據庫市場也有很是出衆的表現,支持實時分析以及可視化應用。
基於阿里雲數據庫技術,阿里巴巴支持了城市大腦等一系列關鍵項目及雲上雲下的大量客戶。截止目前爲止,阿里雲數據庫已經累計支持了近40萬數據庫實例成功上雲。
雲原生是數據庫的新戰場,它爲發展了40多年的數據庫行業帶來了許多使人激動的新挑戰和新機遇,阿里巴巴但願與國內外數據庫行業的各位技術同仁一塊兒,將數據庫技術推向更高的境界。
本文來自雲棲社區合做夥伴「阿里技術」,如需轉載請聯繫原做者。