S4:分布式流计算平台
前段時(shí)間考慮監(jiān)控統(tǒng)計(jì)面臨的兩個(gè)問題,一是Key太多的問題。客戶端輸出日志的埋點(diǎn)程序可以通過LRUMap緩解,但是服務(wù)端就比較麻煩。對(duì)于某些以MapReduce模式實(shí)現(xiàn)的日志分析框架,當(dāng)一個(gè)應(yīng)用的key太多的時(shí)候,每個(gè)分析節(jié)點(diǎn)的內(nèi)存中維護(hù)的Map都會(huì)變的非常巨大,并且當(dāng)一個(gè)應(yīng)用的日志量太大的時(shí)候,會(huì)造成每個(gè)分析節(jié)點(diǎn)都在分析同一個(gè)應(yīng)用的日志,而阻塞其他的應(yīng)用。另一個(gè)問題是流控閥值的調(diào)節(jié)。當(dāng)新加入一個(gè)流控的時(shí)候,沒人知道閥值應(yīng)該設(shè)成多少比較合適,只能根據(jù)監(jiān)控?cái)?shù)據(jù)逐步調(diào)整。調(diào)整一次的周期比較漫長(zhǎng);即使閥值可以動(dòng)態(tài)調(diào)整,每次調(diào)整仍然需要許多人肉操作和觀察,等待。。。而最近看了下S4的論文,發(fā)現(xiàn)S4可以完美的解決這兩個(gè)問題。首先S4根據(jù)keyedattribute的取值來分發(fā)/路由事件到不同的節(jié)點(diǎn)、不同的處理單元,這樣可以非常方便的做應(yīng)用以及更小粒度的隔離,完全可以做到局部問題不影響全局,解決了key太多的問題。其次,在S4架構(gòu)之上實(shí)現(xiàn)的在線參數(shù)調(diào)優(yōu)系統(tǒng),可以通過重建線上流量,應(yīng)用不同參數(shù),比較統(tǒng)計(jì)結(jié)果,自動(dòng)找出最優(yōu)參數(shù)再反設(shè)回線上系統(tǒng),這種實(shí)現(xiàn)可以說是參數(shù)調(diào)優(yōu)最理想的做法了。
于是翻譯了S4的整篇論文和大家分享。
原文地址:http://labs.yahoo.com/files/KDCloud2010S4.pdf
開源地址:http://s4.io/
下面是前兩節(jié)的翻譯:(英文好的同學(xué)請(qǐng)略過)
概要
S4是一個(gè)通用的,分布式的,可擴(kuò)展的,分區(qū)容錯(cuò)的,可插拔的平臺(tái)。開發(fā)者可以很容易的在其上開發(fā)面向×××不間斷流數(shù)據(jù)處理的應(yīng)用。編鍵的數(shù)據(jù)事件被分類路由到處理單元(ProcessingElements,PEs),處理單元消費(fèi)這些事件,做如下事情之一或全部:(1)發(fā)出一個(gè)或多個(gè)可能被其他PE處理的事件。(2)發(fā)布結(jié)果。這種架構(gòu)類似提供了封裝和地址透明語義的Actor模式,因此允許應(yīng)用在大規(guī)模并發(fā)的同時(shí)暴露簡(jiǎn)單的編程接口給應(yīng)用開發(fā)者。在這篇論文里,我們將勾畫S4的架構(gòu)細(xì)節(jié),描述各種各樣的應(yīng)用,包括實(shí)際中的部署。我們的設(shè)計(jì)主要由大規(guī)模應(yīng)用在生產(chǎn)環(huán)境中的數(shù)據(jù)采集和機(jī)器學(xué)習(xí)所驅(qū)動(dòng)。我們展示了S4設(shè)計(jì)令人驚奇的靈活性,使其運(yùn)行在構(gòu)筑于普通硬件之上的大規(guī)模集群中。
關(guān)鍵詞:編程模型(programmingmodel);復(fù)雜事件處理(complexeventprocessing);并發(fā)編程(concurrentprogramming);數(shù)據(jù)處理(dataprocessing);分布式編程(distributedprogramming);map-reduce;中間件(middleware);并行編程(parallelprogramming);實(shí)時(shí)搜索(real-timesearch);軟件設(shè)計(jì)(softwaredesign);流計(jì)算(streamcomputing)
一、介紹
S4(簡(jiǎn)單可擴(kuò)展流系統(tǒng)的首字母簡(jiǎn)稱:SimpleScalableStreamingSystem)是一個(gè)受Map-Reduce模式啟發(fā)的分布式流處理引擎。我們?cè)O(shè)計(jì)這個(gè)引擎是為了解決使用數(shù)據(jù)采集和機(jī)器學(xué)習(xí)算法的搜索應(yīng)用環(huán)境中的現(xiàn)實(shí)問題。當(dāng)前的商用搜索引擎,像Google、Bing和Yahoo!,典型的做法是在用戶查詢響應(yīng)中提供結(jié)構(gòu)化的Web結(jié)果的同時(shí)插入基于流量的點(diǎn)擊付費(fèi)模式的文本廣告。為了在頁面上的最佳位置展現(xiàn)最相關(guān)的廣告,科學(xué)家開發(fā)了算法來動(dòng)態(tài)估算在給定上下文中一個(gè)廣告被點(diǎn)擊的可能性。上下文可能包括用戶偏好,地理位置,之前的查詢,之前的點(diǎn)擊等等。一個(gè)主搜索引擎可能每秒鐘處理成千上萬次查詢,每個(gè)頁面都可能會(huì)包含多個(gè)廣告。為了處理用戶反饋,我們開發(fā)了S4,一個(gè)低延遲,可擴(kuò)展的流處理引擎。
為了便于在線實(shí)驗(yàn)算法,我們?cè)O(shè)想一種既適合研究又適合生產(chǎn)環(huán)境的架構(gòu)。研究的主要需求是要具有將算法快速發(fā)布到特定領(lǐng)域的高度靈活性。這使得以最小的開銷和支持在實(shí)際流量中測(cè)試在線算法成為可能。生產(chǎn)環(huán)境的主要需求是可擴(kuò)展性(以最小的代價(jià)通過增加更多的機(jī)器來提高吞吐量的能力)和高可用性(在存在系統(tǒng)故障的情況下不需要人工介入仍然能持續(xù)提供服務(wù)的能力)。我們考慮過擴(kuò)展開源的Hadoop平臺(tái)來支持×××流計(jì)算但是我們很快認(rèn)識(shí)到Hadoop平臺(tái)是為批處理做了高度優(yōu)化的。MapReduce系統(tǒng)典型的是通過調(diào)度批量任務(wù)操作靜態(tài)數(shù)據(jù)。而在流計(jì)算中的典型范式是有一個(gè)在我們無法控制的數(shù)據(jù)比率之上的事件流流入系統(tǒng)中。處理系統(tǒng)必須趕得上事件流量,或者通過消減事件優(yōu)雅的降級(jí),這通常被稱為負(fù)載分流(loadshedding)。流處理的這一模式?jīng)Q定了要和批處理使用非常不同的架構(gòu)。試圖建造一個(gè)既適合流計(jì)算又適合批處理的通用平臺(tái)結(jié)果可能會(huì)是一個(gè)高度復(fù)雜的系統(tǒng),并且最終可能都不是兩者最理想的實(shí)現(xiàn)。一個(gè)作為Hadoop擴(kuò)展構(gòu)建的MapReduce在線架構(gòu)的例子可以在[3]中找到。
MapReduce編程模型可以很容易的將多個(gè)通用批數(shù)據(jù)處理任務(wù)和操作在大規(guī)模集群上并行化,而不必?fù)?dān)心像failover管理之類的系統(tǒng)問題。MapReduce編程模型在Hadoop之類的開源軟件浪潮推動(dòng)下加速被采用,并且從實(shí)驗(yàn)室走向了Web搜索、欺詐檢測(cè)、在線約會(huì)等各種各樣的實(shí)際應(yīng)用中。但是通用的分布式流計(jì)算軟件卻沒有類似的發(fā)展趨勢(shì)。雖然已經(jīng)有各種各樣的工程和商業(yè)引擎([6],[7],[8],[9],[10]),但是它們的使用仍然局限于高度專業(yè)化的應(yīng)用。Aminiet.al.[7]給出了各種系統(tǒng)的評(píng)論。
實(shí)時(shí)搜索、高頻交易、社交網(wǎng)絡(luò)等新應(yīng)用的出現(xiàn)將傳統(tǒng)數(shù)據(jù)處理系統(tǒng)所能做的推向了極限[11]。對(duì)能夠在高數(shù)據(jù)流量下操作,處理巨量數(shù)據(jù)的高可擴(kuò)展流計(jì)算解決方案有了一個(gè)清晰的需求。例如,為了個(gè)性化搜索廣告,我們需要實(shí)時(shí)處理來自幾百萬唯一用戶每秒成千上萬次的查詢,典型的包括分析用戶最近活動(dòng)如查詢、點(diǎn)擊等。我們發(fā)現(xiàn)用戶的會(huì)話特征可以提高廣告相關(guān)性預(yù)測(cè)模型的精確度。這個(gè)性能改善用來提高顯示給每個(gè)特定用戶的廣告的相關(guān)性[12]。S4致力于一個(gè)通用的分布式流計(jì)算平臺(tái)的需求。
值得注意的是,某些現(xiàn)實(shí)世界的系統(tǒng)實(shí)現(xiàn)了這樣一種流處理策略:將輸入數(shù)據(jù)分隔成固定大小的片段,再由MapReduce平臺(tái)處理。這種方式的缺點(diǎn)在于其延遲與數(shù)據(jù)片段的長(zhǎng)度加上分隔片段、初始化處理任務(wù)的附加開銷成正比。小的分段會(huì)降低延遲,增加附加開銷,并且使分段間的依賴管理更加復(fù)雜(例如一個(gè)分段可能會(huì)需要前一個(gè)分段的信息)。反之,大的分段會(huì)增加延遲。最優(yōu)化的分段大小取決于具體應(yīng)用。與其嘗試將方形的木釘嵌入圓形的孔,我們決定探索一種簡(jiǎn)單的可以操作實(shí)時(shí)數(shù)據(jù)流的編程模型。我們的設(shè)計(jì)目標(biāo)是:
提供一種簡(jiǎn)單的編程接口來處理數(shù)據(jù)流
設(shè)計(jì)一個(gè)可以在普通硬件之上可擴(kuò)展的高可用集群。
通過在每個(gè)處理節(jié)點(diǎn)使用本地內(nèi)存,避免磁盤I/O瓶頸達(dá)到最小化延遲
使用一個(gè)去中心的,對(duì)等架構(gòu);所有節(jié)點(diǎn)提供相同的功能和職責(zé)。沒有擔(dān)負(fù)特殊責(zé)任的中心節(jié)點(diǎn)。這大大簡(jiǎn)化了部署和維護(hù)。
使用可插拔的架構(gòu),使設(shè)計(jì)盡可能的即通用又可定制化。
友好的設(shè)計(jì)理念,易于編程,具有靈活的彈性
為了簡(jiǎn)化S4初始的設(shè)計(jì),我們作了如下假設(shè):
不完全的failover是可以接受的。在一個(gè)服務(wù)器故障時(shí),處理自動(dòng)的轉(zhuǎn)移到穩(wěn)定的服務(wù)器。存儲(chǔ)在本地內(nèi)存中的處理狀態(tài)在交接中會(huì)丟失。(新的處理)狀態(tài)會(huì)根據(jù)輸入數(shù)據(jù)流重新生成。下游系統(tǒng)必須能夠優(yōu)雅降級(jí)。
不會(huì)有節(jié)點(diǎn)從正在運(yùn)行的集群中增加或移除。
我們發(fā)覺這些要求對(duì)于我們大部分的應(yīng)用都可以接受。將來我們計(jì)劃為無法接受這些限制的應(yīng)用找出解決方案
允許在常規(guī)硬件之上進(jìn)行分布式操作,和避免集群內(nèi)使用共享內(nèi)存這兩個(gè)目標(biāo)引導(dǎo)我們?yōu)镾4采用Actor模式[1]。這種模式有一個(gè)簡(jiǎn)單的原語集并且在工業(yè)級(jí)規(guī)模下的各種框架使用中被證明是有效的[13]。在S4中,通過處理單元(ProcessingElements(PEs))進(jìn)行計(jì)算,消息在處理單元間以數(shù)據(jù)事件的形式傳送。每個(gè)PE的狀態(tài)對(duì)其他PE不可訪問。PE之間唯一的交互模式就是發(fā)出事件和消費(fèi)事件。框架提供了路由事件到恰當(dāng)?shù)腜E和創(chuàng)建新PE實(shí)例的能力。這方面的設(shè)計(jì)提供了封裝和地址透明的特性。
S4的設(shè)計(jì)和IBM的流處理核心(SPC)中間件有很多相同的特性。兩個(gè)系統(tǒng)都是為了大數(shù)據(jù)量設(shè)計(jì)的。都具有使用用戶定義的操作在持續(xù)數(shù)據(jù)流上采集信息的能力。兩者主要的區(qū)別在架構(gòu)的設(shè)計(jì)上:SPA的設(shè)計(jì)源于一種訂閱模式,而S4的設(shè)計(jì)是源于MapReduce和Actor模式的結(jié)合。我們相信因?yàn)槠鋵?duì)等的結(jié)構(gòu),S4的設(shè)計(jì)達(dá)到了非常高程度的簡(jiǎn)單性。集群中的所有節(jié)點(diǎn)都是等同的,沒有中心控制。就像我們將要描述的,這得益于ZooKeeper[14],一個(gè)簡(jiǎn)單優(yōu)雅的集群管理服務(wù),可以給數(shù)據(jù)中心的多個(gè)系統(tǒng)共用。
—-
全文翻譯放在這里:
內(nèi)網(wǎng):\10.13.40.158shareDistributedStreamComputingPlatform(S4)_cn.pdf
外網(wǎng):百度文庫(kù):http://wenku.baidu.com/view/fb2d2c22482fb4daa58d4b7d.html
轉(zhuǎn)載于:https://blog.51cto.com/aliapp/1327684
總結(jié)
以上是生活随笔為你收集整理的S4:分布式流计算平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯:将收购Riot Games多数股权
- 下一篇: apache常用的配置指令:Server