基於表格存儲Tablestore和OSS實現企業網盤

表格存儲Tablestore是阿里雲自研的結構化數據存儲平臺,提供海量結構化數據存儲以及快速的查詢和分析服務。表格存儲Tablestore的分佈式存儲和強大的索引引擎能夠支持PB級存儲、千萬TPS以及毫秒級延遲的服務能力。阿里雲對象存儲服務(Object Storage Service,簡稱 OSS),是阿里雲提供的海量、安全、低成本、高可靠的雲存儲服務。

網盤是一種在線存儲服務,服務商爲用戶提供文件的存儲、訪問、共享等文件管理必備的基本功能。我們將其數據分爲兩種:

文件。 用戶存放的真實文件。早期,網盤中的文件大多存儲在文件系統中,如本地磁盤、HDFS、NAS等。現在網盤更多的選擇存儲在對象存儲中,如OSS,其在穩定性、安全性、成本、彈性上都會具有優勢。
元數據(Meta)。 描述文件信息的數據,如歸屬者、目錄、大小、創建時間、文件類型等。利用該元數據可以找到真實的文件地址,也可以利用元數據做文件的查詢、分享、歸類等。
在這裏插入圖片描述
文件數據直接使用OSS存儲即可,簡單高效。最複雜的是元數據的存儲和查詢,接下來我們看下網盤元數據(Meta)的存儲和查詢解決方案。

網盤元數據特點
網盤類型的元數據非常適合存儲在Tablestore,主要是因爲網盤類型元數據的一些特徵和Tablestore匹配。

數據量大
存儲海量網盤元數據的同時,需要滿足強一致、高可用、低成本等要求。用戶的文件數量巨大,比如圖片、視頻、工作文檔是數量最多的數據,一個企業的網盤元數據規模通常在TB級別。傳統的Mysql方案中,數據量一旦達到瓶頸,便需要重新創建更大規模的分庫然後進行數據的全量遷移,同時數據迭代、膨脹帶來的困擾是MySql方案難於逾越的門檻。因此,如此規模的數據存儲已經不適合用單機的關係型數據庫了,也不適合分庫分表了,而需要一款分佈式NoSQL數據庫,這樣可以將數據按一定的路由規則分佈到不同機器上,實現自動的水平擴展,非常適合存儲海量數據。

查詢類型多樣
網盤類型元數據與一般元數據不同的是有很多的tag標籤,因此係統需要具備搜索查詢多維度嵌套標籤的能力。以圖片爲例:用戶通過智能媒體的分析服務,分析圖片然後爲圖片增加標籤,用戶還可提取人臉識別相關信息,提取的信息也需要存儲到文件元數據信息中。圖片的元數據信息量不斷增加,格式、類型也在不斷呈現多元化。因此,需要具備豐富的查詢類型,如多維度、範圍、模糊查詢、地理位置等,同時具備排序、統計等功能。比如用戶希望查找在杭州市某個商圈1km內的照片?查找2019年所有關於兒子成績單的excel文件?這時候關係型數據庫可能在查詢功能和性能上不一定能滿足需求,需要額外使用一些查詢引擎如Solr、Elasticsearch等。

服務性能及成本
新業務需要產品快速上線,這時候既要高併發,又要保證低延遲,同時又希望兼顧成本最低。隨着系統用戶的增多減少以及不可預期的熱點事件,需要能夠動態的擴容和縮容來節約成本,比如系統起步階段可以使用一款全託管的Serverless數據庫,來專注於業務研發,無需擔心軟硬件配置、故障、集羣擴展、安全等問題,在保證服務高可用性的同時,極大地減少了管理及運維成本,幫助產品快速上線。

開源解決方案
傳統的網盤元數據可能會採用關係數據庫Mysql的方案,藉助關係型數據庫強大的查詢能力,用戶可直接通過SQL語句實現文件的元數據多維度查詢、數據統計分析等。但是,Mysql等關係數據庫通常有如下一些問題:

  • 隨着數據量的膨脹無法水平擴展。數據庫要滿足易擴展、低成本等基本要求;
  • 對文件的多維查詢需求支持不佳。數據庫需要具備強大的查詢能力,如多類型索引、多維度組合查詢等,同時具備排序、統計等功能;
  • 在數量比較大的情況下,寫入性能較差。數據庫需要應對高併發請的同時,保證低延遲、強一致、高可用等特性。
    爲了解決如上問題,多種數據庫組合的方案便孕育而生,如Mysql分庫分表+Elasticsearch的方案解決寫入和查詢能力等問題,這些方案的架構可能如下:
    藉助多個數據庫各自的優勢可以分別解決不同場景的需求,但多個數據庫組合的方案同樣也帶來了新的問題:

1.犧牲了空間成本,Mysql和Elasticsearch中的數據存在無用的冗餘數據;
2.較難保證兩個數據庫的數據一致性,存在數據丟失的可能性;
3.增加了開發工作量與運維複雜度。
Tablestore雲解決方案
在現有的各種各樣的雲產品中,能滿足上述網盤元數據需求的產品並不多。表格存儲Tablestore是阿里雲借鑑谷歌Bigtable論文研發的一款分佈式數據庫產品,可以提供超大規模的存儲容量,天然的分佈式架構也提供了易於橫向擴展的特性,理論上可以存儲的數據量是不受限制的。該數據庫10年前就開始自研,經過多年的雙十一、公有云客戶的錘鍊沉澱,保證了系統的可靠性和穩定性。

基於Tablestore存儲網盤架構方案如圖:
在這裏插入圖片描述
網盤文件的存儲
OSS和表格存儲Tablestore一樣,都是Serverless的雲服務,其數據設計持久性不低於99.9999999999%(12 個 9),服務設計可用性(或業務連續性)不低於 99.995%。OSS按量使用且無需關心運維。使用oss進行文件的存儲會使應用在穩定性、安全性、成本、彈性上都會具有優勢。不用自己搭建和維護文件系統,開發人員可以把精力放在覈心功能的開發上。

網盤元數據的存儲

  • 網盤元數據數據存儲在Tablestore中,Tablestore可以提供10個9的數據可靠性保障,數據可靠性有保障。
  • 網盤元數據和索引都在一個系統裏面,寫入,讀取都是通過同一套API寫入和查詢,易用性更高。
  • Tablestore支持二級索引、多元索引等索引功能,完全滿足上述提出的查詢需求,包括:
  • 多字段自由組合查詢。
  • 範圍查詢。
  • 地理位置查詢。
  • Tablestore是分佈式系統,可以水平擴展,目前生產環境單表最大有幾十PB,每秒寫入有幾千萬行,完全能勝任任何大數據的寫入和存儲。
    示例
    接下來,我們通過一個網盤元數據的使用示例增加理解。

假設我們的產品需要給用戶提供個人相冊服務。將相冊中的圖片和視頻存儲在對象存儲OSS中,將圖片和視頻的元數據(Meta Data)存儲在表格存儲Tablestore中。一般的文件Meta信息包括:用戶id、文件id、文件類型、創建時間、照片地點、文件大小、文件狀態、標籤信息、OSS鏈接、是否星標文件、用戶描述信息。

首先,我們設計Tablestore中主表結構:
在這裏插入圖片描述
Tablestore的主表在查詢時候可以理解爲是幾個主鍵列上的前綴索引,上述主表結構中,支持的查詢包括:

一個用戶下的所有圖片或視頻
一個用戶某一段時間內的圖片或視頻
查看用戶最近的圖片或視頻
Tablestore支持全局二級索引。全局二級索引支持在指定列上建立索引,生成的索引表中數據按您指定的索引列進行排序,主表的每一個寫入都將自動異步同步到索引表。您只向主表中寫入數據,根據索引表進行查詢,在許多場景下,將極大的提高查詢的效率。例如網盤場景下如果主鍵查詢不能滿足需求,對於簡單的查詢(例如單個字段查詢)我們可以直接創建全局二級索引,通過全局二級索引能夠快速的查詢信息。

通過主表和二級索引,已經能夠完成相冊的基本功能,如文件的上傳下載等。如果想完成更加豐富和複雜的查詢功能(多個字段關聯查詢),可以使用Tablestore的多元索引功能,其中多元索引的索引定義:
在這裏插入圖片描述

  • 用戶描述信息採用了Text類型, 支持分詞,分詞使用了單字分詞。該字段可以進行模糊匹配查詢。
  • 拍攝地點採用了GeoPoint類型,這個類型支持範圍查詢。比如某個點附近幾公里內的所有照片,同時也支持某個多邊形範圍內的所有照片信息。
    標籤信息是Nested嵌套類型的,其支持的查詢和非嵌套類型一致,只是使用方式上有一些小差別。
  • 多元索引支持多字段組合查詢,可以滿足任意幾個列與或非組合查詢,如:查詢文件類型是圖片且拍攝地點是上海且文件大小超過100MB且是標星文件且創建時間在9月份之前的所有照片

另外,可能還有一些統計聚合需求,在運營產品和製作報表時候可能會用到。這些都可以基於多元索引完成,比如:

  • 目前所有用戶的相冊中一共有多少張?通過Aggregation.Count(*);
    所有用戶中超過1G的文件有多少個?GroupBy.GroupByRange(文件大小);
  • 視頻和圖片各有多少張?通過 GroupBy.GroupByField(文件類型); 過去三年每年相冊的上傳數量? 通過
    GroupBy.GroupByRange(創建時間);
  • 視頻文件中最大文件有多大? 通過Aggregation.Max(文件大小);
    基於上述的表、二級索引和多元索引,我們就能滿足幾乎所有的查詢需求。

總結
至此,開源解決方案和Tablestore雲解決方案都介紹完了,使用了Tablestore雲解決方案後,能帶來不少的收益。

減少運維負擔
在Tablestore雲解決方案中,用戶只需要運維自己的應用程序,不需要運維任何的存儲系統、查詢系統和其他中間件,運維壓力大大減少,同時也減少了運維方面的成本開支。另外,Tablestore是Serverless的服務化產品,不需要關注擴容、水位等事項,只需要關注功能開發即可。

系統架構更簡單
在開源解決方案中使用多個系統,而Tablestore解決方案中只有1個系統,系統數減少後,系統架構會更簡單,系統可能產生的風險會更少,系統的穩定性等會更高,可以提供更優質的服務體驗。

減少時間成本
Tablestore雲架構方案相對於開源方案,系統更少,從零開始到上線需要的開發時間更少,同時,Tablestore是serverless的雲服務,全球多個區域即開即用,可以大大降低客戶的開發上線的時間,提前將產品推出,搶先爭取市場領先優勢。

數據可靠性更高
在開源解決方案中,數據有可能會丟失,影響最終的業務,而在Tablestore解決方案中,可以提供更高的可靠性,可以讓數據不丟失,保障業務的準確執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章