1. 程式人生 > >如何打造千萬級Feed流系統?阿里資料庫技術解讀

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

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

640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

通過RDS PostgreSQL和HybridDB for PGSQL實時分析方案:

  • 承受住了每秒幾十萬筆的寫入吞吐並做資料清洗,是交易的數倍

  • 實現分鐘級延遲的實時分析,5張十億級表關聯秒級響應

  • 實時發現交易異常,提升淘寶的使用者體驗

業務背景

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

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

為了便於分析,通常有必要將訂單在整個過程中產生的若干記錄(若干屬性),合併成一條記錄(訂單大寬表)。資料運營平臺的主動服務,根據這些合併後的資料,實時的進行分析,進行實時的輿情展示,實時的找出需要主動服務的物件等,實現一個智慧化的服務運營平臺。

難點

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

方案

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

640?wx_fmt=jpeg

其中:

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

0?wx_fmt=jpeg

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

0?wx_fmt=jpeg

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

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

0?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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本身的彈性,也允許客戶放多少的資料都可以。

因此,帶來了如下幾點優勢:

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

  2. 資源動態排程,降低成本

  3. 冷熱資料界限模糊,直接互相訪問

  4. TP、AP一體化

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

阿里云云資料庫PostgreSQL

阿里云云資料庫 PostgreSQL,基於號稱“Most Advanced”的開源關係型資料庫。在StackOverflow 2017開發者調查中,PostgreSQL可以說是“年度統計中開發者最愛和最想要的關係型資料庫”。

0?wx_fmt=png

0?wx_fmt=png

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也企業大資料實時分析運算和儲存的核心引擎。實現企業在雲端從線上業務、到資料實時分析的業務資料閉環。

640?

你可能還喜歡

點選下方圖片即可閱讀

0?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=jpeg

640?wx_fmt=png

關注「阿里技術」

把握前沿技術脈搏

相關推薦

如何打造千萬Feed系統阿里資料庫技術解讀

2017年的雙十一又一次重新整理了記錄,交易建立峰值32.5萬筆/秒、支付峰值25.6萬筆/秒。而這樣的交易和支付等記錄,都會形成實時訂單Feed資料流,匯入資料運營平臺的主動服務系統中去。資料運營

同盾技術總監張新波:從零打造千萬實時風控雲服務的秘籍

開源 存在 VM gin 評估 方便 寫到 ont keep 轉載:https://www.csdn.net/article/2015-01-29/2823760 摘要:同盾科技聯合創始人&技術總監張新洪在一個技術沙龍中闡述了同盾是如何從零開始打造千萬級實時風控雲服

Feed系統設計-總綱

簡介 差不多十年前,隨著功能機的淘汰和智慧機的普及,網際網路開始進入移動網際網路時代,最具代表性的產品就是微博、微信,以及後來

2135億!2018 雙11阿里資料庫技術戰報新鮮出爐

00:02:05 成交額超100億00:57:56 成交額超666億01:47:26 成交額超1000億15:49:39 成交額超1682億22:28:37 成交額超2000億 2018新紀錄2135億 在年度大考面前阿里資料庫技術的小哥哥和小姐姐們又一次為大眾遞交了誠意滿滿的答卷 讓我

阿里技術分享:深度揭祕阿里資料庫技術方案的10年變遷史

本文原題“阿里資料庫十年變遷,那些你不知道的二三事”,來自阿里巴巴官方技術公號的分享。 1、引言 第十個雙11即將來臨之際,阿里技術推出《十年牧碼記》系列,邀請參與歷年雙11備戰的核心技術大牛,一起回顧阿里技術的變遷。 今天,阿里資料庫事業部研究員張瑞,將為你講述雙11資料庫技術不

阿里雙11如何承載大型系統千萬訪問

一、問題起源 Spring Cloud微服務架構體系中,Eureka是一個至關重要的元件,它扮演著微服務註冊中心的角色,所有的服務註冊與服務發現,都是依賴Eureka的。 不少初學Spring Cloud的朋友在落地公司生產環境部署時,經常會問: Eureka Server到底要部署幾臺機器?

阿里雙11狂歡如何承載大型系統千萬訪問?

一、問題起源 Spring Cloud微服務架構體系中,Eureka是一個至關重要的元件,它扮演著微服務註冊中心的角色,所有的服務註冊與服務發現,都是依賴Eureka的。 不少初學Spring Cloud的朋友在落地公司生產環境部署時,經常會問: Eureka Server

ElasticSearch + Canal 開發千萬的實時搜尋系統【轉】

公司是做社交相關產品的,社交類產品對搜尋功能需求要求就比較高,需要根據使用者城市、使用者ID暱稱等進行搜尋。 專案原先的搜尋介面採用SQL查詢的方式實現,資料庫表採用了按城市分表的方式。但隨著業務的發展,搜尋介面呼叫頻次越來越高,搜尋介面壓力越來越大,搜尋資料庫經常崩潰,從而導致搜尋功能經常不能

【雙11狂歡的背後】微服務註冊中心如何承載大型系統千萬訪問?

歡迎關注微信公眾號:石杉的架構筆記(id:shishan100) 週一至週五早8點!精品技術文章準時送上!! 往期文章 1. 《拜託!面試請不要再問我Spring Cloud底層原理》

阿里千萬高效能、高併發架構的經驗之談

架構以及我理解中架構的本質 在開始談我對架構本質的理解之前,先談談對今天技術沙龍主題的個人見解,千萬級規模的網站感覺數量級是非常大的,對這個數量級我們戰略上 要重 視 它 , 戰術上又 要 藐 視 它。先舉個例子感受一下千萬級到底是什麼數量級?現在很流行的優步(Uber),從媒體公佈的資訊看,它

【雙11狂歡背後】微服務註冊中心如何承載大型系統千萬訪問?

一、問題起源 Spring Cloud架構體系中,Eureka是一個至關重要的元件,它扮演著微服務註冊中心的角色,所有的服務註冊與服務發現,都是依賴Eureka的。 不少初學Spring Cloud的朋友在落地公司生產環境部署時,經常會問:  ●  Eureka Serve

Spring Cloud---【雙11狂歡背後】微服務註冊中心如何承載大型系統千萬訪問?

本文來源:石杉的架構筆記(ID:shishan100) 一、問題起源     Spring Cloud架構體系中,Eureka是一個至關重要的元件,它扮演著微服務註冊中心的角色,所有的服務註冊與服務發現,都是依賴Eureka的。 不少初

微服務註冊中心如何承載大型系統千萬訪問?

本文為轉載文章,作者:中華石杉,十餘年BAT架構經驗,傾囊相授。作者微信公眾號:石杉的架構筆記(ID:shishan100)   目錄: 一、問題起源 二、Eureka Server設計精妙的登錄檔儲存結構 三、Eureka Serve

【雙11狂歡的背後】微服務註冊中心如何承載大型系統千萬訪問? Eureka 註冊中心

【雙11狂歡的背後】微服務註冊中心如何承載大型系統的千萬級訪問? 目錄: 一、問題起源 二、Eureka Server設計精妙的登錄檔儲存結構 三、Eureka Server端優秀的多級快取機制 四、總結     一、問題起源

【雙11狂歡的背後】微服務註冊中心如何承載大型系統千萬訪問???

>轉載請標明出處:  >https://www.fangzhipeng.com > 本文出自[方誌朋的部落格](http://blog.csdn.net/forezp) >  > 本文為

雙11狂歡的背後】微服務註冊中心如何承載大型系統千萬訪問?

目錄 1、寫在前面 2、場景引入,問題初現 3、揚湯止沸,飲鴆止渴 4、問題爆發,洪水猛獸 5、追本溯源,治標治本  6、總結全文,回眸再看 一、寫在前面 相信不少朋友都在自己公司使用Spring Cloud框架來構建微服務架構,畢竟現在這

如何打造一個日均PV千萬級別的大型系統

作者介紹 周金橋,具有豐富的系統規劃、設計、開發、運維及團隊組織管理工作經驗,熟悉.Net、J2EE技術架構及應用。微軟2008-2012五屆最有價值專家(MVP),2009年單獨著有《ASP.NET夜話》一書,2010年與人合著《程式設計師的成長之路》。至今活躍在多個技術社群。 本文我選定的方向是

從0開始打造一個最小系統資料庫

本篇趟個雷,把資料庫納入到輪子中,在我看來,資料庫比輪子複雜多了,是一個和作業系統差不多複雜度的東西,所以才能通過一個Oracle養活一家全球50強的公司。本文為後端輪子系列的第一篇,我們先來談談如何造個資料庫吧。 先來聊聊關係型資料庫 關係型資料庫(Relational Datab

千萬MySQL資料庫建立索引的事項及提高效能的手段

1.對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如:select id from t where nu

在一個千萬資料庫查尋中,如何提高查詢效率?

一、資料庫設計方面 1、對查詢進行優化,應儘量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引; 2、應儘量避免在 where 子句中對欄位進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃描,如: select