在Splunk峰會有個令人驚訝的共同主題,它是個和大數(shù)據(jù)架構(gòu)相關(guān)的問題:“我應(yīng)該使用那種方法和架構(gòu)呢?push(推送)、pull(拉取)還是search in place(靠近數(shù)據(jù)搜索)?”
在理論上, 基于pull(pull-based)模式 的系統(tǒng)其容錯性是最好的。你只需要簡單地等待結(jié)果,當(dāng)預(yù)期的時間到達時,一次性導(dǎo)入那些完成的日志即可。雖然這可以在任何時間發(fā)生,但通常它們會是夜間批處理作業(yè)的一部分。并且如果什么地方出了錯,你可以簡單重新運行作業(yè)。但是,從Splunk上得到的通常觀點則是和基于pull模式的設(shè)計理念截然相反的。
對于pull模式最大的批評在于它缺乏實時性的信息。你必須要等一天、一周,甚至是一個月的時間來獲取關(guān)鍵信息,而這在很多公司被認為是不可接受的。產(chǎn)生這種認識的原因在于:當(dāng)獲取到這些信息的時候,再采取相應(yīng)的行動可能就太遲了。
另一個批評在于基于pull模式的系統(tǒng)在實際使用中有些脆弱。假設(shè)有一個處理只能在深夜運行,那么當(dāng)發(fā)生錯誤時,相關(guān)的作業(yè)就只能在第二天再重新運行,這進一步增加了延遲。
對于Spark企業(yè)版(Splunk Enterprise),它的核心產(chǎn)品采用了 基于push(push-based)模式 的系統(tǒng)作為其缺省模型。在靠近數(shù)據(jù)源的地方,會安裝一個轉(zhuǎn)發(fā)器(forwarder),或者將其內(nèi)建到數(shù)據(jù)生成器(generator)或收集器(collector)中,然后將事件推送到索引器中(indexer)。對于那些沒有使用Splunk的場景,事件則會推送到某些數(shù)據(jù)倉庫中,比如SQL Server Columnstore、Hadoop或者 Cassandra中。
理論上基于push模式的設(shè)計會有更多的問題,因為它依賴于數(shù)據(jù)流目的點持續(xù)性激活且保持可用狀態(tài),所以必須依靠一些復(fù)雜的回退機制來確保在網(wǎng)絡(luò)中斷和目的服務(wù)器失敗的情況下,數(shù)據(jù)不會丟失。
實際情況是,從很多商家的報告中都可以看到其使用良好。這些產(chǎn)品的用戶可以近乎實時的訪問他們所需要的報告。
除了pull和push模式,還有第三個選項,它很簡單,你根本不需要移動數(shù)據(jù),相反你會使用 search in place(搜索靠近數(shù)據(jù)) 技術(shù),這有些像map-reduce。這種技術(shù)帶來最大的好處是你不必為移動數(shù)據(jù)而預(yù)先付出時間和網(wǎng)絡(luò)帶寬上的損耗。特別是你的報告僅僅包括一部分數(shù)據(jù)或者是總結(jié)性試圖(summarized view)時,這種處理方式的效果就會更好。Splunk的Hunk產(chǎn)品,其后端基于Hadoop,在設(shè)計上就傾向于這種模型。
這種模型不好的一面在于其對數(shù)據(jù)源帶來了非常大的壓力(譯者注:搜索的計算量引起)。在一個客戶的展示中,他們引用了其采用ETL作業(yè),以及后來采用Splunk Enterprise的主要原因在于,他們的搜索在其Dynatrace(譯者注:Dynatrace是美國一家應(yīng)用性能管理軟件公司)服務(wù)器上引起了非常嚴重的性能問題。
還有第四種模型,我們稱之為“ pull on demand(根據(jù)需要拉取數(shù)據(jù)) ”。這是一種反模式,即你的搜索引擎只會在搜索啟動后,將所需要的原始數(shù)據(jù)拉取過來進行計算。通常當(dāng)搜索完成后,搜索引擎會馬上將拉取的數(shù)據(jù)丟棄掉,這意味著每次搜索進行時,都需要重新進行代價高昂的拉取操作。在最佳設(shè)計方案中,會將拉取過來的數(shù)據(jù)保存在本地緩存。但這仍然意味著搜索的運行時間將是不可預(yù)測的,因為數(shù)據(jù)會在本地緩存中移進或移出。先前提到的Hunk,其在verbose模式下就會按照這樣的方式運行。
哦,別跑遠,我們正在這討論大數(shù)據(jù)架構(gòu)。對于小規(guī)模的數(shù)據(jù),pull on demand(根據(jù)需要拉取數(shù)據(jù))也許是一種可接受的設(shè)計模式。
InfoQ 提問: 看完這篇文章,對于性能和可靠性,你更傾向于push、pull還是search-in-place的設(shè)計呢?