本文介紹云原生多模數據庫 Lindorm的產品架構,包括業務背景和總體結構。
業務背景
伴隨著信息技術的飛速發展,各行各業在業務生產中產生的數據種類越來越多,有結構化的業務元數據、業務運行數據、設備或者系統的量測數據,也有半結構化的業務運行數據、日志、圖片或者文件等。按照傳統方案,為了滿足多種類型數據的存儲、查詢和分析需求,在設計IT架構時,需要針對不同種類的數據,采用不同的存儲分析技術,如下圖:
這種技術方案,是一種典型的技術碎片化的處理方案。針對不同的數據,使用不同的數據庫來處理。有如下幾個弊端:
涉及的技術組件多且雜
技術選型復雜
數據存取、數據同步的鏈路長
這些弊端會對信息系統建設帶來巨大的問題,對技術人員要求高、業務上線周期長、故障率高、維護成本高。更進一步,技術碎片化導致技術架構割裂,不利于技術架構的演進和發展,最終導致技術架構無法跟進業務前進的步伐。舉個簡單的例子,當業務發展,需要支持跨可用區高可用、全球同步或者降低存儲成本時,各技術組件都需要獨立演進和發展,耗時耗人耗力,是一件非常痛苦的事情。并且隨著業務的發展,數據的類型會越來越多,對不同種類數據的差異化處理需求會日漸增加,會導致數據存儲碎片化更加嚴重。
當前信息化技術發展面臨的一個主要矛盾是"日益多樣的業務需求帶來的多種類型數據與數據存儲技術架構日趨復雜成本快速上升之間的矛盾"。伴隨5G、IoT、智能網聯車等新一代信息技術的逐步普及應用,這個矛盾會越來越突出。為了解決這個問題,阿里云自研了云原生多模數據庫Lindorm,滿足多模型數據的統一存儲、查詢和分析需求。如下圖所示,與傳統方案相比,Lindorm系統極大地簡化數據存儲技術架構設計,大幅度提升系統穩定性,降低建設成本投入。
總體架構
Lindorm創新性地使用存儲計算分離、多模共享融合的云原生架構,以適應云計算時代資源解耦和彈性伸縮的訴求。其中云原生分布式文件系統LindormDFS為統一的存儲底座,向上構建各個垂直專用的多模數據引擎,包括寬表引擎、時序引擎、搜索引擎、流引擎等。在多模引擎之上,Lindorm既提供統一的SQL訪問,支持跨模型的聯合查詢,又提供多個開源標準接口(HBase/Cassandra、OpenTSDB/InfluxDB、Kafka、HDFS),滿足存量業務無縫遷移的需求。最后,數據通道服務(LTS)負責引擎之間的數據流轉和數據變更的實時捕獲,以實現數據遷移、實時訂閱、數湖轉存、數倉回流、單元化多活、備份恢復等能力。
分布式文件系統
LDFS(Lindorm DFS)是面向云基礎存儲設施設計、兼容HDFS協議的分布式存儲系統,并同時支持運行在本地盤環境,以滿足部分大客戶的需求,向多模引擎和外部計算系統提供統一的、與環境無關的標準接口,整體架構如下:
LDFS提供性能型、標準型、容量型等多種規格,并且面對真實場景的數據冷熱特點,支持性能型/標準型、容量型多種存儲混合使用的形態,以適應真實場景的數據冷熱特點,可結合多模引擎的冷熱分離能力,實現冷熱存儲空間的自由配比,讓用戶的海量數據進一步享受云計算的低成本紅利。
在計算分析、備份歸檔、數據導入等場景,Lindorm支持外部系統通過LDFS直接訪問多模數據引擎的底層文件,從而大幅提升數據的讀寫效率。例如用戶可以在離線計算系統直接生成底層數據格式的物理文件,導入至Lindorm中,以減少對在線服務的影響。
寬表引擎
LindormTable是面向海量半結構化、結構化數據設計的分布式NoSQL系統,適用于元數據、訂單、賬單、畫像、社交、feed流、日志等場景,兼容HBase、Cassandra等開源標準接口。其基于數據自動分區+分區多副本+LSM的架構思想,具備全局二級索引、多維檢索、動態列、TTL等查詢處理能力,支持單表百萬億行規模、高并發、毫秒級響應、跨機房強一致容災,高效滿足業務大規模數據的在線存儲與查詢需求。面向海量半結構化、結構化數據設計的分布式NoSQL系統,能夠兼容HBase、Cassandra等開源標準接口。整體架構如下:
LindormTable的數據持久化存儲在LDFS中,表的數據通過自動Sharding分散到集群中的多臺服務器上,并且每一個分區可以擁有1至N個副本,這N個副本擁有主、從兩種角色,主從副本可以加載在不同的Zone,從而保障集群的高可用和強一致。針對不同的一致性模式,主從副本之間的數據同步和讀寫模式如下:
強一致模式。只有主副本提供讀寫,數據會異步回放到從副本,主副本所在節點故障,從副本晉升為主副本。晉升之前會保障數據同步完成,從副本擁有所有最新數據,整體過程由Master協調負責。
最終一致模式。主從副本都提供讀寫,數據會相互同步,保證副本之間的數據最終一致。
LindormTable的多副本架構基于PACELC理念設計,每一個數據表都支持單獨支持設置一致性模式,從而擁有不同的可用性和性能。在最終一致模式下,服務端會對每一個讀寫請求在一定條件下觸發多副本并發訪問,從而大幅提升請求的成功率和減少響應毛刺。該并發機制建立在內部的異步訪問框架上,相比于啟動多線程,額外資源消耗可以忽略不計。對于并發訪問的觸發條件,主要包括兩個類型:
限時觸發,對于每一個請求,都可以單獨設置一個GlitchTimeout,當請求運行時間超過該值未得到響應后,則并發一個請求到其他N-1個副本,最終取最快的那個響應。
黑名單規避,服務端內部會基于超時、拋錯、檢測等機制,主動拉黑存在慢、停止響應等問題的副本,使得請求能夠主動繞開受軟硬件缺陷的節點,讓服務最大可能保持平滑。比如在掉電斷開的場景下,在節點不可服務至失去網絡心跳往往會存在一兩分鐘的延遲,利用LTable的這種多副本協同設計,可以大幅提升服務的可用性。
LindormTable的LSM結構面向冷熱分離設計,支持用戶的數據表在引擎內自動進行冷熱分層,并保持透明查詢,其底層結合LStore的冷熱存儲混合管理能力,大幅降低海量數據的總體存儲成本。
LindormTable提供的數據模型是一種支持數據類型的松散表結構。相比于傳統關系模型,LindormTable除了支持預定義字段類型外,還可以隨時動態添加列,而無需提前發起DDL變更,以適應大數據靈活多變的特點。同時,LindormTable支持全局二級索引、倒排索引,系統會自動根據查詢條件選擇最合適的索引,加速條件組合查詢,特別適合如畫像、賬單場景海量數據的查詢需求。
時序引擎
LindormTSDB是面向海量時序數據設計的分布式時序引擎,兼容開源OpenTSDB等標準接口,其基于時序數據特點和查詢方式,采用Timerange+hash結合的分區算法,時序專向優化的LSM架構和文件結構,支持海量時序數據的低成本存儲、預降采樣、聚合計算、高可用容災等,高效滿足IoT/監控等場景的測量數據、設備運行數據的存儲處理需求,整體架構如下:
TSCore是時序引擎中負責數據組織的核心部分,其整體思想與LSM結構相似,數據先寫入Memchunk,然后Flush到磁盤,但由于時序數據天然的順序寫入特征,定向專用的時序文件TSFile的結構設計為以時間窗口進行切片,數據在物理和邏輯上均按時間分層,從而大幅減少Compaction的IO放大,并使得數據的TTL、冷熱分離等實現非常高效。
TSCompute是負責時序數據實時計算的組件,重點解決監控領域常見的降采樣轉換和時間線聚合需求,通過Lindorm Stream進行數據訂閱,并完全基于內存計算,所以,整體非常的輕量、高效,適合系統已預置的計算功能。針對部分靈活復雜的分析需求,用戶仍可以通過對接Spark、Flink等系統實現,從而支撐更多場景和適應業務變化。
搜索引擎
LindormSearch是面向海量數據設計的分布式搜索引擎,兼容開源Solr標準接口,同時可無縫作為寬表、時序引擎的索引存儲,加速檢索查詢。其整體架構與寬表引擎一致,基于數據自動分區+分區多副本+Lucene的結構設計,具備全文檢索、聚合計算、復雜多維查詢等能力,支持水平擴展、一寫多讀、跨機房容災、TTL等,滿足海量數據下的高效檢索需求,具體如下:
LindormSearch的數據持久化存儲在LDFS中,通過自動Sharding的方式分散到多臺SearchServer中,每一個分片擁有多個副本,支持一寫多讀,提升查詢聚合的效率,同時這些副本之間共享存儲,有效消除副本之間的存儲冗余。
在Lindorm系統中,LindormSearch既可以作為一種獨立的模型,提供半結構化、非結構化數據的松散文檔視圖,適用于日志數據分析、內容全文檢索;也可以作為寬表引擎、時序引擎的索引存儲,對用戶保持透明,即寬表/時序中的部分字段通過內部的數據鏈路自動同步搜索引擎,而數據的模型及讀寫訪問對用戶保持統一,用戶無需關心搜索引擎的存在,跨引擎之間的數據關聯、一致性、查詢聚合、生命周期等工作全部由系統內部協同處理,用簡單透明的方式發揮多模融合的價值。
流引擎
LindormStream是面向流式數據處理的引擎,提供了流式數據的存儲和輕計算功能,兼容Kafka API和Flink SQL,幫助業務基于Lindorm快速構建基于流式數據的處理和應用。
LindormStream內部包含流存儲、流計算兩大組件,通過兩者的一體化部署和深度融合,支持流數據的高性能實時處理。其中,流存儲負責消息日志數據的寫入和訂閱,兼容開源Kafka API,并且數據持久化存儲在底層LDFS中,具備高吞吐、低成本、彈性等優勢。流計算負責消息日志的實時處理,兼容Flink SQL語法,計算結果數據可以同步至Lindorm寬表引擎、時序引擎等。
計算引擎
計算引擎是基于云原生架構提供的分布式計算服務,計算節點運行在阿里云Serverless Kubernetes(簡稱ASK)容器服務中。計算引擎支持社區版計算模型以及編程接口,同時深度融合Lindorm存儲引擎特性,充分利用底層數據存儲特征以及索引能力,高效地完成分布式作業任務。在數據生產、交互式分析和機器學習等場景中,提供高性能計算服務。Spark作業執行中,計算引擎提供了作業管理接口,您可以通過Spark Web UI(簡稱SparkUI)界面對Spark作業進行完整的監控運維。
AI引擎
AI引擎是Lindorm在數據庫內集成AI能力對多模數據(時序、文本、圖像、音視頻等)進行一站式智能分析和處理的引擎,包括LLM、文生圖、圖生圖、圖片識別等。其支持用戶使用SQL從開源模型平臺(包括ModelScope、HuggingFace)靈活導入預訓練模型,也支持用戶上傳自己的模型,輕松實現在Lindorm內的模型部署和推理。
Lindorm AI引擎采用云原生架構,支持彈性部署云上多種規格的推理節點,且推理節點支持多種機型(CPU和GPU),有效提升模型推理的性能。此外,推理節點和多模引擎存儲共享,在減少數據傳輸成本的同時實現了靠近數據的推理優化。