機器如何猜你所想?阿里小蜜預測平臺揭祕(測試)

李飛飛(花名:飛刀),阿里巴巴集團副總裁,高級研究員,達摩院首席數據庫科學家,阿里雲智能事業羣數據庫產品事業部負責人,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。 數據庫系統架構演進:All depends on what is shared 縱觀數據庫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:極致彈性+兼容性 爲海量數據和海量併發而生 前面介紹了數據庫市場背景和雲原生數據庫的基本要素,接下來我將結合阿里雲 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 而言,以上技術帶來的最大優勢是極致的彈性。這裏我們以一個具體的客戶案例進行說明。如下圖所示,紅線部分指離線資源的消耗情況,這些成本是客戶無論如何都需要付出的,而其上面的部分則是計算資源的需求。 比如客戶在3、4月有新品上市,5月還有促銷活動,這兩個時期計算需求會非常大。如按照傳統架構方式,可能需要在新品上市之前就將容量彈到更大的規模,並且保持這樣的水位,到了後面的促銷階段又需要彈到更高的規格,成本非常高昂。但如果能夠做到極致彈性,比如 POLARDB 的存儲與計算分離,實現快速彈性擴容,那麼用戶就只需在藍色方塊出現之前將容量彈上去,之後再彈下來即可,這樣就能大幅降低成本。 除了雲原生數據庫 POLARDB ,阿里雲數據庫團隊在其他方向還有衆多探索。 分佈式版本 POLARDB-X : 高併發+跨域高可用 支持水平拓展 如果企業需要極致的 Scale out 能力,像阿里巴巴以及傳統行業中的銀行、電力等對高併發、海量數據支撐要求極高的用戶,共享存儲架構只能支持彈至十幾個節點,肯定是不夠的。因此,阿里雲數據庫團隊也採用 Shared Nothing 做水平拓展,將Shared Nothing 與 Shared Storage 相結合,形成 POLARDB-X 。POLARDB-X 支持金融級跨可用區數據強一致, 對支持海量數據下的高併發事務處理有着極好的性能表現。目前,POLARDB-X 在阿里內部已上線應用,利用存儲計算分離、硬件加速、分佈式事務處理和分佈式查詢優化等技術,成功支持了在雙11這樣的場景下阿里巴巴所有業務核心鏈路數據庫洪峯的挑戰,我們後續將推出商業化版本,敬請期待。 OLAP 數據庫標杆—— AnalyticDB:海量數據 實時高併發在線分析 此外在 OLAP 分析型數據庫方向,阿里雲數據庫團隊自主研發了數據庫產品——AnalyticDB,在阿里雲的公有云和專有云上均有售賣。AnalyticDB 擁有幾大核心架構特點: 行列混存引擎,能夠支持高吞吐寫入和高併發查詢; 支持海量數據處理,對於海量數據能實現秒級分析,完美支持多表、中文以及複雜分析; 利用向量化技術,支持結構化數據和非結構化數據的融合處理。 近日,AnalyticDB 打榜 TPC-DS,在性價比方面達到了全球第一,通過了 TPC 官方的嚴苛認證。同時,介紹 AnalyticDB 系統的論文即將在 VLDB 2019 會議上展現。AnalyticDB 的常用應用場景是從 OLTP 應用我們的數據傳輸與同步工具 DTS 至AnalyticDB 進行實時的數據分析。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章