大資料流式處理的利與弊
Laxcus大資料管理系統2.0版本推出有兩個多月了,最近做了一次使用情況調查,發現最受歡迎的竟是流式處理。這大大出乎我們推出新版本時的預料。因為當時新版本推出時,流式處理只是做為磁碟資料處理的一項輔助功能而附帶提供的,而且最初設計流式處理時,技術上也並沒有花太多心思,因為它很容易實現,只是改變一下資料處理流經的路線而已。不過現在想想,再看看當下SPARK火熱的情況,流式處理大熱也就不奇怪了,畢竟更多更快更強的大資料處理效果是大家共同追求的目標。舉一個例子,我們一個合作伙伴,原來做一次大資料計算,大概需要一兩個小時的時間,現在改用了流式處理,同樣的資料量,只用幾分鐘就搞掂了,計算效率一下子提升了幾十倍。這樣的資料處理,不招人喜歡才怪!
不過做為大資料技術開發者和運營管理者,對於流式處理,我們卻要冷靜對待,下面就從技術和運維的角度,來說一說我自己的看法。
流式處理的好處這裡就不說了,大家都已經看得到:快!僅憑這一點,就足以讓大批沒有耐心的使用者心滿意足。
下面主要說一說“弊”的方面。
大家應該都知道,流式處理是以記憶體取代硬碟來實現快速處理效果的。不管現在任何流式處理產品,包括SPARK、STORM、SAMZA,它們怎麼說自己的產品與別人有什麼不同,這個根本的相同點是迴避不了的,這是流式處理所以能夠快的根本原因。
在一臺計算機裡,以儲存容量比較,記憶體是少數,硬碟是多數,這樣的例子,我們看看自己用的PC就知道。一臺PC,現在硬碟容量最少也是1TB了,但是記憶體呢,不過幾個GB的數量,兩者相差近千倍。這種情況在雲伺服器上也一樣,每臺伺服器,可以分配給使用者的空間基本都是足夠的,即使偶爾不足,也可以通過負載均衡的辦法,分散到其它機器上來彌補。但是記憶體就不同了,記憶體在大多數的時候是不足的,而且就是在這種不足的情況下,還要滿足多個使用者的資料請求,所以每個使用者實際分到的記憶體就更少。而流式處理加入進來後,實際的效果就是把原來分配給多個使用者的記憶體資源,全部歸給一個使用者來使用,其他需要記憶體的使用者,因為沒有記憶體可用,將被迫進入等待狀態,直到這個使用者完成後,才能繼續使用。所以,從業務公平和資料公平角度來說,流式處理的這種做法是不合理的,屬於多吃多佔。這有點象社會上某些現象,為了滿足某些個體的私利,而犧牲掉公眾的利益。呵呵。當然,如果是自己搭建叢集,只為自己業務服務的,那就另說。
還有一點是流式處理比較尷尬的,這在所有流式處理中都存在,但是我看過很多介紹流式處理的文章,不知他們是有意迴避還是其它什麼原因,被提及的並不多,也需要諸位加以注意:回到根本,流式處理實質仍然是一個分佈的計算過程,它的計算過程中,在叢集中的作用節點肯定不會是一個,而是N個,這樣就要求所有節點都必須同時滿足操作流式處理所需要的記憶體,當任何一個節點不能滿足流式處理要求的記憶體時,這個節點的流式處理將被迫轉向磁碟,恢復成磁碟資料處理過程。雖然只是一個節點,但是根據水桶短板效應,這次流式處理的總處理時間將被這個節點拖累,實際的處理時間與磁碟處理無異,並不能達到流式處理的要求。這種現象,是目前各種流式處理都無法完全避免的,尤其當執行系統存在多使用者多工競用的時候。
解決這個水桶短板效應的辦法是“預約”。就是在執行計算工作前,先評估一下這次流式計算所需要的記憶體總量,然後啟動一個“流代理任務”,到每臺計算機上去檢查剩餘記憶體,如果符合要求,就鎖定這臺計算機的記憶體,檢查全部達標後,批准此次流式處理。不過這樣又產生新的問題:就是如果記憶體不足的時候,流式處理任務將被迫轉入等待;或者實際記憶體不能滿足要求時,仍然要回退磁碟處理的老路。這樣的處理辦法,將造成與快速計算的目標相悖。但是目前看,也只能是這樣了。
再從運營商的角度來談談流式處理。
諸位應該都知道,同樣單位容量情況下,記憶體比硬碟貴太
最後總結一下:一個時間裡,單個業務做流式處理效果最佳,多個業務並存就不好說了。還有,能不能在大資料叢集中執行流式處理,讓使用者獲得快速計算能力,更大的成分,並不是技術問題,而是錢的問題,它和叢集所有者兜裡的銀子成正比。這和金融、地產是一樣的,沒錢就別玩!
中國廣州超算中心的天河2號
美國能源部橡樹嶺國家實驗室的Titan
中國的天河2,美國的Titan,所以有這麼強的效能,都是拿銀子堆出來的。這樣超一流的硬體條件,配上可靠的大資料處理軟體,做起超級計算、流式計算、超大規模資料存取工作來,自然是得心應手。