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í)分析方案:
(1)承受住了每秒幾十萬筆的寫入吞吐并做數(shù)據(jù)清洗躁绸,是交易的數(shù)倍
(2)實(shí)現(xiàn)分鐘級(jí)延遲的實(shí)時(shí)分析裕循,5張十億級(jí)表關(guān)聯(lián)秒級(jí)響應(yīng)
(3)實(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)相扣,從購物車酵熙、下單轧简、付款、發(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ì)知道:?jiǎn)为?dú)要做到每秒數(shù)十萬筆吞吐的寫入、切換站宗、合并和清理并不算特別困難闸准;單獨(dú)要做到TB級(jí)數(shù)據(jù)的毫秒級(jí)分析也不算困難。但要做到實(shí)時(shí)寫入的同時(shí)提供分鐘級(jí)延遲的毫秒級(jí)實(shí)時(shí)分析梢灭,并做合理的調(diào)度就沒那么容易了夷家。
方案
為支撐這樣的業(yè)務(wù)需求蒸其,采用的方案圖示如下:
其中:
(1)RDS PostgreSQL 是阿里云基于開源關(guān)系型數(shù)據(jù)庫PostgreSQL開發(fā)的云上版本
(2)HybridDB for PostgreSQL是MPP架構(gòu)的分布式分析型數(shù)據(jù)庫,在多表關(guān)聯(lián)库快、復(fù)雜查詢摸袁、實(shí)時(shí)統(tǒng)計(jì)、圈人等諸多方面性能卓越义屏,并支持JSON靠汁、GIS、HLL估值等多種獨(dú)特的功能特性
(3)OSS闽铐,是阿里云推出的海量蝶怔、安全、低成本兄墅、高可靠的云存儲(chǔ)服務(wù)踢星,此處用作數(shù)據(jù)的離線存儲(chǔ)
(4)最關(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ì):
(1)相比于傳統(tǒng)的數(shù)據(jù)分析方案拘领,以SQL為統(tǒng)一的方式進(jìn)行數(shù)據(jù)的管理,減少異構(gòu)
(2)資源動(dòng)態(tài)調(diào)度樱调,降低成本
(3)冷熱數(shù)據(jù)界限模糊约素,直接互相訪問
(4)TP、AP一體化
(5)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)(查詢蟆肆、類型、功能)晦款。
(1)功能的豐富
且不說HASHMergeNestLoop JOIN炎功,還有遞歸、樹形(connect by)缓溅、窗口蛇损、rollupcubegrouping 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的讀寫摄职。
(2)類型的豐富
如高精度numeric, 浮點(diǎn), 自增序列誊役,貨幣,字節(jié)流谷市,時(shí)間蛔垢,日期,時(shí)間戳迫悠,布爾鹏漆, 枚舉,平面幾何,立體幾何甫男,多維幾何且改,地球,PostGIS板驳,網(wǎng)絡(luò)又跛,比特流,全 文檢索若治,UUID慨蓝,XML,JSON端幼,數(shù)組礼烈,復(fù)合類型,域類型婆跑,范圍此熬,樹類型,化 學(xué)類型滑进,基因序列犀忱,F(xiàn)DW, 大對(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的加法是什么樣子就是什么樣子)揍庄。
(3)查詢的豐富
至于其他的咆蒿,舉個(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ā)。
符合國際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)称簿。