海量數據 "寫入、共享、存儲、計算" 最佳實踐
標簽
PostgreSQL , 冷熱分離 , 數據共享 , 打破孤島 , 無盤工作 , 存儲計算分離 , 行為數據 , 軌跡數據 , 金融數據 , 監控數據 , 物聯網 , GIS , 範圍 , 數組 , 圖片
背景
數據是為業務服務的,業務方為了更加透徹的掌握業務本身或者使用該業務的群體,往往會收集,或者讓應用埋點,收集更多的日誌。
隨著用戶量、用戶活躍度的增長,時間的積累等,數據產生的速度越來越快,數據堆積的量越來越大,數據的維度越來越多,數據類型越來越多,數據孤島也越來越多。
日積月累,給企業IT帶來諸多負擔,IT成本不斷增加,收益確不見得有多高。
上圖描繪了企業中可能存在的問題:
1. 數據孤島問題嚴重(如果沒有大數據平台時)。
2. 對成本預估不足,計算能力擴容麻煩,又或者鋪張浪費嚴重。
3. 數據冗餘問題突出。
4. 存儲成本昂貴。
5. 業務萎縮後硬件成為固定資產,IT負擔嚴重,幾乎沒有硬件伸縮能力。
6. 數據量太大,幾乎無法備份。
7. 業務需求多,數據種類多,分析成本、開發成本高昂。
本文將針對這個場景,給出一個比較合理的方案,靈活使用,可以減輕企業IT成本,陪伴企業高速成長。
行業場景
1. 物流
一個包裹,從攬件、發貨、運輸、中轉、配送到簽收整個流程中會產生非常多的跟蹤數據,每到一個節點,都會掃描一次記錄包裹的狀態信息。
運輸過程中,車輛與包裹關聯,車輛本身采集的軌跡、油耗、車輛狀態、司機狀態等信息。
配送過程,快遞員的位置信息、包裹的配送信息都會被跟蹤,也會產生大量的記錄。
一個包裹在後台可能會產生上百條跟蹤記錄。
運輸的車輛,一天可能產生上萬的軌跡記錄。
配送小哥,一天也可能產生上萬條軌跡記錄。
我曾經分享過一個物流配送動態規劃的話題。有興趣的童鞋也可以參考
物流行業產生的行為數據量已經達到了海量級別。
怎樣才能有效的對這些數據進行處理呢?
比如:
實時按位置獲取附近的快遞員。
實時統計包裹的流量,快遞員的調度,車輛的調度,倉庫的選址等等一係列的需求。
2. 金融
金融行業也是數據的生產大戶,用戶的交易,企業的交易,證券數據等等。
數據量大,要求實時計算,要求有比較豐富的統計學分析函數等。
我曾經分享過一個關於模擬證券交易的係統需求分析。有興趣的童鞋也可以參考
3. 物聯網
物聯網產生的數據有時序屬性,有流計算需求(例如到達閾值觸發),有事後分析需求。
數據量龐大,有數據壓縮需求。
我剛好也寫過一些物聯網應用的數據庫特性分析,這些特性可以幫助物聯網實現數據的壓縮、流計算等需求。
《流計算風雲再起 - PostgreSQL攜PipelineDB力挺IoT》
《旋轉門數據壓縮算法在PostgreSQL中的實現 - 流式壓縮在物聯網、監控、傳感器等場景的應用》
《PostgreSQL 物聯網黑科技 - 瘦身幾百倍的索引(BRIN index)》
《一個簡單算法可以幫助物聯網,金融 用戶 節約98%的數據存儲成本》
《"物聯網"流式處理應用 - 用PostgreSQL實時處理(萬億每天)》
《PostgreSQL 黑科技 range 類型及 gist index 助力物聯網(IoT)》
物聯網還有一個特性,傳感器上報的數據往往包括數字範圍(例如溫度範圍)、地理位置、圖片等信息,如何高效的存儲,查詢這些類型的數據呢?
4. 監控
監控行業,例如對業務狀態的監控,對服務器狀態的監控,對網絡、存儲等硬件狀態的監控等。
監控行業具有比較強的業務背景,不同的垂直行業,對監控的需求也不一樣,處理的數據類型也不一樣。
例如某些行業可能需要對位置進行監控,如公車的軌跡,出了位置電子圍欄,發出告警。換了司機駕駛,發出警告。等等。
5. 公安
公安的數據來自多個領域,例如 通訊記錄、出行記錄、消費記錄、攝像頭拍攝、社交、購物記錄 等等。
公安的數據量更加龐大,一個比較典型的場景是風險控製、抓捕嫌犯。涉及基於地理位置、時間維度的人物關係分析(圖式搜索)。
如何才能滿足這樣的需求呢?
6. 其他行業
其他不再列舉。
行業痛點
如何解決數據孤島,打通數據共享渠道?
如何高效率的寫入日誌、行為軌跡、金融數據、軌跡數據等?
如何高效的實時處理數據,根據閾值告警通知,實時分析等?
如何解決大數據的容災、備份問題?
如何解決大數據的壓縮和效率問題?
如何解決數據多維度、類型多,計算複雜的問題?
如何解決企業IT架構彈性伸縮的問題?
總結起來幾個關鍵字:
寫入、共享、存儲、計算。
方案
用到三個組件:
1. RDS PostgreSQL
支持時序數據、塊級索引、倒排索引、多核並行、JSON、數組存儲、OSS_FDW外部讀寫等特性。
解決OLTP,GIS應用、複雜查詢、時空數據處理、多維分析、冷熱數據分離的問題。
2. HybridDB PostgreSQL
支持列存儲、水平擴展、塊級壓縮、豐富的數據類型、機器學習庫、PLPYTHON、PLJAVA、PLR編程、OSS_FDW外部讀寫等特性。
解決海量數據的計算問題。
3. OSS 對象存儲
多個RDS實例之間,可以通過OSS_FDW共享數據。
OSS多副本、跨域複製。
解決數據孤島、海量數據存儲、跨機房容災、海量數據備份等問題。
1 寫入
數據寫入分為3條路徑:
1. 在線實時寫入,可以走RDS SQL接口,單個實例能達到 百萬行/s 以上的寫入速度。
2. 批量準實時寫入,可以走HybridDB SQL接口,單個實例能達到 百萬行/s 以上的寫入速度。
3. 批量準實時寫入,比如寫文件,可以走OSS寫入接口,帶寬彈性伸縮。
2 共享
多個RDS實例之間,可以通過OSS_FDW共享數據。
例如A業務和B業務,使用了兩個RDS數據庫實例,但是它們有部分需求需要共享數據,傳統的方法需要用到ETL,而現在,使用OSS_FDW就可以實現多實例的數據共享,而且效率非常高。
通過RDS PostgreSQL OSS_FDW的並行讀寫功能(同一張表的文件,可以開多個worker process進程並行讀寫),共享數據的讀寫效率非常高。
並行體現三個方麵:OSS讀寫並行、RDS PostgreSQL多核計算並行、RDS PG或HybridDB的多機並行。
3 存儲
對於實時數據,使用RDS PostgreSQL, HybridDB的本地數據存儲。對於需要分析、需要共享的數據,使用OSS進行存儲。
OSS相比計算資源的存儲更加的廉價,在確保靈活性的同時,降低了企業的IT成本。
通過OSS對象存儲,解決了企業的數據冗餘、成本高等問題,滿足了數據的備份、容災等需求。
4 計算
通過RDS PostgreSQL, HybridDB, OSS的三個基本組件,實現了計算資源、存儲資源的分離。
因為計算節點的數據量少了(大部分數據都存在OSS了),計算節點的擴容、縮容、容災、備份都更加方便。
計算本身分為以下幾種
1. 流式計算
流式計算分為兩種,一種是實時統計,另一種是設置閾值進行實時的告警。
通過pipelinedb(base on postgresql)可以實現這兩類流計算。
好處:
SQL標準接口,豐富的內置函數支持複雜的流計算需求,豐富的數據類型(包括GIS,JSON等)支持更多的流計算業務場景,異步消息通知機製支持第二類流計算需求。
pipelinedb正在進行插件化改造,以後可以作為PostgreSQL的插件使用。
例如在監控領域,使用流計算的異步消息機製,可以避免傳統主動問詢監控的無用功問題。
2. 實時交互業務
傳統的OLTP需求,使用RDS PostgreSQL可以滿足。
PostgreSQL的特性包括:GIS、JSON、數組、冷熱分離、水平分庫、K-V類型、多核並行、塊級索引、倒排索引等。
PostgreSQL支持的場景包括:流計算、圖式搜索、時序數據、路徑規劃、模煳查詢、全文檢索、相似查詢、秒殺、基因、金融、化學、GIS應用、複雜查詢、BI、多維分析、時空數據搜索等。
覆蓋銀行、保險、證券、物聯網、互聯網、遊戲、天文、出行、電商、傳統企業等行業。
3. 準實時分析
結合OSS對象存儲,RDS PostgreSQL和HybridDB都可以實現準實時的分析。
同一份OSS的數據,也可以在多個實例之間進行共享,同時訪問。
4. 離線分析、挖掘
結合OSS對象存儲,RDS PostgreSQL和HybridDB都可以實現對離線數據的分析和挖掘。
RDS PostgreSQL 支持單機多核並行,HybridDB for PostgreSQL支持多機並行。用戶可以根據計算量進行選擇。
計算需要具備的能力
計算的靈魂是類型的支持、以及類型的處理。
1. PostgreSQL內置了豐富的類型支持,包括(數字、字符串、時間、布爾、枚舉、數組、範圍、GIS、全文檢索、bytea、大對象、幾何、比特、XML、UUID、JSON、複合類型等),同時支持用戶自定義的類型。可以支持幾乎所有的業務場景
2. 操作符,為了滿足對數據的處理需求,PG對每一種支持的類型,都支持非常豐富的操作,
3. 內置函數,PG內置了豐富的統計學函數、三角函數、GIS處理函數,MADlib機器學習函數等。
4. 自定義計算邏輯,用戶可以通過C, python, java, R等語言,定義數據的處理函數。擴展PostgreSQL, HybridDB for PostgreSQL的數據處理能力。
5. 聚合函數,內置了豐富的聚合函數,支持數據的統計。
6. 窗口查詢功能的支持。
7. 遞歸查詢的支持。
8. 多維分析語法的支持。
方案小結
RDS PostgreSQL 優勢
主要體現在這幾個方麵
1. 性能
RDS PostgreSQL主要處理在線事務以及少量的準實時分析。
PG OLTP的性能可以參考這篇文檔,性能區間屬於商業數據庫水準。
PG 的OLAP分析能力,可以參考這篇文檔,其多核並行,JIT,算子複用等特性,使得PG的OLAP能力相比其他RDBMS數據庫有質的提升。
《分析加速引擎黑科技 - LLVM、列存、多核並行、算子複用 大聯姻 - 一起來開啟PostgreSQL的百寶箱》
PostgreSQL 10 在HTAP方麵還有更多的增強。
2. 功能
功能也是PostgreSQL的強項,在上一章《計算需要具備的能力》有詳細介紹。
3. 擴展能力
計算能力擴展,通過增加CPU,可以擴展複雜計算的性能。
存儲能力擴展,通過OSS存儲以及oss_fdw插件,可以擴展RDS PG的存儲能力,打破存儲極限。
4. 成本
存儲成本:由於大部分需要分離的數據都存儲到OSS了,用戶不再需要考慮這部分的容災、備份問題。相比存儲在數據庫中,存儲成本大幅降低。
開發成本:RDS PG, HybridDB PG都支持豐富的SQL標準接口,訪問OSS中的數據(通過TABLE接口),使用的也是SQL標準接口。節省了大量的開發成本,
維護成本:使用雲服務,運維成本幾乎為0。
5. 覆蓋行業
覆蓋了銀行、保險、證券、物聯網、互聯網、遊戲、天文、出行、電商、傳統企業等行業。
HybridDB PostgreSQL 優勢
1. 性能
HybridDB PostgreSQL為MPP架構,計算能力出眾。
2. 功能
在上一章《計算需要具備的能力》有詳細介紹。
3. 擴展能力
計算能力擴展,通過增加計算節點數,可以擴展複雜計算的性能。
存儲能力擴展,通過OSS存儲以及oss_fdw插件,可以擴展RDS PG的存儲能力,打破存儲極限。
4. 成本
存儲成本:由於大部分需要分離的數據都存儲到OSS了,用戶不再需要考慮這部分的容災、備份問題。相比存儲在數據庫中,存儲成本大幅降低。
開發成本:RDS PG, HybridDB PG都支持豐富的SQL標準接口,訪問OSS中的數據(通過TABLE接口),使用的也是SQL標準接口。節省了大量的開發成本,
維護成本:使用雲服務,運維成本幾乎為0。
5. 覆蓋行業
覆蓋了銀行、保險、證券、物聯網、互聯網、遊戲、天文、出行、電商、傳統企業等行業。
典型用法
參考
《RDS PostgreSQL : 使用 oss_fdw 讀寫OSS對象存儲》
《HybridDB PostgreSQL : 使用 oss_fdw 讀寫OSS對象存儲》
最後更新:2017-05-09 20:31:43