趨勢科技2015年初用Spark打造了一個可同時進行串流和批次處理的特定用途大資料分析,來處理每天暴增數十GB的APT攻擊Log資料,圖為主要參與推手,分別為趨勢科技研究開發部的經理洪健洲(圖右)、技術經理黃彥碩和資深軟體工程師葉祐欣(圖左)。(圖片來源/iThome)

趨勢科技是臺灣最早擁抱Hadoop大資料分析平臺的企業,早在2008年就利用Hadoop來快速檢查全球數十億個網站,從中來找出可疑的惡意網站。近幾年甚至更進一步地,發展出了自己的Hadoop大資料版本,稱為Trend Micro Hadoop(TMH),並以此為核心,來建構出趨勢自己的大資料堆疊架構(Big Data Stack)。

在去年底Big Data Conference 2015上,趨勢首度對外發表了這套大資料架構,不只像國外企業常見以Hadoop Ecosystem產品為主的大資料架構,趨勢大資料架構還進一步整合了當紅的Docker容器技術,透過Docker來部署Hadoop的執行環境。不過,即使趨勢在Hadoop實戰經驗上已是臺灣數一數二強,甚至都不輸國際大型網路業者,但在2015年初,他們卻遇到了一個新挑戰,是原有慣用的Hadoop大資料平臺不容易完成的挑戰。

這個新挑戰也就近年來在資安領域日益猖獗的進階持續性滲透攻擊(APT),由於APT沒有一定手法或特徵,只能從大量網路行為Log或帳號行為中,找出可能遭駭客利用的問題帳號。

不過,光是在臺灣地區,趨勢要監控的網路行為Log資料,每天暴增數十GB,若以原有Hadoop平臺來處理,光是儲存分析過程的中間資料量,就得耗費數倍容量,為了提高分析速度所投入的硬體投資也相對很高。

因此,趨勢從2015年初開始,採用了國外超夯的新一代大資料分析Spark來打造專用的特殊任務大資料平臺,稱為SDACK架構。

這個平臺主要採取串流分析的策略來處理APT的大量Log資料。趨勢先利用少量Log資料或其他APT攻擊特徵,找出判斷可疑行為的演算法或判斷規則,再利用Spark來處理每天數十GB的Log,找出可疑的帳號或行為,並將分析結果寫入SQL資料庫中,建立一個視覺化網站來呈現出可疑的APT攻擊行為。

 

趨勢大資料分析平臺最大特色

趨勢科技以新世代大資料分析技術Spark為核心,打造了一個不同於Hadoop為核心的專用大資料分析平臺,還使用了Akka、Cassandra、Kafka這幾個熱門的大資料套件,並使用Docker做資源管理,趨勢命名為SDACK架構。

 

串流架構的策略是消化資料不是儲存資料

不過,趨勢沒有將每天暴增數十GB的Log資料都保存下來,而只保留最後的運算結果。趨勢科技研究開發部技術經理黃彥碩解釋,「這個新架構最大特色是,不用儲存資料,而是消化資料,這也是批次處理和串流處理思維最大的不同。」目前,趨勢先在臺灣地區使用這個平臺來分析APT資料,未來還會進一步擴大到全球。

趨勢這個特定用途大資料分析平臺,主要用於分析即時的串流資料。在資料傳遞過程同時參照外部資料,當串流資料進來時就先進行風險與惡意活動的偵測。也會同時分析串流資料與歷史資料的關聯性,像是一、兩個小時前的歷史資料,可支援指定任何起始與結束時間,來做該特定時段的批次偵測,最後也支援調查作業(Investigation)可以降到最原始的紀錄層級(Raw log level)。

除了Spark,這個特定任務平臺還使用了Fluentd、Kafka、Akka、Cassandra這幾個熱門的大資料套件。先由紀錄檔或串流資料蒐集程式Fluentd來接收資料,並將資料存放在分散式訊息系統Kafka,再用Akka來轉換記錄檔、參照外部資料,分為兩個資料流,把轉換好的紀錄檔同時存到Cassandra及Kafka。趨勢科技資深軟體工程師葉祐欣表示,這麼做其實是用同一個叢集開啟不同的Topic,其中Kafka可支援Spark的串流分析,另一邊Cassandra則做批次分析,採用像是Lambda的架構。

他也進一步說明這幾個大資料套件的特色,其中,Kafka是一套分散式訊息系統,可以輕易擴充,特色是能支援多個Consumer。此外Kafka可以配置每個Partition需要備份的個數,並備份到多臺機器上每個分區都會進行備份,即使單一節點壞掉也可以確保訊息不遺失,也可以設定多個Consumer Group針對同一主題,確保服務不會產生重複訊息。

而Cassandra則是NoSQL分散式資料庫,採用Key-Value資料儲存架構,在Cassandra叢集架構中,每一臺伺服器節點對等獨立,彼此沒有主從關係,且具有複寫機制,因此也沒有單點失效問題(SPOF),不會因為單一臺主機掛掉導致資料庫無法運作。Cassandra具有非常快的寫入效能,適合串流資料的處理。

另外,Akka是一個高效能、併發資料處理的框架,支援Java和Scala,以Actor模式進行訊息驅動的資料處理。每個Actor可以用訊息傳遞的方式來互相傳資料做溝通,都是非同步進行。在Actor模式中,每個Actor是單一執行緒(Single Thread),Actor裡面存的訊息只供自己更新,不會有多執行緒問題。

Akka也具有容錯能力和自動修復系統,並有階層關係,Actor下面可以有多個Actor,並由上面的Actor監管。此外,還提供了叢集功能,可用多個節點來組成叢集,讓應用程式可以分散在不同的節點上。

葉祐欣將這整個架構稱為SDACK,結合Spark來處理串流與批次資料分析,然後用Docker做資源管理,葉祐欣表示,因為在特定任務平臺上只有一個App,只要把自己的資源管理好,因此不需要用到多重管理工具如YARN或Mesos。此外,Akka用來做細緻的資料處理流程,Cassandra用來做批次查詢,Kafka則提供可用的緩衝區。整套SDACK設計是採取了雙資料流的Lambda架構設計。一份資料進來,同時分成即時處理和批次處理兩種資料流程。

不同於新版Hadoop Ecosystem架構同樣也強調串流搭配批次處理的Lambda雙資料流架構,趨勢科技研究開發部經理洪健洲表示,Spark中的串流處理,其實是一種微批次處理的設計(Micro-Batch),而不是真的是以事件為驅動的即時處理(Real Time)。這種微批次是將每次處理的時間區隔縮短到數秒,或甚至是0.1秒的間隔,仍然是批次處理的手法,只是每次處理的時間很短,感覺起來就像是接近即時處理的效果。

洪健洲解釋,不少應用情境其實不需要真正的即時處理,對趨勢而言,5秒鐘的即時性就已經很足夠了。但是因為微批次處理也是一種批次處理,所以,用來處理資料的程式,兩者差異不大,甚至可以直接套用。不用像在Hadoop的Lambda雙資料流架構下,得為即時處理程序和批次處理的MapReduce分別撰寫不同的程式碼。「從開發角度來說,同一套程式可以套用在兩種不同的資料處理模式上,這是Spark最性感的特色。」他說。文⊙王宏仁、辜騰玉

熱門新聞

Advertisement