課程背景
實(shí)時(shí)計(jì)算需要解決一些什么問(wèn)題
伴隨著信息科技日新月異的發(fā)展,信息呈現(xiàn)出爆發(fā)式的膨脹,人們獲取信息的途徑也更加多樣、更加便捷,同時(shí)對(duì)于信息的時(shí)效性要求也越來(lái)越高。舉個(gè)搜索 場(chǎng)景中的例子,當(dāng)一個(gè)賣家發(fā)布了一條寶貝信息時(shí),他希望的當(dāng)然是這個(gè)寶貝馬上就可以被賣家搜索出來(lái)、點(diǎn)擊、購(gòu)買啦,相反,如果這個(gè)寶貝要等到第二天或者更 久才可以被搜出來(lái),估計(jì)這個(gè)大哥就要罵娘了。再舉一個(gè)推薦的例子,如果用戶昨天在淘寶上買了一雙襪子,今天想買一副泳鏡去游泳,但是卻發(fā)現(xiàn)系統(tǒng)在不遺余力 地給他推薦襪子、鞋子,根本對(duì)他今天尋找泳鏡的行為視而不見,估計(jì)這哥們心里就會(huì)想推薦你妹呀。其實(shí)稍微了解點(diǎn)背景知識(shí)的碼農(nóng)們都知道,這是因?yàn)楹笈_(tái)系統(tǒng) 做的是每天一次的全量處理,而且大多是在夜深人靜之時(shí)做的,那么你今天白天做的事情當(dāng)然要明天才能反映出來(lái)啦。
實(shí)現(xiàn)一個(gè)實(shí)時(shí)計(jì)算系統(tǒng)
全量數(shù)據(jù)處理使用的大多是鼎鼎大名的hadoop或者h(yuǎn)ive,作為一個(gè)批處理系統(tǒng),hadoop以其吞吐量大、自動(dòng)容錯(cuò)等優(yōu)點(diǎn),在海量數(shù)據(jù)處理上 得到了廣泛的使用。但是,hadoop不擅長(zhǎng)實(shí)時(shí)計(jì)算,因?yàn)樗烊痪褪菫榕幚矶模@也是業(yè)界一致的共識(shí)。否則最近這兩年也不會(huì)有 s4,storm,puma這些實(shí)時(shí)計(jì)算系統(tǒng)如雨后春筍般冒出來(lái)啦。先拋開s4,storm,puma這些系統(tǒng)不談,我們首先來(lái)看一下,如果讓我們自己設(shè) 計(jì)一個(gè)實(shí)時(shí)計(jì)算系統(tǒng),我們要解決哪些問(wèn)題。
實(shí)現(xiàn)一個(gè)實(shí)時(shí)計(jì)算系統(tǒng)
低延遲。都說(shuō)了是實(shí)時(shí)計(jì)算系統(tǒng)了,延遲是一定要低的。
高性能。性能不高就是浪費(fèi)機(jī)器,浪費(fèi)機(jī)器是要受批評(píng)的哦。
分布式。系統(tǒng)都是為應(yīng)用場(chǎng)景而生的,如果你的應(yīng)用場(chǎng)景、你的數(shù)據(jù)和計(jì)算單機(jī)就能搞定,那么不用考慮這些復(fù)雜的問(wèn)題了。我們所說(shuō)的是單機(jī)搞不定的情況。
可擴(kuò)展。伴隨著業(yè)務(wù)的發(fā)展,我們的數(shù)據(jù)量、計(jì)算量可能會(huì)越來(lái)越大,所以希望這個(gè)系統(tǒng)是可擴(kuò)展的。
容錯(cuò)。這是分布式系統(tǒng)中通用問(wèn)題。一個(gè)節(jié)點(diǎn)掛了不能影響我的應(yīng)用。
實(shí)現(xiàn)一個(gè)實(shí)時(shí)計(jì)算系統(tǒng)
好,如果僅僅需要解決這5個(gè)問(wèn)題,可能會(huì)有無(wú)數(shù)種方案,而且各有千秋,隨便舉一種方案,使用消息隊(duì)列+分布在各個(gè)機(jī)器上的工作進(jìn)程就ok啦。我們?cè)倮^續(xù)往下看。
容易在上面開發(fā)應(yīng)用程序。親,你設(shè)計(jì)的系統(tǒng)需要應(yīng)用程序開發(fā)人員考慮各個(gè)處理組件的分布、消息的傳遞嗎?如果是,那有點(diǎn)麻煩啊,開發(fā)人員可能會(huì)用不好,也不會(huì)想去用。
消息不丟失。用戶發(fā)布的一個(gè)寶貝消息不能在實(shí)時(shí)處理的時(shí)候給丟了,對(duì)吧?更嚴(yán)格一點(diǎn),如果是一個(gè)精確數(shù)據(jù)統(tǒng)計(jì)的應(yīng)用,那么它處理的消息要不多不少才行。這個(gè)要求有點(diǎn)高哦。
消息嚴(yán)格有序。有些消息之間是有強(qiáng)相關(guān)性的,比如同一個(gè)寶貝的更新和刪除操作消息,如果處理時(shí)搞亂順序完全是不一樣的效果了。