天天看點

如何打造千萬級Feed流系統?阿裡資料庫技術解讀

2017年的雙十一又一次重新整理了記錄,交易建立峰值32.5萬筆/秒、支付峰值25.6萬筆/秒。而這樣的交易和支付等記錄,都會形成實時訂單Feed資料流,彙入資料營運平台的主動服務系統中去。資料營運平台的主動服務,根據這些合并後的資料,實時的進行分析,進行實時的輿情展示,實時的找出需要主動服務的對象等,實作一個智能化的服務營運平台。

如何打造千萬級Feed流系統?阿裡資料庫技術解讀
通過RDS PostgreSQL和HybridDB for PGSQL實時分析方案:

  • 承受住了每秒幾十萬筆的寫入吞吐并做資料清洗,是交易的數倍
  • 實作分鐘級延遲的實時分析,5張十億級表關聯秒級響應
  • 實時發現交易異常,提升淘寶的使用者體驗

業務背景

一個電商業務通常會涉及 商家、門店、物流、使用者、支付管道、貸款管道、商品、平台、小二、廣告商、廠家、分銷商、店主、店員、監管員、稅務、質檢等等角色,這些對象的活動會産生大量的 浏覽、訂單、投訴、退款、糾紛等業務資料。而任何一筆業務,都會涉及很多不同的業務系統。

在這些業務系統中,為了定位問題、營運需要、分析需要或者其他需求,會在系統中設定埋點,記錄使用者的行為在業務系統中産生的日志,也叫FEED日志。比如訂單系統、在業務系統中環環相扣,從購物車、下單、付款、發貨,收貨(還有糾紛、退款等等),一筆訂單通常會産生若幹相關聯的記錄。每個環節産生的屬性可能是不一樣的,有可能有新的屬性産生,也有可能變更已有的屬性值。

為了便于分析,通常有必要将訂單在整個過程中産生的若幹記錄(若幹屬性),合并成一條記錄(訂單大寬表)。資料營運平台的主動服務,根據這些合并後的資料,實時的進行分析,進行實時的輿情展示,實時的找出需要主動服務的對象等,實作一個智能化的服務營運平台。

難點

除了實時性的要求以外,在寫入的過程中,還有資料的切換、合并和清理等動作。做過資料庫或資料分析的會知道:單獨要做到每秒數十萬筆吞吐的寫入、切換、合并和清理并不算特别困難;單獨要做到TB級資料的毫秒級分析也不算困難。但要做到實時寫入的同時提供分鐘級延遲的毫秒級實時分析,并做合理的排程就沒那麼容易了。

方案

為支撐這樣的業務需求,采用的方案圖示如下:

如何打造千萬級Feed流系統?阿裡資料庫技術解讀

其中:

  • 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中,建立一個外部表:

如何打造千萬級Feed流系統?阿裡資料庫技術解讀

這樣即建立了映射到OSS對象的表,通過對ossexample的讀寫即是對OSS的讀寫。在資料寫入"local_tbl"中後,執行以下SQL:

如何打造千萬級Feed流系統?阿裡資料庫技術解讀

表"local_tbl"中滿足過濾條件的資料,即會寫入OSS對應的對象"osstest/example.csv"中。

在HybridDB for PostgreSQL也用與此類似的方式讀寫OSS。整個過程,使用者看到的隻是一條條SQL。如下:

如何打造千萬級Feed流系統?阿裡資料庫技術解讀

該INSERT語句的執行,即會将"osstest/exp/outfromhdb" 檔案中的資料,并行寫入到表"example"中。其原理如下:

如何打造千萬級Feed流系統?阿裡資料庫技術解讀

HybridDB 是分布式資料庫,一個HybridDB for PostgreSQL叢集中,有一個Master和多個Segment,Segment的個數可以橫向擴充。Segment負責存儲、分析資料,Master則是主入口接受查詢請求并分發。

通過每個Segment并行從OSS上讀取資料,整個叢集可以達到相當高的吞吐能力,且這個能力随Segment個數而線性增加。

方案優勢

上面的方案初看起來并不複雜,卻解決了下面幾個問題:

性能

融合了PostgreSQL超強的并發寫入性能與HybridDB卓越的分析性能。

單個RDS PostgreSQL甚至可以支撐到百萬級的寫入; 而寫入PostgreSQL後批量加載到HybridDB,使得PostgreSQL與HybridDB無縫銜接,利用MPP卓越的分析性能做到實時的毫秒級查詢。

資料的搬運與清洗

在傳統的分析領域,資料的搬運往往是比較重、且性能較差的一環,導緻TP和AP距離較遠,隻能采用截然不同的方式和節奏。而如果是異構資料庫的搬運,則痛苦指數再上台階。

如果這些,都可以通過SQL來操作,資料的清洗和搬運最終都隻是SQL的定義與執行,豈不美哉?

在上圖中,RDS PostgreSQL 和 HybridDB for PostgreSQL都有直接讀寫OSS的能力,可以很容易地的串聯起來。假以合理的排程和封裝,可以以較低的成本實作原本需要很多工作量的功能。

冷熱資料的統一

而借操作離線存儲的能力,可以将冷資料放在OSS,熱資料放在PostgreSQL或者HybridDB for PostgreSQL,可以通過SQL以相同的處理方式實作對冷熱資料的統一處理。

動态調整資源

雲生态的好處之一就是動态與彈性。RDS PostgreSQL的資源可以随時動态調整,而不影響任何的可用性,相當于給飛機在空中加油;而對HybridDB的擴容與縮容,則是秒級切換即可完成。OSS本身的彈性,也允許客戶放多少的資料都可以。

是以,帶來了如下幾點優勢:

相比于傳統的資料分析方案,以SQL為統一的方式進行資料的管理,減少異構

資源動态排程,降低成本

冷熱資料界限模糊,直接互相通路

TP、AP一體化

RDS PostgreSQL的個數沒有限制;HybridDB叢集的數量沒有限制

阿裡雲雲資料庫PostgreSQL

阿裡雲雲資料庫 PostgreSQL,基于号稱“Most Advanced”的開源關系型資料庫。在StackOverflow 2017開發者調查中,PostgreSQL可以說是“年度統計中開發者最愛和最想要的關系型資料庫”。

如何打造千萬級Feed流系統?阿裡資料庫技術解讀
如何打造千萬級Feed流系統?阿裡資料庫技術解讀

PostgreSQL的優勢有以下幾點:

穩定

PostgreSQL的代碼品質是被很多人認可的,經常會有人笑稱PG的開發者都是處女座。基本上,PG的一個大版本釋出,經過三兩個小版本就可以上生産,這是值得為人稱道的一個地方。從PostgreSQL漂亮的commit log就可見一斑。

而得益于PostgreSQL的多程序架構,一個連接配接的異常并不影響主程序和其他連接配接,進而帶來不錯的穩定性。

我們内部有些性能上的資料,TPCC的性能測試顯示PostgreSQL的性能與商業資料庫基本在同一個層面上,個别場景下性能甚至更好。

豐富

PostgreSQL的豐富性是最值得訴說的地方。因為太豐富了,以至于不知道該如何突出重點。這裡隻列舉幾個認為比較有意思的幾點(查詢、類型、功能)。

功能的豐富

且不說HASHMergeNestLoop JOIN,還有遞歸、樹形(connect by)、視窗、rollupcubegrouping 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中的數組一樣操作資料庫中的資料,如 item0即表示二維數組中的一個元素,而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也企業大資料實時分析運算和存儲的核心引擎。實作企業在雲端從線上業務、到資料實時分析的業務資料閉環。