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