如何扛住1.8亿/秒的双11数据洪峰?阿里流计算技术全揭秘
阿里妹導(dǎo)讀:今年的雙11再次刷新了記錄——支付成功峰值達(dá)25.6萬(wàn)筆/秒、實(shí)時(shí)數(shù)據(jù)處理峰值4.72億條/秒。 面對(duì)較去年增幅100%的數(shù)據(jù)洪峰,流計(jì)算技術(shù)可謂功不可沒(méi)。今天,我們將揭開(kāi)阿里流計(jì)算技術(shù)的神秘面紗。
雙11剛剛拉下帷幕,激動(dòng)的心還停留在那一刻:
當(dāng)秒針剛跨過(guò)11號(hào)零點(diǎn)的一瞬間,來(lái)自線上線下的千萬(wàn)剁手黨在第一時(shí)間涌入了這場(chǎng)年度大趴——從進(jìn)入會(huì)場(chǎng)到點(diǎn)擊詳情頁(yè),再到下單付款一氣呵成。
前臺(tái)在大家狂歡的同時(shí),后臺(tái)數(shù)據(jù)流量也正以突破歷史新高的洪峰形式急劇涌入:
支付成功峰值達(dá) 25.6 萬(wàn)筆/秒
實(shí)時(shí)數(shù)據(jù)處理峰值 4.72億條/秒
而作為實(shí)時(shí)數(shù)據(jù)處理任務(wù)中最為重要的集團(tuán)數(shù)據(jù)公共層(保障著業(yè)務(wù)的實(shí)時(shí)數(shù)據(jù)、媒體大屏等核心任務(wù)),在當(dāng)天的總數(shù)據(jù)處理峰值更是創(chuàng)歷史新高達(dá)1.8億/秒! 想象下,1秒鐘時(shí)間內(nèi)千萬(wàn)人涌入雙11會(huì)場(chǎng)的同時(shí),依然應(yīng)對(duì)自如。
流計(jì)算的產(chǎn)生即來(lái)源于數(shù)據(jù)加工時(shí)效性的嚴(yán)苛需求:
由于數(shù)據(jù)的業(yè)務(wù)價(jià)值會(huì)隨著時(shí)間的流失而迅速降低,因此在數(shù)據(jù)發(fā)生后必須盡快對(duì)其進(jìn)行計(jì)算和處理,從而能夠通過(guò)數(shù)據(jù)第一時(shí)間掌握業(yè)務(wù)情況。今年雙11的流計(jì)算也面臨著一場(chǎng)實(shí)時(shí)數(shù)據(jù)洪峰的考驗(yàn)。
首先來(lái)展示今年(2017年)較去年(2016年)數(shù)據(jù)洪峰峰值的比較:
2016年:支付成功峰值12萬(wàn)筆/秒,總數(shù)據(jù)處理峰值9300萬(wàn)/秒
2017年:支付成功峰值25.6 萬(wàn)筆/秒,實(shí)時(shí)數(shù)據(jù)處理峰值 4.72億條/秒,阿里巴巴集團(tuán)數(shù)據(jù)公共層總數(shù)據(jù)處理峰值1.8億/秒
在今年雙11流量峰值翻翻的情況下,依然穩(wěn)固做到實(shí)時(shí)數(shù)據(jù)更新頻率:從第1秒千萬(wàn)剁手黨涌入到下單付款,到完成實(shí)時(shí)計(jì)算投放至媒體大屏全路徑,秒級(jí)響應(yīng)。面對(duì)越發(fā)抬升的流量面前,實(shí)時(shí)數(shù)據(jù)卻越來(lái)越快、越來(lái)越準(zhǔn)。在hold住數(shù)據(jù)洪峰的背后,是阿里巴巴流計(jì)算技術(shù)的全面升級(jí)。
流計(jì)算應(yīng)用場(chǎng)景
數(shù)據(jù)技術(shù)及產(chǎn)品部定位于阿里數(shù)據(jù)中臺(tái),除了離線數(shù)據(jù)外,其產(chǎn)出的實(shí)時(shí)數(shù)據(jù)也服務(wù)于集團(tuán)內(nèi)多個(gè)數(shù)據(jù)場(chǎng)景。包括今年(其實(shí)也是以往的任何一年)雙11媒體大屏實(shí)時(shí)數(shù)據(jù)、面向商家的生意參謀實(shí)時(shí)數(shù)據(jù),以及面向內(nèi)部高管與小二的各種直播廳產(chǎn)品,覆蓋整個(gè)阿里巴巴集團(tuán)大數(shù)據(jù)事業(yè)部。
同時(shí)隨著業(yè)務(wù)的不斷發(fā)展壯大,到目前為止,日常實(shí)時(shí)處理峰值超4000萬(wàn)/s,每天總處理記錄數(shù)已經(jīng)達(dá)到萬(wàn)億級(jí)別,總處理數(shù)據(jù)量也達(dá)到PB級(jí)別。
面對(duì)海量數(shù)據(jù)的實(shí)時(shí)數(shù)據(jù)我們成功做到了數(shù)據(jù)延遲控制在秒級(jí)范圍內(nèi),在計(jì)算準(zhǔn)確率上,已實(shí)現(xiàn)了高精準(zhǔn)、0誤差,達(dá)到精確處理。比如:今年的雙11當(dāng)天,雙十一媒體屏第一條記錄從交易表經(jīng)過(guò)流計(jì)算計(jì)算處理到達(dá)媒體大屏秒級(jí)響應(yīng)。
數(shù)據(jù)中臺(tái)流計(jì)算實(shí)踐中的數(shù)據(jù)鏈路
在經(jīng)過(guò)最近幾年大促數(shù)據(jù)洪峰的經(jīng)歷后,使得我們的流計(jì)算團(tuán)隊(duì)在引擎選擇,優(yōu)化性能以及開(kāi)發(fā)流計(jì)算平臺(tái)上都積累了豐富的經(jīng)驗(yàn)。我們也形成了穩(wěn)定高效的數(shù)據(jù)鏈路架構(gòu),下圖是整個(gè)數(shù)據(jù)鏈路示意圖:
業(yè)務(wù)數(shù)據(jù)的來(lái)源非常多,分別通過(guò)兩個(gè)工具(DRC與中間件的logagent)實(shí)時(shí)獲取增量數(shù)據(jù),并且同步到DataHub(一種PubSub的服務(wù))。
實(shí)時(shí)計(jì)算引擎Flink作業(yè)通過(guò)訂閱這些增量數(shù)據(jù)進(jìn)行實(shí)時(shí)處理,并且在經(jīng)過(guò)ETL處理后把明細(xì)層再次回流到Datahub,所有的業(yè)務(wù)方都會(huì)去定義實(shí)時(shí)的數(shù)據(jù)進(jìn)行多維度的聚合,匯總后的數(shù)據(jù)放在分布式數(shù)據(jù)庫(kù)或者關(guān)系型數(shù)據(jù)庫(kù)中(Hbase、Mysql),并通過(guò)公共的數(shù)據(jù)服務(wù)層產(chǎn)品(One Service)對(duì)外提供實(shí)時(shí)數(shù)據(jù)服務(wù)。
最近一年,我們?cè)谟?jì)算引擎和計(jì)算優(yōu)化方面做了很多工作,實(shí)現(xiàn)了計(jì)算能力、開(kāi)發(fā)效率的提升。
計(jì)算引擎升級(jí)及優(yōu)化
在2017年,我們?cè)趯?shí)時(shí)計(jì)算架構(gòu)上進(jìn)行了全面的升級(jí),從Storm遷移到Blink,并且在新技術(shù)架構(gòu)上進(jìn)行了非常多的優(yōu)化,實(shí)時(shí)峰值處理能力提高了2倍以上,平穩(wěn)的處理能力更是提高5倍以上:
優(yōu)化狀態(tài)管理
實(shí)時(shí)計(jì)算過(guò)程中會(huì)產(chǎn)生大量的state,以前是存儲(chǔ)在HBase,現(xiàn)在會(huì)存儲(chǔ)在RocksDB中,本地存儲(chǔ)減少了網(wǎng)絡(luò)開(kāi)銷(xiāo),能夠大幅提高性能,可以滿足細(xì)粒度的數(shù)據(jù)統(tǒng)計(jì)(現(xiàn)在key的個(gè)數(shù)可以提升到億級(jí)別了,是不是棒棒噠~)
優(yōu)化checkpoint(快照/檢查點(diǎn))和compaction(合并)
state會(huì)隨著時(shí)間的流轉(zhuǎn),會(huì)越來(lái)越大,如果每次都做全量checkpoint的話,對(duì)網(wǎng)絡(luò)和磁盤(pán)的壓力非常大;所以針對(duì)數(shù)據(jù)統(tǒng)計(jì)的場(chǎng)景,通過(guò)優(yōu)化rocksdb的配置,使用增量checkpoint等手段,可以大幅降低網(wǎng)絡(luò)傳輸和磁盤(pán)讀寫(xiě)。
異步Sink
把sink改成異步的形式,可以最大限度提高CPU利用率,可以大幅提供TPS。
抽象公共組件
除了引擎層面的優(yōu)化,數(shù)據(jù)中臺(tái)也針對(duì)性地基于Blink開(kāi)發(fā)了自己的聚合組件(目前所有實(shí)時(shí)公共層線上任務(wù)都是通過(guò)該組件實(shí)現(xiàn))。該組件提供了數(shù)據(jù)統(tǒng)計(jì)中常用的功能,把拓?fù)浣Y(jié)構(gòu)和業(yè)務(wù)邏輯抽象成了一個(gè)json文件。這樣只需要在json文件中通過(guò)參數(shù)來(lái)控制,實(shí)現(xiàn)開(kāi)發(fā)配置化,大幅降低了開(kāi)發(fā)門(mén)檻,縮短開(kāi)發(fā)周期——再來(lái)舉個(gè)栗子:之前我們來(lái)做開(kāi)發(fā)工作量為10人/日,現(xiàn)在因?yàn)榻M件化已讓工作量降低為0.5人/日,無(wú)論對(duì)需求方還是開(kāi)發(fā)方來(lái)講都是好消息,同時(shí)歸一的組件提升了作業(yè)性能。
按照上述思路及功能沉淀,最終打磨出了流計(jì)算開(kāi)發(fā)平臺(tái)【赤兔】。
該平臺(tái)通過(guò)簡(jiǎn)單的“托拉拽”形式生成實(shí)時(shí)任務(wù),不需要寫(xiě)一行代碼,提供了常規(guī)的數(shù)據(jù)統(tǒng)計(jì)組件,并集成元數(shù)據(jù)管理、報(bào)表系統(tǒng)打通等功能。作為支撐集團(tuán)實(shí)時(shí)計(jì)算業(yè)務(wù)的團(tuán)隊(duì),我們?cè)诮?jīng)過(guò)歷年雙11的真槍實(shí)彈后沉淀的[赤兔平臺(tái)]中獨(dú)有的功能也成為它獨(dú)一無(wú)二的亮點(diǎn):
一、大小維度合并
比如很多的實(shí)時(shí)統(tǒng)計(jì)作業(yè)同時(shí)需要做天粒度與小時(shí)粒度的計(jì)算,之前是通過(guò)兩個(gè)任務(wù)分開(kāi)計(jì)算的,聚合組件會(huì)把這些任務(wù)進(jìn)行合并,并且中間狀態(tài)進(jìn)行共用,減少網(wǎng)絡(luò)傳輸50%以上,同時(shí)也會(huì)精簡(jiǎn)計(jì)算邏輯,節(jié)省CPU。
二、精簡(jiǎn)存儲(chǔ)
對(duì)于存儲(chǔ)在RocksDB的Keyvalue,我們?cè)O(shè)計(jì)了一個(gè)利用索引的encoding機(jī)制,有效地將state存儲(chǔ)減少一半以上,這個(gè)優(yōu)化能有效降低網(wǎng)絡(luò)、cpu、磁盤(pán)的壓力。
三、高性能排序
排序是實(shí)時(shí)中非常常見(jiàn)的一個(gè)場(chǎng)景, top組件利用內(nèi)存中PriorityQueue(優(yōu)先隊(duì)列) 和blink中新的MapState feature(中間狀態(tài)管理特性),大幅減少序列化次數(shù),性能提高10倍左右。
四、批量傳輸和寫(xiě)操作
最終寫(xiě)結(jié)果表HBase和Datahub時(shí),如果每處理一條記錄都去寫(xiě)庫(kù)的話,就會(huì)很大限制我們的吞吐。我們組件通過(guò)時(shí)間觸發(fā)或者記錄數(shù)觸發(fā)的機(jī)制(timer功能),實(shí)現(xiàn)批量傳輸和批量寫(xiě)(mini-batch sink),并且可以根據(jù)業(yè)務(wù)延時(shí)要求進(jìn)行靈活配置,提高任務(wù)吞吐的同時(shí),也降低了服務(wù)端壓力。
數(shù)據(jù)保障
對(duì)于高優(yōu)先級(jí)應(yīng)用(每天24小時(shí)不間斷服務(wù)),需要做到跨機(jī)房容災(zāi),當(dāng)某條鏈路出現(xiàn)問(wèn)題時(shí),能夠秒級(jí)切換到其他鏈路,下圖是整個(gè)實(shí)時(shí)公共層的鏈路保障架構(gòu)圖:
從數(shù)據(jù)采集、數(shù)據(jù)同步、數(shù)據(jù)計(jì)算、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)服務(wù),整條鏈路都是獨(dú)立的。通過(guò)在Oneservice中的動(dòng)態(tài)配置,能夠?qū)崿F(xiàn)鏈路切換,保障數(shù)據(jù)服務(wù)不終端。
上面內(nèi)容就是保障今年雙11流量洪峰的流計(jì)算技術(shù)秘密武器——我們不僅在于創(chuàng)新更希望能沉淀下來(lái)復(fù)用、優(yōu)化技術(shù)到日常。
隨著流計(jì)算的技術(shù)外界也在不停更迭,后續(xù)基于阿里豐富業(yè)務(wù)場(chǎng)景下我們還會(huì)不斷優(yōu)化升級(jí)流計(jì)算技術(shù):
平臺(tái)化,服務(wù)化,Stream Processing as a service
語(yǔ)義層的統(tǒng)一,Apache Beam,Flink 的Table API,以及最終Stream SQL都是非常熱的project
實(shí)時(shí)智能,時(shí)下很火的深度學(xué)習(xí)或許未來(lái)會(huì)與流計(jì)算碰撞產(chǎn)生火花
實(shí)時(shí)離線的統(tǒng)一,這個(gè)也是很大的趨勢(shì),相較于現(xiàn)在普遍存在的實(shí)時(shí)一套,離線一套的做法,實(shí)時(shí)離線的統(tǒng)一也是各大引擎努力想要達(dá)到的。
最后,歡迎大家在留言區(qū),與我們交流討論,一起學(xué)習(xí)進(jìn)步。
總結(jié)
以上是生活随笔為你收集整理的如何扛住1.8亿/秒的双11数据洪峰?阿里流计算技术全揭秘的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 直击阿里双11神秘技术:PB级大规模文件
- 下一篇: 如何打造千万级Feed流系统?阿里数据库