阿里妹導讀:任何應用系統都離不開對資料的處理,資料也是驅動業務創新以及向智慧化發展最核心的東西。資料處理的技術已經是核心競爭力。在一個完備的技術架構中,通常也會由應用系統以及資料系統構成。應用系統負責處理業務邏輯,而資料系統負責處理資料。本篇文章主要面向資料系統的研發工程師和架構師,希望對你有所啟發。
前言
業務化:完成最基本的業務互動邏輯。 規模化:分散式和大資料技術的應用,滿足業務規模增長的需求以及資料的積累。 智慧化:人工智慧技術的應用,挖掘資料的價值,驅動業務的創新。
派生資料體系
主儲存:資料產生自業務或者是計算,通常為資料首先落地的儲存。ACID等事務特性可能是強需求,提供線上應用所需的低延遲業務資料查詢。 輔儲存:資料主要來自主儲存的資料同步與複製,輔儲存是主儲存的某個檢視,通常面向資料查詢、檢索和分析做優化。
應用層多寫:這是實現最簡單、依賴最少的一種實現方式,通常採取的方式是在應用程式碼中先向主儲存寫資料,後向輔儲存寫資料。這種方式不是很嚴謹,通常用在對資料可靠性要求不是很高的場景。因為存在的問題有很多,一是很難保證主與輔之間的資料一致性,無法處理資料寫入失效問題;二是資料寫入的消耗堆積在應用層,加重應用層的程式碼複雜度和計算負擔,不是一種解耦很好的架構;三是擴充套件性較差,資料同步邏輯固化在程式碼中,比較難靈活新增輔儲存。 非同步佇列複製:這是目前被應用比較廣的架構,應用層將派生資料的寫入通過佇列來非同步化和解耦。這種架構下可將主儲存和輔儲存的資料寫入都非同步化,也可僅將輔儲存的資料寫入非同步化。第一種方式必須接受主儲存可非同步寫入,否則只能採取第二種方式。而如果採用第二種方式的話,也會遇到和上一種『應用層多寫』方案類似的問題,應用層也是多寫,只不過是寫主儲存與佇列,佇列來解決多個輔儲存的寫入和擴充套件性問題。
CDC(Change Data Capture)技術:這種架構下資料寫入主儲存後會由主儲存再向輔儲存進行同步,對應用層是最友好的,只需要與主儲存打交道。主儲存到輔儲存的資料同步,則可以再利用非同步佇列複製技術來做。不過這種方案對主儲存的能力有很高的要求,必須要求主儲存能支援CDC技術。一個典型的例子就是MySQL+Elasticsearch的組合架構,Elasticsearch的資料通過MySQL的binlog來同步,binlog就是MySQL的CDC技術。
資料模型和查詢語言仍然是不同資料庫最顯著的區別,關係模型和文件模型是相對抽象的模型,而類似時序模型、圖模型和鍵值模型等其他非關係模型是相對具象的抽象,如果場景能匹配到具象模型,那選擇範圍能縮小點。 儲存元件通常會劃分到不同的資料分層,選擇面向規模、成本、查詢和分析效能等不同維度的優化偏向,選型時需要考慮清楚對這部分資料儲存所要求的核心指標。 區分主儲存還是輔儲存,對資料複製關係要有明確的梳理。(主儲存和輔儲存是什麼在下一節介紹) 建立靈活的資料交換通道,滿足快速的資料搬遷和儲存元件間的切換能力,構建快速迭代能力比應對未知需求的擴充套件性更重要。
資料一定需要分層 資料最終的歸屬地一定是OSS 會由一個統一的分析引擎來統一分析的入口,並提供統一的查詢語言
儲存計算分離架構:底層基於HDFS,分離的架構可帶來儲存和計算各自彈性擴充套件的優勢,與計算引擎例如Spark可共享計算資源,降低成本。 LSM儲存引擎:為寫入優化設計,能提供高吞吐的資料寫入。 開發者生態成熟,接入主流計算引擎:作為發展多年的開源產品,在國內也有比較多的應用,開發者社群很成熟,對接幾大主流的計算引擎。
★ 設計理念
儲存計算分離架構:採用儲存計算分離架構,底層基於飛天盤古分散式檔案系統,這是實現儲存計算成本分離的基礎。
LSM儲存引擎:LSM和B+tree是主流的兩個儲存引擎實現,其中LSM專為高吞吐資料寫入優化,也能更好的支援資料冷熱分層。
Serverless產品形態:基於儲存計算分離架構來實現成本分離的最關鍵因素是Serverless服務化,只有Serverless服務才能做到儲存計算成本分離。大資料系統下,結構化大資料儲存通常會需要定期的大規模資料匯入,來自線上資料庫或者是來自離線計算引擎,在此時需要有足夠的計算能力能接納高吞吐的寫入,而平時可能僅需要比較小的計算能力,計算資源要足夠的彈性。另外在派生資料體系下,主儲存和輔儲存通常是異構引擎,在讀寫能力上均有差異,有些場景下需要靈活調整主輔儲存的配比,此時也需要儲存和計算資源彈性可調。
多元化索引,提供豐富的查詢能力:LSM引擎特性決定了查詢能力的短板,需要索引來優化查詢。而不同的查詢場景需要不同型別的索引,所以Tablestore提供多元化的索引來滿足不同型別場景下的資料查詢需求。
CDC技術:Tablestore的CDC技術名為Tunnel Service,支援全量和增量的實時資料訂閱,並且能無縫對接Flink流計算引擎來實現表內資料的實時流計算。
擁抱開源計算生態:除了比較好的支援阿里雲自研計算引擎如MaxCompute和Data Lake Analytics的計算對接,也能支援Flink和Spark這兩個主流計算引擎的計算需求,無需資料搬遷。
流批計算一體:能支援Spark對錶內全量資料進行批計算,也能通過CDC技術對接Flink來對錶內新增資料進行流計算,真正實現批流計算結合。
多元化索引
通道服務
Lambda plus架構中資料只需要寫入Tablestore,Blink流計算框架通過通道服務API直讀表內的實時更新資料,不需要使用者雙寫佇列或者自己實現資料同步。 儲存上,Lambda plus直接使用Tablestore作為master dataset,Tablestore支援使用者線上系統低延遲讀寫更新,同時也提供了索引功能進行高效資料查詢和檢索,資料利用率高。 計算上,Lambda plus利用Blink流批一體計算引擎,統一流批程式碼。 展示層,Tablestore提供了多元化索引,使用者可自由組合多類索引來滿足不同場景下查詢的需求。