如何打造千萬級Feed流係統?阿裏數據庫技術解讀
2017年的雙十一又一次刷新了記錄,交易創建峰值32.5萬筆/秒、支付峰值25.6萬筆/秒。而這樣的交易和支付等記錄,都會形成實時訂單Feed數據流,匯入數據運營平台的主動服務係統中去。數據運營平台的主動服務,根據這些合並後的數據,實時的進行分析,進行實時的輿情展示,實時的找出需要主動服務的對象等,實現一個智能化的服務運營平台。

通過RDS PostgreSQL和HybridDB for PGSQL實時分析方案:
- 承受住了每秒幾十萬筆的寫入吞吐並做數據清洗,是交易的數倍
- 實現分鍾級延遲的實時分析,5張十億級表關聯秒級響應
- 實時發現交易異常,提升淘寶的用戶體驗
業務背景
一個電商業務通常會涉及 商家、門店、物流、用戶、支付渠道、貸款渠道、商品、平台、小二、廣告商、廠家、分銷商、店主、店員、監管員、稅務、質檢等等角色,這些對象的活動會產生大量的 瀏覽、訂單、投訴、退款、糾紛等業務數據。而任何一筆業務,都會涉及很多不同的業務係統。
在這些業務係統中,為了定位問題、運營需要、分析需要或者其他需求,會在係統中設置埋點,記錄用戶的行為在業務係統中產生的日誌,也叫FEED日誌。比如訂單係統、在業務係統中環環相扣,從購物車、下單、付款、發貨,收貨(還有糾紛、退款等等),一筆訂單通常會產生若幹相關聯的記錄。每個環節產生的屬性可能是不一樣的,有可能有新的屬性產生,也有可能變更已有的屬性值。
為了便於分析,通常有必要將訂單在整個過程中產生的若幹記錄(若幹屬性),合並成一條記錄(訂單大寬表)。數據運營平台的主動服務,根據這些合並後的數據,實時的進行分析,進行實時的輿情展示,實時的找出需要主動服務的對象等,實現一個智能化的服務運營平台。
難點
除了實時性的要求以外,在寫入的過程中,還有數據的切換、合並和清理等動作。做過數據庫或數據分析的會知道:單獨要做到每秒數十萬筆吞吐的寫入、切換、合並和清理並不算特別困難;單獨要做到TB級數據的毫秒級分析也不算困難。但要做到實時寫入的同時提供分鍾級延遲的毫秒級實時分析,並做合理的調度就沒那麼容易了。
方案
為支撐這樣的業務需求,采用的方案圖示如下:
其中:
- RDS PostgreSQL 是阿裏雲基於開源關係型數據庫PostgreSQL開發的雲上版本
- HybridDB for PostgreSQL是MPP架構的分布式分析型數據庫,在多表關聯、複雜查詢、實時統計、圈人等諸多方麵性能卓越,並支持JSON、GIS、HLL估值等多種獨特的功能特性
- OSS,是阿裏雲推出的海量、安全、低成本、高可靠的雲存儲服務,此處用作數據的離線存儲
- 最關鍵的,是實現RDS PostgreSQL和HybridDB for PostgreSQL 對離線存儲OSS的透明化訪問能力
在該方案中,多個PostgreSQL接受業務的寫入,在每個RDS PostgreSQL中完成數據的清洗,然後以操作外部表(類似堆表)的方式,將清洗完的數據寫入彈性存儲OSS;而在寫入完成後,HybridDB for PostgreSQL 也以操作外部表(類似堆表)的方式,從OSS中將數據並行加載到HybridDB中。在HybridDB中,實現幾十、幾百TB級數據的毫秒級查詢。
在PostgreSQL中,創建一個外部表:
這樣即創建了映射到OSS對象的表,通過對ossexample的讀寫即是對OSS的讀寫。在數據寫入"local_tbl"中後,執行以下SQL:
表"local_tbl"中滿足過濾條件的數據,即會寫入OSS對應的對象"osstest/example.csv"中。
在HybridDB for PostgreSQL也用與此類似的方式讀寫OSS。整個過程,用戶看到的隻是一條條SQL。如下:
該INSERT語句的執行,即會將"osstest/exp/outfromhdb" 文件中的數據,並行寫入到表"example"中。其原理如下:
HybridDB 是分布式數據庫,一個HybridDB for PostgreSQL集群中,有一個Master和多個Segment,Segment的個數可以橫向擴充。Segment負責存儲、分析數據,Master則是主入口接受查詢請求並分發。
通過每個Segment並行從OSS上讀取數據,整個集群可以達到相當高的吞吐能力,且這個能力隨Segment個數而線性增加。
方案優勢
上麵的方案初看起來並不複雜,卻解決了下麵幾個問題:
1.性能
融合了PostgreSQL超強的並發寫入性能與HybridDB卓越的分析性能。
單個RDS PostgreSQL甚至可以支撐到百萬級的寫入; 而寫入PostgreSQL後批量加載到HybridDB,使得PostgreSQL與HybridDB無縫銜接,利用MPP卓越的分析性能做到實時的毫秒級查詢。
2.數據的搬運與清洗
在傳統的分析領域,數據的搬運往往是比較重、且性能較差的一環,導致TP和AP距離較遠,隻能采用截然不同的方式和節奏。而如果是異構數據庫的搬運,則痛苦指數再上台階。
如果這些,都可以通過SQL來操作,數據的清洗和搬運最終都隻是SQL的定義與執行,豈不美哉?
在上圖中,RDS PostgreSQL 和 HybridDB for PostgreSQL都有直接讀寫OSS的能力,可以很容易地的串聯起來。假以合理的調度和封裝,可以以較低的成本實現原本需要很多工作量的功能。
3.冷熱數據的統一
而借操作離線存儲的能力,可以將冷數據放在OSS,熱數據放在PostgreSQL或者HybridDB for PostgreSQL,可以通過SQL以相同的處理方式實現對冷熱數據的統一處理。
4.動態調整資源
雲生態的好處之一就是動態與彈性。RDS PostgreSQL的資源可以隨時動態調整,而不影響任何的可用性,相當於給飛機在空中加油;而對HybridDB的擴容與縮容,則是秒級切換即可完成。OSS本身的彈性,也允許客戶放多少的數據都可以。
因此,帶來了如下幾點優勢:
- 相比於傳統的數據分析方案,以SQL為統一的方式進行數據的管理,減少異構
- 資源動態調度,降低成本
- 冷熱數據界限模煳,直接互相訪問
- TP、AP一體化
- RDS PostgreSQL的個數沒有限製;HybridDB集群的數量沒有限製
阿裏雲雲數據庫PostgreSQL
阿裏雲雲數據庫 PostgreSQL,基於號稱“Most Advanced”的開源關係型數據庫。在StackOverflow 2017開發者調查中,PostgreSQL可以說是“年度統計中開發者最愛和最想要的關係型數據庫”。
PostgreSQL的優勢有以下幾點:
穩定
PostgreSQL的代碼質量是被很多人認可的,經常會有人笑稱PG的開發者都是處女座。基本上,PG的一個大版本發布,經過三兩個小版本就可以上生產,這是值得為人稱道的一個地方。從PostgreSQL漂亮的commit log就可見一斑。
而得益於PostgreSQL的多進程架構,一個連接的異常並不影響主進程和其他連接,從而帶來不錯的穩定性。
性能
我們內部有些性能上的數據,TPCC的性能測試顯示PostgreSQL的性能與商業數據庫基本在同一個層麵上,個別場景下性能甚至更好。
豐富
PostgreSQL的豐富性是最值得訴說的地方。因為太豐富了,以至於不知道該如何突出重點。這裏隻列舉幾個認為比較有意思的幾點(查詢、類型、功能)。
功能的豐富
且不說HASH\Merge\NestLoop JOIN,還有遞歸、樹形(connect by)、窗口、rollup\cube\grouping sets、物化視圖、SQL標準等,還有各種全文檢索、規則表達式、模煳查詢、相似度等。在這些之外,最重要的是PostgreSQL強大的基於成本的優化器,結合並行執行(並行掃瞄、並行JOIN等)和多種成本因子,帶來各種各樣豐富靈活高效的查詢支持。另外還有各種索引的類型,如btree, hash, gist, sp-gist, gin, brin , bloom , rum 索引等。你甚至可以為自己定義的類型定製特定的索引和索引掃瞄。
PostgreSQL有一個無與倫比的特性——插件。其利用內核代碼中的Hook,可以讓你在不修改數據庫內核代碼的情況下,自主添加任意功能,如PostGIS、JSON、基因等,都是在插件中做了很多的自定義而又不影響任何內核代碼從而滿足豐富多樣的需求。而PostgreSQL的插件,不計其數。
FDW機製更讓你可以在同一個PostgreSQL中像操作本地表一樣訪問其他數據源,如Hadoop、MySQL、Oracle、Mongo等,且不會占用PG的過多資源。比如我們團隊開發的OSS_FDW就用於實現對OSS的讀寫。
類型的豐富
如高精度numeric, 浮點, 自增序列,貨幣,字節流,時間,日期,時間戳,布爾, 枚舉,平麵幾何,立體幾何,多維幾何,地球,PostGIS,網絡,比特流,全 文檢索,UUID,XML,JSON,數組,複合類型,域類型,範圍,樹類型,化 學類型,基因序列,FDW, 大對象, 圖像等。
PS: 這裏的數組,可以讓用戶像操作JAVA中的數組一樣操作數據庫中的數據,如 item[0][1]即表示二維數組中的一個元素,而item可以作為表的一個字段。
或者,如果以上不夠滿足,你可以自定義自己的類型(create type),並且可以針對這些類型進行運算符重載,比如實現IP類型的加減乘除(其操作定義依賴於具體實現,意思是:你想讓IP的加法是什麼樣子就是什麼樣子)。
查詢的豐富
至於其他的,舉個簡單的例子,PostgreSQL的DDL(如加減字段)是可以在事務中完成的 (PS: PostgreSQL是Catalog-Driven的,DDL的修改基本可以理解為一條記錄的修改)。這一點,相信做業務的同學會有體會。
而在開源版本的基礎上,阿裏雲雲數據庫PostgreSQL增加了HA、無縫擴縮容、自動備份、恢複與無感知切換、離線存儲透明訪問、診斷與優化等諸多功能,解除使用上的後顧之憂。
阿裏雲HybridDB for PostgreSQL
HybridDB for PostgreSQL是MPP架構的分布式分析型數據庫,基於開源Greenplum,在多表關聯、複雜查詢、實時統計、圈人等諸多方麵性能卓越。在此基礎上,阿裏雲HybridDB for PostgreSQL提供JSON、GIS、HLL估值、備份恢複、異常自動化修複等多種獨特的功能特性;並在METASCAN等方麵做了諸多性能優化,相比開源版本有質的提升。
阿裏雲HybridDB for PostgreSQL有以下特點:
-
實時分析
支持SQL語法進行分布式GIS地理信息數據類型實時分析,協助物聯網、互聯網實現LBS位置服務統計;支持SQL語法進行分布式JSON、XML、模煳字符串等數據實時分析,助金融、政企行業實現報文數據處理及模煳文本統計。
-
穩定可靠
支持分布式ACID數據一致性,實現跨節點事務一致,所有數據雙節點同步冗餘,SLA保障99.9%可用性;分布式部署,計算單元、服務器、機櫃三重防護,提高重要數據基礎設施保障。
-
簡單易用
豐富的OLAP SQL語法及函數支持,眾多Oracle函數支持,業界流行的BI軟件可直接聯機使用;可與雲數據庫RDS(PostgreSQL/PPAS)實現數據通訊,實現OLTP+OLAP(HTAP)混合事務分析解決方案。
支持分布式的SQL OLAP統計及窗口函數,支持分布式PL/pgSQL存儲過程、觸發器,實現數據庫端分布式計算過程開發。
符合國際OpenGIS標準的地理數據混合分析,通過單條SQL即可從海量數據中進行地理信息的分析,如:人流量、麵積統計、行蹤等分析。
-
性能卓越
支持行列混合存儲,列存性能在OLAP分析時相比行存儲可達100倍性能提升;支持高性能OSS並行數據導入,避免單通道導入的性能瓶頸。
基於分布式大規模並行處理,隨計算單元的添加線性擴展存儲及計算能力,充分發揮每個計算單元的OLAP計算效能。
-
靈活擴展
按需進行計算單元,CPU、內存、存儲空間的等比擴展,OLAP性能平滑上升致數百TB;支持透明的OSS數據操作,非在線分析的冷數據可靈活轉存到OSS對象存儲,數據存儲容量無限擴展。
通過MySQL數據庫可以通過mysql2pgsql進行高性能數據導入,同時業界流行的ETL工具均可支持以HybridDB為目標的ETL數據導入。
可將存儲於OSS中的格式化文件作為數據源,通過外部表模式進行實時操作,使用標準SQL語法實現數據查詢。
支持數據從PostgreSQL/PPAS透明流入,持續增量無需編程處理,簡化維護工作,數據入庫後可再進行高性能內部數據建模及數據清洗。
-
安全
IP白名單配置,最多支持配置1000個允許連接RDS實例的服務器IP地址,從訪問源進行直接的風險控製。
DDOS防護, 在網絡入口實時監測,當發現超大流量攻擊時,對源IP進行清洗,清洗無效情況下可以直接拉進黑洞。
總結
利用阿裏雲的雲生態,RDS PostgreSQL、HybridDB for PostgreSQL等一係列雲服務,幫助企業打造智能的企業數據BI平台,HybridDB for PostgreSQL也企業大數據實時分析運算和存儲的核心引擎。實現企業在雲端從在線業務、到數據實時分析的業務數據閉環。
原文發布時間為:2017-11-24
本文作者:德歌&竇賢明
本文來自雲棲社區合作夥伴“阿裏技術”,了解相關信息可以關注“阿裏技術”微信公眾號
最後更新:2017-11-26 22:05:28