楊曉青:大家好,我是攜程的數(shù)據(jù)架構(gòu)專(zhuān)家我叫楊曉青。剛開(kāi)始我先自我介紹一下,09-12年的時(shí)候,我是在騰訊,參與數(shù)據(jù)平臺(tái)TDW的平臺(tái)從無(wú)到有的建設(shè),2014年是在阿里巴巴CDO數(shù)去平臺(tái)部,負(fù)責(zé)從無(wú)論道路有竇建GOlaxy流計(jì)算平臺(tái)。去年開(kāi)始我加入到了攜程,負(fù)責(zé)攜程的基礎(chǔ)架構(gòu)的工作。
以前我在騰訊和阿里做的時(shí)候,從開(kāi)始做的時(shí)候,也沒(méi)有太多的歷史的包袱,到了攜程以后,我遇到了很多新的問(wèn)題,比如是在去年的時(shí)候,攜程的一個(gè)數(shù)據(jù)處理架構(gòu),是有一個(gè)架構(gòu)的,從0開(kāi)始做的話(huà),可能難度還會(huì)小一點(diǎn)。以前是一個(gè)混合的數(shù)據(jù)處理體系。在大數(shù)據(jù)的架構(gòu)下,快速躍升的時(shí)候,我們要換名字,這是對(duì)我們的挑戰(zhàn)。以前在這個(gè)架構(gòu)下培養(yǎng)的工程師,我們要進(jìn)行一個(gè)基礎(chǔ)架構(gòu),工程師要進(jìn)行一個(gè)變更,大家要去學(xué)習(xí)新的東西,可能大家已經(jīng)熟悉了一套老的東西,有200多個(gè)工程師做的是和數(shù)據(jù)相關(guān)的東西,這個(gè)是非常有挑戰(zhàn)的事情。
還有在以前的系統(tǒng)下,大家平時(shí)做的時(shí)候,經(jīng)常會(huì)出錯(cuò),大家會(huì)去管理這些系統(tǒng),然后查詢(xún)數(shù)據(jù)的質(zhì)量是不是OK,哪里錯(cuò)了,定位在哪里,這個(gè)是非常的麻煩的。還有我發(fā)現(xiàn)歷史的數(shù)據(jù)有了問(wèn)題,我怎么樣去糾正對(duì)了,還有一些在計(jì)算方法上的問(wèn)題,很多的計(jì)算平臺(tái)發(fā)現(xiàn)越跑越慢,這是我們當(dāng)時(shí)遇到的挑戰(zhàn),在這個(gè)挑戰(zhàn)之下,我們開(kāi)始考慮,怎么樣在不影響前提的情況下,還可以把這個(gè)名字換掉。
我們剛開(kāi)始的進(jìn)行一個(gè)數(shù)據(jù)架構(gòu),主要是進(jìn)行了三個(gè)產(chǎn)品,一個(gè)是數(shù)據(jù)采集和平臺(tái),這是一個(gè)基于數(shù)據(jù)調(diào)度的一站式的處理平臺(tái),下面是一個(gè)數(shù)據(jù)分析的平臺(tái)。這個(gè)架構(gòu)實(shí)際上沒(méi)有太大的新意,前面也有很多的人來(lái)說(shuō),大家基本都是這么干的,沒(méi)有什么特別的。
現(xiàn)在我們大概是分了一個(gè)基礎(chǔ)的。比如是做Hadoop,還有一個(gè)團(tuán)隊(duì)是做的實(shí)時(shí)計(jì)算的東西,主要是Spark的一些事情,另外一個(gè)我們要基于分布式計(jì)算集群,變程一套解決方案,讓工程師快速的解決這個(gè)事,減少大家的工作量。整個(gè)數(shù)據(jù)處理的流程就是這么一張圖,在所有的網(wǎng)站系統(tǒng),或者是電子商務(wù)系統(tǒng),大家的數(shù)據(jù)基本是可以分成三類(lèi),第一個(gè)是交易相關(guān)的數(shù)據(jù),這些數(shù)據(jù)基本是落數(shù)據(jù)庫(kù)里面的,還有一個(gè)是用戶(hù)的行為數(shù)據(jù),這些數(shù)據(jù)的題量都比較大,還有一些是會(huì)在系統(tǒng)里面發(fā)一些消息,比如是系統(tǒng)檢測(cè)的難點(diǎn),會(huì)通過(guò)系統(tǒng)發(fā)出來(lái)。
然后我們?cè)诮鉀Q方案里面,業(yè)務(wù)日志和系統(tǒng)消息是走的消息隊(duì)列,對(duì)于交易類(lèi)的系統(tǒng),可能和大多數(shù)的公司是不大類(lèi)似的,Muise流處理,對(duì)我們現(xiàn)在的要實(shí)時(shí)的采集它,給我們帶來(lái)了很大的挑戰(zhàn),完成關(guān)于交易數(shù)據(jù)增量采集的一個(gè)方法。
整個(gè)的計(jì)算的引擎,離線的部分基本就是機(jī)遇Spark的體系去做的,還有做產(chǎn)品驗(yàn)證的系統(tǒng),還有數(shù)字的API,供推薦交易用,還有一些其他的很多的小系統(tǒng)。前面也提出到了數(shù)據(jù)同步,因?yàn)镾erver給我們帶來(lái)了很多麻煩的事,這個(gè)是我們基于二次開(kāi)發(fā)進(jìn)行的一個(gè)包裝,我們現(xiàn)在的MySQL和hive等攜程主流數(shù)據(jù)庫(kù)間任意同步,解決多種同步工具混用,效率難以保證,維護(hù)負(fù)責(zé)問(wèn)題。在這個(gè)產(chǎn)品之上,我們數(shù)據(jù)采集的模式,之支持全量和增量數(shù)據(jù)同步模,通過(guò)可線性擴(kuò)展,這是我們產(chǎn)品的一個(gè)頁(yè)面,你的任何的數(shù)據(jù)要采集,打開(kāi)我們的頁(yè)面,在上面進(jìn)行一些配置,那過(guò)一會(huì),你的數(shù)據(jù)就會(huì)有了,后面就會(huì)啟動(dòng)同步配置,而且和我們的調(diào)度平臺(tái)是可以無(wú)縫的結(jié)合的。我們來(lái)看一下關(guān)于增量計(jì)算和增量采集的問(wèn)題。
日志數(shù)據(jù)有一個(gè)特點(diǎn),永遠(yuǎn)不會(huì)改變,只要它產(chǎn)生了,沒(méi)有人會(huì)去改它,但是數(shù)據(jù)庫(kù)不大一樣,數(shù)據(jù)庫(kù)一直是有改動(dòng)的。我們自己做的一些協(xié)議,比如是線上的線上的數(shù)據(jù)可以通過(guò)日志的方式同步到另外的數(shù)據(jù)庫(kù)里面去,可以啟動(dòng)增量的模式,數(shù)據(jù)里面會(huì)加一些標(biāo)簽,可以每次采集一部分的數(shù)據(jù),增量預(yù)算比如是今天結(jié)束以后,會(huì)啟動(dòng)一個(gè)末點(diǎn)運(yùn)算,為什么要做增量的計(jì)算,第一個(gè)解決時(shí)時(shí)性的問(wèn)題,以前是一天會(huì)做一次,比如是我要看到今天的銷(xiāo)售怎么樣,特別是做活動(dòng)的時(shí)候,大家非常的關(guān)注今天的狀態(tài)是怎么樣,可以提高數(shù)據(jù)的實(shí)時(shí)性。
如果是大家每天都是第二天早上運(yùn)算,那大家會(huì)遇到過(guò)同樣的問(wèn)題每天凌晨計(jì)算量非常的高,通過(guò)增量計(jì)算可以把這個(gè)階段拉平了,還有一個(gè)好處,很多的數(shù)據(jù)會(huì)涉及到跨機(jī)房采集,對(duì)網(wǎng)絡(luò)會(huì)造成比較大的沖擊。 我們到八月的數(shù)據(jù),每天會(huì)同步八千多張紙的表,要同步5T左右的數(shù)據(jù)量,同步的行數(shù)是在20億條。
數(shù)據(jù)調(diào)度平臺(tái)這是我今天要重點(diǎn)說(shuō)的平臺(tái),這個(gè)調(diào)度平臺(tái),我們把它做成了一個(gè)產(chǎn)品化的東西,定位成數(shù)據(jù)開(kāi)發(fā)一站式服務(wù)的結(jié)合的地方,數(shù)據(jù)的采集,計(jì)算,管理,運(yùn)維,都在這個(gè)平臺(tái)上可以完成。
這個(gè)系統(tǒng)是整個(gè)數(shù)據(jù)處理系統(tǒng),大家也都了解,現(xiàn)在的數(shù)據(jù)處理太多了,而且任何一個(gè)公司,都不可能用單獨(dú)的一個(gè)解決的方案,或者是某一種系統(tǒng)完成所有的問(wèn)題,肯定是一個(gè)多平臺(tái)的,多系統(tǒng)的一個(gè)組合達(dá)到不同的特性。這個(gè)調(diào)度系統(tǒng),每天基本上是驅(qū)動(dòng)了這些,把數(shù)據(jù)同步到計(jì)算的平臺(tái),還可以采集負(fù)載,采集日志是否到位這些信息,然后進(jìn)行計(jì)算,還會(huì)帶來(lái)一個(gè)好處,我可以看到整個(gè)系統(tǒng)的運(yùn)行趨勢(shì)是不是正常。比如是可以看到運(yùn)行的任務(wù)是怎么樣,可以自動(dòng)的暴行,運(yùn)行的速度是不是越來(lái)越慢。
比如是通過(guò)了整個(gè)任務(wù)的分布,我們可以給出任務(wù)一些建議,它在運(yùn)行的時(shí)間應(yīng)該進(jìn)行一些調(diào)整,或者是攜程有多個(gè)業(yè)務(wù)線,你可以發(fā)現(xiàn)這個(gè)業(yè)務(wù)線和那個(gè)業(yè)務(wù)線,你們的計(jì)算邏輯是一致的,是可以進(jìn)行合并的,計(jì)算一份就可以了。
在沒(méi)有這個(gè)技術(shù)之前,我們整個(gè)數(shù)據(jù)系統(tǒng)有很大的運(yùn)維的成本,我要開(kāi)發(fā)上線一個(gè)新的ETR的流程,我要在測(cè)試的環(huán)節(jié)調(diào)試是不是OK的,然后要去上線,走一條完整的上線的流程,然后觀察是不是OK的,整個(gè)的流程,除了你自己寫(xiě)你的業(yè)務(wù)邏輯的時(shí)間,你完成這么一套流程上的時(shí)間,可能是幾個(gè)小時(shí)也會(huì)有的。
還有一個(gè)是運(yùn)維,我們現(xiàn)在有二萬(wàn)多的ETR的流程,最典型的例子,如果是你的一個(gè)數(shù)據(jù)質(zhì)量有問(wèn)題,特別是一張底層表出了問(wèn)題,發(fā)現(xiàn)數(shù)據(jù)在報(bào)表的時(shí)候是錯(cuò)的,然后把錯(cuò)的地方恢復(fù)以后,依賴(lài)這個(gè)標(biāo)的任務(wù)有幾十甚至是一百,挨個(gè)的恢復(fù)它,可能一天也做不完。這是之前的一個(gè)狀況。
我們基本是把開(kāi)發(fā)上線的時(shí)間降到了十幾分鐘,運(yùn)維都是一鍵的,甚至是系統(tǒng)可以有一些自己的規(guī)則,判定你的流程是不是屬于一個(gè)正常的狀態(tài),如果是發(fā)現(xiàn)了錯(cuò)誤,系統(tǒng)可以自動(dòng)的幫你重置,或者是某一個(gè)系統(tǒng)有問(wèn)題,檢測(cè)到這個(gè)系統(tǒng)恢復(fù)了以后,可以自動(dòng)的啟動(dòng)。
這個(gè)系統(tǒng)大概是有四個(gè)模塊,一個(gè)是開(kāi)發(fā)IDE,有一個(gè)圖形化的界面,專(zhuān)門(mén)可以去開(kāi)發(fā),調(diào)試,甚至是把廠家的數(shù)據(jù)都可以去進(jìn)行查詢(xún),比如是我突然忘記了這個(gè)表的字段是怎么樣的,我可以同時(shí)察看關(guān)于任何表的元素的信息,包括這個(gè)表里面有一些什么數(shù)據(jù),可以了解一下數(shù)據(jù)的內(nèi)容。另外一個(gè)是工作,主要是管理任務(wù)的啟動(dòng)和停止。比如說(shuō)我們配置的任務(wù)要早上三點(diǎn)行動(dòng),定時(shí)的啟動(dòng),還有數(shù)據(jù)采集完成,會(huì)發(fā)生一連串的計(jì)算,整個(gè)是一個(gè)完整的數(shù)據(jù)流程,要去依賴(lài)。
還有是事件的出發(fā),比如是人工的觸發(fā)一個(gè)實(shí)踐,還有人工的觸發(fā),有一個(gè)開(kāi)放的接口,另外可以調(diào)調(diào)度系統(tǒng)的借口。另外一個(gè)是運(yùn)維管理,發(fā)現(xiàn)了錯(cuò)誤以后,可以以來(lái)了城堡,看一下任務(wù)的日志,如果是這個(gè)任務(wù)非常的失敗以后,晚上可以自動(dòng)的給我打電話(huà),告訴我出了什么問(wèn)題了。
還有每天的業(yè)務(wù)報(bào)告,比如是很多的人會(huì)關(guān)心,我想看一下整體狀況的優(yōu)勢(shì)是怎么樣的,錯(cuò)誤的失敗率有多高,都可以看到,另外一個(gè)是智能的管理,現(xiàn)在攜程有300多臺(tái)電腦,有很多的開(kāi)發(fā)的單子,這時(shí)候的資源肯定是不夠的,這時(shí)候該要根據(jù)優(yōu)先級(jí)來(lái)判斷,哪一些任務(wù)先跑,哪一些任務(wù)后跑。如果我們發(fā)現(xiàn)集群比較慢的時(shí)候,我們就會(huì)禁止提交集群。
另外一個(gè)是分組,在不同的環(huán)境下,可以根據(jù)不同的特性根據(jù)分組。這個(gè)是任務(wù)的觸發(fā)方式。這個(gè)是整個(gè)系統(tǒng)怎么樣運(yùn)作的,比如是數(shù)據(jù)平臺(tái),會(huì)出發(fā)很多的工具,驅(qū)動(dòng)整個(gè)的數(shù)據(jù)流程!是從生產(chǎn)慢慢的流動(dòng)到通訊系統(tǒng),最終是流動(dòng)到報(bào)告和推薦系統(tǒng)里面去。這是我們和普通的系統(tǒng)不大一樣的地方,我們做了一個(gè)資源分組的功能,這個(gè)系統(tǒng),大概是去年的10月份上線的,因?yàn)槲覀冇泻芏嗟臉I(yè)務(wù)要去做,這個(gè)周期的迭代系統(tǒng)大概是二周就要上線,我們上線的時(shí)候,因?yàn)樯厦嬗泻芏嗟娜蝿?wù)了,比如是上線以后有問(wèn)題的話(huà),我們會(huì)有很大的壓力,通過(guò)分組,我們可以先放到測(cè)試組里面,如果是OK的話(huà),客觀恢復(fù)上線,還有一些任務(wù)的話(huà),可能需要一些相關(guān)的環(huán)境,我們可以切換為獨(dú)立的集群,在R集群強(qiáng)化管理。
這個(gè)就是剛才說(shuō)到的優(yōu)先級(jí),沒(méi)有優(yōu)先級(jí)的話(huà),比如是大家都有錢(qián)打水,那都接受不了,都會(huì)非常的憤怒。一些不重要的信息,大家也不是這么的在意了,還OK的。
現(xiàn)在我們每天集群的規(guī)模有33萬(wàn)的樣子,這是我們做的功能的演示,可以看出計(jì)算的結(jié)果,這里應(yīng)該是我的左邊,這里有一個(gè)原數(shù)字的管理系統(tǒng),你輸入任何的標(biāo),會(huì)彈出含義,包括預(yù)覽的數(shù)據(jù)是什么。右邊這里是整個(gè)的任務(wù)數(shù),大家可以看到很多的業(yè)務(wù)是發(fā)郵件的。我可以看多自己的業(yè)務(wù)類(lèi)型,但是如果是你不想讓別人看到的話(huà),可以是加秘的。也有一些自動(dòng)存款的策略給大家配置。這個(gè)是每天寫(xiě)的日志,大家都可以在頁(yè)面上進(jìn)行探討。
這個(gè)是大家只能看到自己的任務(wù),這是每天的一些趨勢(shì),比如是多少的成功,多少的失敗。這是我們的管理系統(tǒng),每一個(gè)機(jī)器上有一些什么內(nèi)務(wù)都可以砍掉。整個(gè)集群的負(fù)債都比較高的時(shí)候,我們會(huì)負(fù)責(zé)到等一下,免得把機(jī)器拖死了,這是整個(gè)Maart的志,現(xiàn)在我們的數(shù)據(jù)進(jìn)行管理預(yù)算,最通用的是有一些是簡(jiǎn)單的出一張報(bào)表,簡(jiǎn)單的看一下運(yùn)營(yíng)數(shù)據(jù)就可以了,如果是用的詳細(xì)時(shí)候,比如是我想象一下業(yè)務(wù)線是多少比如是左邊的交易額是多少,右邊這里定單是自動(dòng)化的,甚至是很明細(xì)的一個(gè)指標(biāo)。
在相當(dāng)于展示和報(bào)表的平臺(tái)之上,我們主要是有二個(gè)產(chǎn)品,一個(gè)是展品寶寶,一個(gè)是多個(gè)分娩引擎。簡(jiǎn)單報(bào)表引擎,因?yàn)樗浅5暮?jiǎn)單,而且非常的好用,支持多種數(shù)據(jù)庫(kù),支持發(fā)送郵件,支持附加Fdfipang,你只要任何的一搜索,就可以出來(lái)各種的線索和餅圖,你可以讓你看到的東西,可調(diào)這么一些圖形。而且是可以定時(shí)的,比是是每天早上通過(guò)這個(gè)系統(tǒng)。以確認(rèn)整個(gè)系統(tǒng)的人員是不是成功的。
這個(gè)產(chǎn)品是我們批評(píng)成功的產(chǎn)品,有700多個(gè)UV操作參加,這是我們的一個(gè)操作臺(tái),你只要是把人添到這個(gè)框里面去,根據(jù)時(shí)間會(huì)有一個(gè)特殊的標(biāo)簽,你達(dá)到了這個(gè)標(biāo)簽,時(shí)間就會(huì)多,你只要點(diǎn)了,就會(huì)出來(lái)這么多,你沒(méi)有什么不需要看到的,只要是數(shù)據(jù)分析人,把你的數(shù)據(jù)輸進(jìn)去,就可以出來(lái)更多的了。
這個(gè)是相對(duì)來(lái)說(shuō)專(zhuān)業(yè)的要求稍微的高一點(diǎn),這是一個(gè)多維分析引擎,我們對(duì)它進(jìn)行二次開(kāi)發(fā)。這個(gè)產(chǎn)品主要是大數(shù)據(jù)量的分析,另外一個(gè)小數(shù)據(jù)量的刻劃,可以通過(guò)搜搜網(wǎng),你在做報(bào)表和模型的時(shí)候,不需要關(guān)心是在什么網(wǎng)站上,后面會(huì)自動(dòng)的發(fā)到你的電腦里做支持。這個(gè)是分的更細(xì)的,這個(gè)是支持多種圖影,比如是各種組合,這個(gè)是我們分析的火車(chē)票定單的狀況。
我要說(shuō)的就這么多,我們整體做的時(shí)候,我們分了三個(gè)層次,數(shù)據(jù)采集一個(gè)系統(tǒng),整個(gè)一站式的數(shù)據(jù)管理系統(tǒng),同時(shí)一個(gè)數(shù)據(jù)的展出,如果你是一個(gè)數(shù)據(jù)分析師,你進(jìn)來(lái)了以后,都是在頁(yè)面上,你只要經(jīng)過(guò)了一些技能,其他的東西都是數(shù)據(jù)點(diǎn)擊就可以了,就說(shuō)這么多,謝謝大家。