国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      分布式流計算系統、方法和裝置與流程

      文檔序號:12363103閱讀:222來源:國知局
      分布式流計算系統、方法和裝置與流程

      本發(fā)明屬于互聯網技術領域,具體地說,涉及一種分布式流計算系統、方法和裝置。



      背景技術:

      流計算是目前數據處理領域里的一個重要組成部分。相對于傳統的數據處理系統會把數據存儲在硬盤或其他存儲服務后再進行計算處理,流計算處理實時傳入的數據并且實時的體現出數據的價值,普遍認為數據流的價值隨時間的流逝而減低。

      目前比較成熟的流處理系統包括Yahoo的S4(開源)、Twitter的Storm(開源)、Google的MillWheel、Amazon的Kinesis等,其用戶的流計算需求需要依賴用戶自己準備的數據處理邏輯代碼實現。

      以Storm為例,它在完成流處理需求時主要體現在兩種節(jié)點上,Spout(噴口,可以理解為消息源)節(jié)點向下一級Bolts(螺栓)節(jié)點發(fā)送消息流(Stream),由下一級螺栓節(jié)點實現消息的處理邏輯,比如執(zhí)行過濾、聚合計算等。而螺栓節(jié)點的計算邏輯(以及噴口節(jié)點的數據產生邏輯)是由用戶通過實現storm提供的接口來完成的。Storm的拓撲(Topology)原理如圖1所示。與storm類似,Kinesis等流處理體系同樣是由用戶實現計算邏輯。

      在這種流計算系統中,如Storm、Kinesis等都需要用戶自己實現流處理的邏輯。用戶需要保證實現的邏輯無誤,尤其是在各種偶發(fā)的邊界條件上,否則,難以完成一個長時間穩(wěn)定運行的流計算業(yè)務,更進一步地,在用戶對系統框架理解不足,或者考慮不全的情況下,用戶難以保證自己實現的邏輯能在系統發(fā)生故障時,正確處理各種異常,維持正確 的邏輯。以上對用戶來說是極高的要求,很難讓用戶快速正確的使用分流處理系統。在使用上述系統時,用戶通常需要身兼運維、測試、開發(fā)等更多角色的工作,而傳統的數據處理(如sql查詢)用戶只需要想清自己的邏輯,完成sql(結構化查詢語言,Structured Query Language)查詢的編寫即可,無需考慮sql查詢的實現方法以及查詢的正確性問題。



      技術實現要素:

      有鑒于此,本申請?zhí)峁┝艘环N分布式流計算系統、方法和裝置,解決了現有技術中用戶在使用流計算系統時需要自己實現流計算的處理邏輯的技術問題。

      為了解決上述技術問題,本申請公開了一種分布式流計算系統,包括:第一節(jié)點和第二節(jié)點;所述第一節(jié)點將輸入的離線sql運算邏輯轉換為DAG(有向無環(huán)圖,Directed Acyclic Graph),所述DAG表示所述離線sql運算邏輯中各個算子之間的邏輯關系;所述第一節(jié)點根據所述各個算子之間的邏輯關系將所述DAG劃分為多個部分并分配到對應的多個第二節(jié)點,所述多個第二節(jié)點根據分配到的部分DAG而形成多個級別;所述多個第二節(jié)點接收實時數據流并根據所述DAG逐級完成流計算處理。

      所述第一節(jié)點根據所述各個算子之間的邏輯關系將所述DAG劃分為多個部分并分配到對應的多個第二節(jié)點,所述多個第二節(jié)點根據分配到的部分DAG而形成多個級別包括:在所述各個算子之間的邏輯關系中確定已完成對數據進行洗牌(shuffle)處理的位置,根據所述位置將所述DAG劃分成相應的多個部分并分配到多個第二節(jié)點,所述多個第二節(jié)點根據分配到的部分DAG而形成多個級別。

      所述DAG包括無邏輯狀態(tài)的第一類算子和有邏輯狀態(tài)的第二類算子;在所述流計算處理中,所述第二類算子為處理結果添加邏輯狀態(tài)標識。

      所述第二節(jié)點包括數據驅動模塊、流計算模塊和輸出模塊;其中,所述數據驅動模塊接收實時數據流并發(fā)送至流計算模塊,所述流計算模塊根據分配到的部分DAG中各個算子之間的邏輯關系完成所述流計算處理,將處理 結果發(fā)送至輸出模塊;所述輸出模塊將所述處理結果發(fā)送至下一級第二節(jié)點或者外部的存儲裝置。

      所述輸出模塊包括調度子模塊和寫入子模塊;所述輸出模塊通過所述調度子模塊將所述處理結果發(fā)送至下一級第二節(jié)點,或者所述輸出模塊通過所述寫入子模塊將所述處理結果發(fā)送至外部的存儲裝置。

      為了解決上述技術問題,本申請還公開了一種分布式流計算方法,所述方法包括:根據從第一節(jié)點分配到的部分DAG,從客戶端或上一級第二節(jié)點接收到實時數據流;根據所述部分DAG中各個算子之間的邏輯關系,對所述實時數據流進行流計算處理,得到處理結果;將所述處理結果發(fā)送至下一級第二節(jié)點或外部的存儲裝置。

      所述根據所述部分DAG中各個算子之間的邏輯關系,對所述實時數據流進行計算處理,得到處理結果包括:判斷當前算子是否屬于第二類算子,當所述當前算子屬于第二類算子時,為所述處理結果添加邏輯狀態(tài)標識。

      所述為所述處理結果添加邏輯狀態(tài)標識包括:為所述處理結果添加更新(update)標識并發(fā)送至下一級第二節(jié)點;或者,為所述處理結果添加附加/刪除(append/delete)標識并發(fā)送至下一級第二節(jié)點。

      所述為所述處理結果添加附加/刪除標識并發(fā)送至下一級第二節(jié)點包括:當根據所述處理結果生成第一數據時,發(fā)送帶有附加標識的第一數據至下一級第二節(jié)點,使所述下一級第二節(jié)點添加所述第一數據;當根據所述處理結果所述第一數據變?yōu)榈诙祿r,發(fā)送帶有刪除標識的所述第一數據至所述下一級第二節(jié)點,使所述下一級第二節(jié)點刪除所述第一數據;再發(fā)送帶有附加標識的所述第二數據至所述下一級第二節(jié)點,使所述下一級第二節(jié)點添加所述第二數據。

      所述根據所述部分DAG中各個算子之間的邏輯關系,對所述實時數據流進行流計算處理,得到處理結果還包括:每隔預設時長停止處理接收到的數據,將正在處理的數據處理完成后,對所述部分DAG中有邏輯狀態(tài)的第二類算子生成快照;將所述快照的內存鏡像文件記錄為一個檢查點。

      所述根據第一節(jié)點分配到的部分DAG,從客戶端或上一級第二節(jié)點接收到 實時數據流之后,所述方法還包括:將所述接收到的實時數據流寫入到重做日志;當發(fā)生故障時,讀取距離當前時間最近的檢查點;根據所述檢查點的內存鏡像文件恢復所述第二類算子的邏輯狀態(tài);從所述重做日志中讀取所述檢查點后接收到的數據并進行處理;當所述重做日志中的數據處理完成時,繼續(xù)對接收到的實時數據流進行流計算處理。

      為了解決上述技術問題,本申請還公開了一種分布式流計算裝置,包括:接收模塊,用于根據從第一節(jié)點分配到的部分DAG,從客戶端或上一級第二節(jié)點接收到實時數據流;第一處理模塊,用于根據所述部分DAG中各個算子之間的邏輯關系,對所述實時數據流進行流計算處理,得到處理結果;發(fā)送模塊,用于將所述處理結果發(fā)送至下一級第二節(jié)點或外部的存儲裝置。

      所述第一處理模塊包括:判斷子模塊,用于判斷當前算子是否屬于第二類算子,處理子模塊,用于當所述當前算子屬于第二類算子時,為所述處理結果添加邏輯狀態(tài)標識。

      所述處理子模塊包括:第一發(fā)送單元,用于為所述處理結果添加更新標識并發(fā)送至下一級第二節(jié)點;或者,第二發(fā)送單元,用于為所述處理結果添加附加/刪除標識并發(fā)送至下一級第二節(jié)點。

      所述第二發(fā)送單元包括:第一發(fā)送子單元,用于當根據所述處理結果生成第一數據時,發(fā)送帶有附加標識的第一數據至下一級第二節(jié)點,使所述下一級第二節(jié)點添加所述第一數據;第二發(fā)送子單元,用于當根據所述處理結果所述第一數據變?yōu)榈诙祿r,發(fā)送帶有刪除標識的所述第一數據至所述下一級第二節(jié)點,使所述下一級第二節(jié)點刪除所述第一數據;再發(fā)送帶有附加標識的所述第二數據至所述下一級第二節(jié)點,使所述下一級第二節(jié)點添加所述第二數據。

      所述第一處理模塊還包括:生成子模塊,用于每隔預設時長停止處理接收到的數據,將正在處理的數據處理完成后,對所述部分DAG中有邏輯狀態(tài)的第二類算子生成快照;鏡像子模塊,用于將所述快照的內存鏡像文件記錄為一個檢查點。

      所述裝置還包括:日志模塊,用于將所述接收到的實時數據流寫入到重做日志;讀取模塊,用于當發(fā)生故障時,讀取距離當前時間最近的檢查點; 恢復模塊,用于根據所述檢查點的內存鏡像文件恢復所述第二類算子的邏輯狀態(tài);第二處理模塊,用于從所述重做日志中讀取所述檢查點后接收到的數據并進行處理;第三處理模塊,用于當所述重做日志中的數據處理完成時,繼續(xù)對接收到的實時數據流進行流計算處理。

      與現有技術相比,本申請可以獲得包括以下技術效果:將用戶熟悉的離線sql運算的算子在流計算系統中實現,用戶可以快速將離線sql轉換為系統可以支持的流計算處理邏輯,并且系統包含了對于出現故障時的處理邏輯,可以通過檢查點和重做日志恢復各個算子的邏輯狀態(tài)。

      當然,實施本申請的任一產品必不一定需要同時達到以上所述的所有技術效果。

      附圖說明

      此處所說明的附圖用來提供對本申請的進一步理解,構成本申請的一部分,本申請的示意性實施例及其說明用于解釋本申請,并不構成對本申請的不當限定。在附圖中:

      圖1是現有技術中Storm流處理系統的拓撲結構示意圖;

      圖2是本申請實施例提供的一種分布式流計算系統的拓撲結構示意圖;

      圖3是本申請實施例第二節(jié)點的內部拓撲結構示意圖;

      圖4是本申請實施例提供的一種分布式流計算方法的流程示意圖;

      圖5是本申請實施例第二類算子添加更新標識時的處理過程示意圖;

      圖6是本申請實施例第二類算子添加附加/刪除標識時的處理過程示意圖;

      圖7是本申請實施例提供的一種分布式流計算方法的流程示意圖;

      圖8是本申請實施例提供的一種分布式流計算裝置的結構示意圖。

      具體實施方式

      以下將配合附圖及實施例來詳細說明本發(fā)明的實施方式,藉此對本發(fā)明 如何應用技術手段來解決技術問題并達成技術功效的實現過程能充分理解并據以實施。

      圖2是本申請實施例提供的一種分布式流計算系統的拓撲結構示意圖,包括第一節(jié)點10和第二節(jié)點11。其中,第一節(jié)點10將由用戶輸入的離線sql(結構化查詢語言,Structured Query Language)運算邏輯轉換為DAG(有向無環(huán)圖,Directed Acyclic Graph)。該DAG包括輸入的離線sql運算邏輯中的各個算子,用于表示輸入的離線sql運算邏輯中各個算子之間的邏輯關系。

      第一節(jié)點10根據各個算子之間的邏輯關系將DAG劃分成多個部分并分配到對應的多個第二節(jié)點11,該多個第二節(jié)點11根據分配到的部分DAG被劃分為多個級別,從而形成上級節(jié)點和下級節(jié)點的關系。如果將每個第二節(jié)點11分配到的部分DAG按照各個第二節(jié)點11的級別關系拼接在一起,即可得到第一節(jié)點10轉換出的完整DAG。

      在用戶輸入的離線sql運算邏輯中,部分運算需要按照特定的列進行哈希,在哈希方式發(fā)生變化時,需要切分節(jié)點使用不同的哈希來對數據進行洗牌(shuffle)處理。第一節(jié)點10在將轉換出的DAG劃分成多個部分時,在各個算子之間的邏輯關系中確定已完成對數據進行洗牌處理的位置,根據該已完成洗牌處理的位置將所述DAG劃分成相應的多個部分,并分配到多個第二節(jié)點11,該多個第二節(jié)點11根據分配到的部分DAG形成不同級別。

      根據該多個第二節(jié)點11形成的不同級別,由最高級別的第二節(jié)點11接收來自客戶端的實時數據流,并根據DAG逐級完成流計算處理。其中每個第二節(jié)點11的內部拓撲結構如圖3所示,包括數據驅動模塊110、流計算模塊111和輸出模塊112。其中數據驅動模塊11接收實時數據流并發(fā)送至流計算模塊111,最高級別的第二節(jié)點11的數據驅動模塊110接收來自客戶端的實時數據流,而其他級別的第二節(jié)點11的數據驅動模塊111接收來自上一級第二節(jié)點11的實時數據流。數據驅動模塊110將接收到實時數據流發(fā)送至流計算模塊111,流計算模塊111保存有分配到的部分DAG,由流計算模塊111根據分配到的部分DAG中各個算子之間的邏輯關系完成流計算處理,并將處理結果發(fā)送至輸出模塊112,由輸出模塊112將處理結果發(fā) 送至下一級第二節(jié)點11或者外部的存儲裝置,最低級別的第二節(jié)點11的輸出模塊112將處理結果發(fā)送至外部的存儲裝置,而其他級別的第二節(jié)點11的輸出模塊112將處理結果發(fā)送至其下一級第二節(jié)點11。如圖3所示,輸出模塊112進一步包括調度子模塊1121和寫入子模塊1122;輸出模塊112通過調度子模塊1121將流計算的處理結果發(fā)送至下一級第二節(jié)點,或者通過寫入子模塊1122將流計算的處理結果發(fā)送至外部的存儲裝置。

      該DAG包括兩類算子,無邏輯狀態(tài)的第一類算子和有邏輯狀態(tài)的第二類算子。其中第一類算子不會為數據添加邏輯狀態(tài),對實時數據流進行計算處理時不會依賴該數據的邏輯狀態(tài),也不會影響其他算子的數據的邏輯狀態(tài)。例如,filter(過濾器)算子,用于完成sql中的where/having子句實現的功能;transform(轉換器)算子,用于提供類似于離線sql中select語句的各種轉化函數的處理效果;window(時間窗)算子,用于實現以時間為依據將數據切分的功能,如按天統計網站訪問量,在每日0:00結果會被歸零,開始下一天的統計;以及各種最終輸出的算子,如將數據寫入云服務端OTS(Open Table Service,開放結構化數據服務)等。第二類算子對實時數據流的處理過程會依賴邏輯狀態(tài),根據不同的邏輯狀態(tài)分情況進行處理,同時該處理可能會引起數據的邏輯狀態(tài)的變化,從而影響到其他第二類算子對數據的處理方式。例如,Groupby(分組)算子,用于將一個數據集分為若干小區(qū)域分別進行處理,類似于離線sql中的分組,在本系統中,該算子也包括具體使用的聚合,如可返回表中唯一不同值的count(統計)/sum(總計)/average(平均)等函數;top(限定返回數)算子,用于限定返回記錄的數目,即在有限集合上依據某種規(guī)則取得其中的部分結果;join(連接)算子,在有限集合的多個表之間建立聯系以查詢數據;以及其他可能由于一條數據輸入導致多條數據產生實時變化的其他算子。對于該第二類算子在實時數據流的計算處理中的應用將在后續(xù)實施例中進行說明。

      本申請實施例提供的分布式流計算系統,將用戶熟悉的離線sql運算的算子在流計算系統中實現,用戶可以快速將離線sql轉換為系統可以支持的流計算處理邏輯,降低了用戶的工作量和工作難度,提高了流計算處理的工作效率。

      圖4是本申請實施例提供的一種分布式流計算方法,適用于第二節(jié)點,該方法包括以下步驟。

      在步驟S20中,根據從第一節(jié)點分配到的部分DAG,從客戶端或上一級第二節(jié)點接收到實時數據流。

      第二節(jié)點根據從第一節(jié)點分配到的部分DAG而劃分為多個級別。最高級別的第二節(jié)點從客戶端接收實時數據流進行處理,而其他較低級別的第二節(jié)點從上一級第二節(jié)點接收實時數據流進行處理。

      在步驟S21中,根據部分DAG中各個算子之間的邏輯關系,對實時數據流進行流計算處理,得到處理結果。

      第二節(jié)點分配到的部分DAG中包括各種算子,根據各個算子之間的邏輯關系對接收到的實時數據流進行流計算處理。分配到的部分DAG中包括無邏輯狀態(tài)的第一類算子和有邏輯狀態(tài)的第二類算子。在流計算處理的過程中,無邏輯狀態(tài)的第一類算子對實時數據流的處理相對直接,或修改一條數據上的部分內容(如時間窗算子、轉換器算子),或判斷是否過濾當前數據(如過濾器算子),或對外輸出,這些第一類算子既沒有自身的邏輯狀態(tài),也不會對數據添加邏輯狀態(tài),不會影響其他算子對實時數據流的繼續(xù)處理。

      有邏輯狀態(tài)的第二類算子在處理實時數據流時,會在每條數據上增加邏輯狀態(tài)標識,并可能由一條數據輸入產生多條數據輸出,并且第二類算子收到帶有邏輯狀態(tài)標識的數據時,會根據該邏輯狀態(tài)標識的不同而進行不同處理。因此,在進行流計算處理的過程中,需要判斷當前算子是否屬于第二類算子,當該當前算子屬于第二類算子時,則會為處理結果添加邏輯狀態(tài)標識。本申請實施例通過這種方式解決了分布式系統中一條數據輸入導致多條數據變化的實時更新問題。下面通過舉例對第二類算子的進行流計算處理的過程進行說明。

      如圖5所示,在一個兩級分組的流運算DAG中,第一級按照A列哈希(hash),第二級按照A列的統計(count)值哈希。按照分布式的原理,這兩級分組算子必須在兩級第二節(jié)點上分別按照A列和A列的統計值分別進行哈希。在這個例子中,兩級第二節(jié)點通過添加“更新(update)”標識來完成流計算處理。由于流計算的特點,數據是沒有邊界且無窮無盡的,不同 于離線sql,離線sql在第一級處理完成后,才進行第二級的處理。為了保證流計算處理的實時性,本申請實施例在每一級第二節(jié)點處理后,都盡快的交給下一級第二節(jié)點去處理,導致一條數據的進入可能產生多條數據的變化。在圖5中,收到A列值為a的記錄(record),上一級第二節(jié)點的分組算子增加一條“A:a,Count(A):1”數據,該變化產生一條有“update:count(A)Null->1”邏輯狀態(tài)標識的記錄發(fā)送給下一級第二節(jié)點的分組算子;則下一級第二節(jié)點的分組算子收到后增加Count(A):1的一條數據。當上一級第二節(jié)點的分組算子再次收到A列值為a的記錄時,上一級第二節(jié)點的分組算子的數據變?yōu)锳:a,Count(A):2;該變化產生一條有“update:count(A)1->2”邏輯狀態(tài)標識的數據發(fā)送給下一級第二節(jié)點的分組算子,則下一級第二節(jié)點的分組算子收到后解析該邏輯狀態(tài)標識并將數據Count(A):1更新為Count(A):2。

      上述過程用于對采用添加更新標識的流計算處理過程進行說明,并不構成對本申請保護范圍的限制。在實際情況中,上一級第二節(jié)點向下一級第二節(jié)點可能同時產生多條數據進行更新,互相之間還存在其他邏輯關系,為了使上一級第二節(jié)點和下一級第二節(jié)點之間的框架設計和代碼邏輯更加清晰且便于分析,對于上述例子還可以進一步采用添加“附加/刪除(append/delete)”標識的方法來進行處理。如圖6所示,收到A列值為a的記錄時,上一級第二節(jié)點的分組算子增加一條“A:a,Count(A):1”數據,上一級第二節(jié)點的分組算子為該變化添加“附加”標識并發(fā)送至下一級第二節(jié)點,則下一級第二節(jié)點的分組算子收到后增加Count(A):1的一條數據。當上一級第二節(jié)點的分組算子再次收到A列值為a的記錄時,上一級第二節(jié)點的分組算子的數據變?yōu)锳:a,Count(A):2;上一級第二節(jié)點的分組算子產生一條變化前的數據“A:a,Count(A):1”并添加“刪除”標識,下一級第二節(jié)點的分組算子接收到這條數據后,將把Count(A):1的數據刪除;然后,上一級第二節(jié)點的分組算子產生一條變化后的數據“A:a,Count(A):2”并添加“附加”標識,下一級第二節(jié)點的分組算子接收到這條數據后,增加Count(A):2的一條數據,由此完成這次實時數據流的計算處理過程。同理可通過上述過程完成多級分組運算處理,或者其他第二類算子(如限定返回數算子、連接算子)的實時數據流計算處理。

      在步驟S22中,將處理結果發(fā)送至下一級第二節(jié)點或外部的存儲裝置。

      如上例所述,第二節(jié)點在得到處理結果后,會將處理結果發(fā)送至下一級第二節(jié)點繼續(xù)處理。或者,最低級別的第二節(jié)點將處理結果發(fā)送至外部的存儲裝置,例如內存、硬盤等存儲裝置。

      在一個實施例中,為了避免由于某個第二節(jié)點出現故障而導致整個流計算處理系統無法運行,需要建立針對第二節(jié)點出現故障時的處理機制。步驟S21根據部分DAG中各個算子之間的邏輯關系,對實時數據流進行流計算處理,得到處理結果進一步包括以下步驟:

      在步驟S210中,每隔預設時長停止處理接收到的數據,將正在處理的數據處理完成后,對部分DAG中有邏輯狀態(tài)的第二類算子生成快照。

      第二節(jié)點一直保持接收實時數據流,每隔預設時長停止對接收到的實時數據流的處理,而只是繼續(xù)處理那些正在處理中但還沒有處理完成的數據。當這些正在處理中但還沒有處理完成的數據已處理完畢時,第二節(jié)點對分配到的部分DAG中有邏輯狀態(tài)的第二類算子生成快照(snapshot),該快照用于記錄這一時刻該第二節(jié)點內所有第二類算子中各條數據的邏輯狀態(tài)。

      在步驟S211中,將快照的內存鏡像文件記錄為一個檢查點。

      第二節(jié)點將該快照的鏡像文件(例如dump文件)保存到內存,將該鏡像文件記錄為一個檢查點(check point),用于當第二節(jié)點出現故障時將第二類算子中的各條數據恢復到該檢查點所在時刻的邏輯狀態(tài)。該檢查點被建立之后,第二節(jié)點繼續(xù)開始處理接收到的實時數據流。

      當第二節(jié)點出現故障時,可通過建立的檢查點使各個第二類算子恢復到以前的狀態(tài)。通過以下步驟第二節(jié)點在發(fā)生故障時可自動恢復正確的處理過程,如圖7所示,該方法包括以下步驟。

      在步驟S301中,根據從第一節(jié)點分配到的部分DAG,從客戶端或上一級第二節(jié)點接收到實時數據流。

      在步驟S302中,將接收到的實時數據流寫入到重做日志。

      重做日志(redo log)用于記錄第二節(jié)點接收到的每條實時數據,包括數據內容和接收到該條數據時的時間信息。

      在步驟S303中,每隔預設時長停止處理接收到的數據,將正在處理的數據處理完成后,對部分DAG中有邏輯狀態(tài)的第二類算子生成快照。

      在步驟S304中,將快照的內存鏡像文件記錄為一個檢查點。

      在步驟S305中,當發(fā)生故障時,讀取距離當前時間最近的檢查點。

      第二節(jié)點發(fā)生故障時,從內存中讀取距離當前時間最近的檢查點,即該檢查點的內存鏡像文件。

      在步驟S306中,根據檢查點的內存鏡像文件恢復第二類算子的邏輯狀態(tài)。

      讀取的內存鏡像文件包括該第二節(jié)點各個第二類算子的快照,即每條數據在那一時刻的邏輯狀態(tài),因此根據該內存鏡像文件將第二類算子的數據恢復到該檢查點的邏輯狀態(tài)。

      在步驟S307中,從重做日志中讀取檢查點后接收到的數據并進行處理。

      第二節(jié)點確定該檢查點所在的時刻,從重做日志中讀取該檢查點所在時刻之后接收到的數據,并由內部算子逐條進行處理。

      在步驟S308中,當重做日志中的數據處理完成時,繼續(xù)對接收到的實時數據流進行流計算處理。

      第二節(jié)點將重做日志中檢查點所在的時刻之后的數據全部處理完成時,能夠使第二節(jié)點各個算子的數據恢復到發(fā)生故障時的邏輯狀態(tài)。此時,第二節(jié)點便可繼續(xù)對接收到的實時數據流進行流計算處理,從而實現了第二節(jié)點在發(fā)生故障時通過檢查點和重做日志而自動恢復的功能。

      在步驟S309中,將處理結果發(fā)送至下一級第二節(jié)點或外部的存儲裝置。

      通過上述方法用戶無需自己實現流計算的處理邏輯,并且第二節(jié)點發(fā)生故障時可自行恢復全部數據并繼續(xù)對實時數據流進行流計算處理。

      圖8是本申請實施例提供的一種分布式流計算裝置,包括:

      接收模塊40,用于根據從第一節(jié)點分配到的部分DAG,從客戶端或上一級第二節(jié)點接收到實時數據流;

      第一處理模塊41,用于根據部分DAG中各個算子之間的邏輯關系,對 實時數據流進行流計算處理,得到處理結果;

      發(fā)送模塊42,用于將處理結果發(fā)送至下一級第二節(jié)點或外部的存儲裝置。

      該第一處理模塊41包括:

      判斷子模塊,用于判斷當前算子是否屬于第二類算子,

      處理子模塊,用于當當前算子屬于第二類算子時,為處理結果添加邏輯狀態(tài)標識。

      該處理子模塊包括:

      第一發(fā)送單元,用于為處理結果添加更新標識并發(fā)送至下一級第二節(jié)點;或者,

      第二發(fā)送單元,用于為處理結果添加附加/刪除標識并發(fā)送至下一級第二節(jié)點。

      該第二發(fā)送單元包括:

      第一發(fā)送子單元,用于當根據處理結果生成第一數據時,發(fā)送帶有附加標識的第一數據至下一級第二節(jié)點,使下一級第二節(jié)點添加第一數據;

      第二發(fā)送子單元,用于當根據處理結果第一數據變?yōu)榈诙祿r,發(fā)送帶有刪除標識的第一數據至下一級第二節(jié)點,使下一級第二節(jié)點刪除第一數據;再發(fā)送帶有附加標識的第二數據至下一級第二節(jié)點,使下一級節(jié)點添加第二數據。

      在一個實施例中,該第一處理模塊41還包括:

      生成子模塊,用于每隔預設時長停止處理接收到的數據,將正在處理的數據處理完后,對部分DAG中有邏輯狀態(tài)的第二類算子生成快照;

      鏡像子模塊,用于將快照的內存鏡像文件記錄為一個檢查點。

      所述裝置還包括:

      日志模塊,用于將接收到的實時數據流寫入到重做日志;

      讀取模塊,用于當發(fā)生故障時,讀取距離當前時間最近的檢查點;

      恢復模塊,用于根據檢查點的內存鏡像文件恢復第二類算子的邏輯狀 態(tài);

      第二處理模塊,用于從重做日志中讀取檢查點后接收到的數據并進行處理;

      第三處理模塊,用于當重做日志中的數據處理完成時,繼續(xù)對接收到的實時數據流進行流計算處理。

      下面通過應用實例對本申請實施例的技術方案做進一步說明。

      對于互聯網數據統計分析服務提供商而言,需要為各類網站和企事業(yè)單位提供專業(yè)、權威、獨立的網站數據統計與分析服務。通常,大型互聯網數據統計分析服務提供商的服務對象在百萬級以上,每天處理的統計數據數量在十億條以上。網絡用戶的瀏覽行為是實時發(fā)生的,因此對網站數據的統計屬于實時的流計算處理。

      對于網站數據的統計通常包括:頁面瀏覽次數(Page View,PV),獨立訪客(Unique Visitor,UV),IP地址,訪問時長和訪問次數(訪客從進入網站到離開網站的一系列活動記錄為一次訪問,一次訪問可能產生多次頁面瀏覽)等基礎統計數據;以及當日回頭訪客、新獨立訪客、訪客平均訪問頻度,平均訪問時長,平均訪問深度和人均瀏覽頁數等高級統計數據。

      其中,當日回頭訪客,為一天之內多次訪問網站的獨立訪客,需要根據統計到的獨立訪客和訪問次數來進一步確定。新獨立訪客,即每天產生的新訪客,需要根據實時統計IP地址與歷史記錄的IP地址進行比較確定新出現的IP地址,實時統計到的在新出現的IP地址下的獨立訪客即為新獨立訪客。訪客平均訪問頻度,為平均每個獨立訪客一天內訪問網站的次數,訪客平均訪問頻度=訪問次數/獨立訪客。平均訪問時長,平均每次訪問在網站上的停留時間,平均訪問時長=訪問時長/訪問次數。平均訪問深度,平均每次訪問產生的頁面瀏覽次數,平均訪問深度=頁面瀏覽次數/訪問次數。人均瀏覽頁數,平均每個獨立訪客的頁面瀏覽次數,人均瀏覽頁數=頁面瀏覽次數/獨立訪客。

      可見,上述高級統計數據需要根據實時的基礎統計數據做進一步計算處理而得出,因此針對每個網站的數據統計都可適用本申請實施例的分布式流 計算系統??梢詫⑨槍ι鲜鼋y計數據的統計和處理邏輯由第一節(jié)點轉化為有向無環(huán)圖。將有向無環(huán)圖分成多個部分,并分配到多級第二節(jié)點。由較低級別的第二節(jié)點完成上述基礎統計數據的統計工作,統計頁面瀏覽次數,獨立訪客、IP地址、訪問次數等等,由較高級別的第二節(jié)點根據實時統計的基礎統計數據完成上述高級統計數據的實時計算工作,計算出當日回頭訪客、新獨立訪客、訪客平均訪問頻度,平均訪問時長,平均訪問深度和人均瀏覽頁數等數據。

      例如一個第一級第二節(jié)點統計獨立訪客的頁面瀏覽次數,其內部利用一個第一級第二類算子實時統計進入網站的獨立訪客,利用一個第二級第二類算子來統計每個獨立訪客針對該網站的頁面瀏覽次數,并輸出至一個第二級第二節(jié)點來計算與每個獨立訪客的頁面瀏覽次數相關的統計數據,例如計算該網站的頁面瀏覽總次數的一個第二級第二節(jié)點,即對每個獨立訪客的頁面瀏覽次數求和。該第一級第二節(jié)點同時將統計到的獨立訪客數輸出到另一個第二級第二節(jié)點,以用于計算與獨立訪客相關的統計數據,例如用于計算人均訪問頁數、平均訪問頻度的第二級第二節(jié)點。其中的第二類算子為實時統計到的獨立訪客和每個獨立訪客的頁面瀏覽次數添加狀態(tài)標識(“更新”標識或者“插入/刪除”標識),以不斷實時更新獨立訪客、每個獨立訪客的頁面瀏覽次數等數據以及下一級第二節(jié)點實時計算出的頁面瀏覽總次數、人均訪問頁數、平均訪問頻度等數據。第一級第二節(jié)點和第二級第二節(jié)點將接收到的數據寫入重做日志,以備份接收到的數據。第一級第二節(jié)點和第二級第二節(jié)點每隔預設時長停止處理接收到的數據,將正在處理的數據統計和計算完畢之后,對各自內部的第二類算子生成快照??煺瞻總€第二類算子的當前統計數值和該數值的邏輯狀態(tài)標識。將該快照的內存鏡像文件作為一個檢查點,以備出現故障時進行數據恢復。當其中的第一級第二節(jié)點在獨立訪客為230時出現故障時,讀取距離當前時間最近的檢查點,相應的第二類算子恢復到10分鐘之前獨立訪客為220以及當時每個獨立訪客的頁面瀏覽次數。然后從重做日志中讀取這10分鐘之內接收到的數據,由第二類算子根據重做日志中的數據重新完成這10分鐘之內的數據統計,統計到獨立訪客為230以及每個獨立訪客的頁面瀏覽次數后,繼續(xù)對獨立訪客進行實時數據統計。上述網站數據的分布式統計系統的每個第二節(jié)點都能夠在發(fā)生故障 時通過以上方式快速自行恢復,從而為用戶提供可靠的實時統計數據。

      上述網站數據的分布式統計系統的應用實例用于對本申請實施例的示例性說明,并不構成對本申請保護范圍的限制,本申請實施例提供的分布式流計算系統和方法同樣適用于其他任何數據實時統計系統。

      在內容分發(fā)網絡(Content Delivery Network,CDN)將源站內容分發(fā)至全國所有的節(jié)點,縮短用戶查看對象的延遲,提高用戶訪問網站的響應速度與網站的可用性,解決網絡帶寬小、用戶訪問量大、網點分布不均等問題,將網站內容分發(fā)至全網,跨運營商、跨地域加速站點。

      將本申請實施例提供的分布式流計算系統應用于CDN時,將用戶對網站訪問來源做為分布式流計算系統的輸入,以檢測針對該網站的訪問是否出現異常。通過統計獨立訪客數量、IP地址、每個獨立訪客的頁面瀏覽次數,進一步計算出訪客平均訪問頻度、每個IP地址的訪問頻度和頁面瀏覽次數等數據,對每個獨立訪客的頁面瀏覽次數以及訪客平均訪問頻度進行排序,以預測是否存在針對該網站的攻擊,例如分布式拒絕服務(Distributed Denial of Service,DDoS)攻擊。分布式流計算系統的第一節(jié)點將上述邏輯轉化為有向無環(huán)圖,將有向無環(huán)圖分為多個部分并分配到多個第二節(jié)點中。利用第一級第二節(jié)點統計獨立訪客數量、IP地址、每個獨立訪客的頁面瀏覽次數等數據,并利用第二級第二節(jié)點計算出每個獨立訪客的頁面瀏覽次數、訪客平均訪問頻度、每個IP地址的訪問頻度和頁面瀏覽次數等數據并進行排序。在短時間內訪問頻度或瀏覽次數的過高訪客或IP,有可能正在對網站發(fā)動攻擊,例如,有幾個IP地址在單位時間內同時發(fā)起的訪問請求或頁面瀏覽請求已超過網站服務器的吞吐量,短時間內幾乎占用了網站服務器的全部資源,使其他用戶的正常訪問無法完成,則說明這幾個IP地址的計算機有可能正在對該網站服務器發(fā)起攻擊。此時分布式流計算系統將異常結果通知CDN,在一定時間之內阻止這幾個IP地址對網站服務器的訪問,從而防止網絡用戶針對網站服務器的攻擊,維持網站服務器的正常運行。分布式流計算系統中的各個第二節(jié)點也同樣能夠在出現故障時自行恢復,從而不影響對用戶訪問數據的實時統計。本申請實施例提供的分布式流計算系統還可以在CDN中統計網站的當前的內容分發(fā)情況,根據獨立訪客和IP地址以確認來 自不同地域、不同運營商的用戶是否能夠正常訪問該網站。

      在一個典型的配置中,計算設備包括一個或多個處理器(CPU)、輸入/輸出接口、網絡接口和內存。

      內存可能包括計算機可讀介質中的非永久性存儲器,隨機存取存儲器(RAM)和/或非易失性內存等形式,如只讀存儲器(ROM)或閃存(flash RAM)。內存是計算機可讀介質的示例。

      計算機可讀介質包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術來實現信息存儲。信息可以是計算機可讀指令、數據結構、程序的模塊或其他數據。計算機的存儲介質的例子包括,但不限于相變內存(PRAM)、靜態(tài)隨機存取存儲器(SRAM)、動態(tài)隨機存取存儲器(DRAM)、其他類型的隨機存取存儲器(RAM)、只讀存儲器(ROM)、電可擦除可編程只讀存儲器(EEPROM)、快閃記憶體或其他內存技術、只讀光盤只讀存儲器(CD-ROM)、數字多功能光盤(DVD)或其他光學存儲、磁盒式磁帶,磁帶磁磁盤存儲或其他磁性存儲設備或任何其他非傳輸介質,可用于存儲可以被計算設備訪問的信息。按照本文中的界定,計算機可讀介質不包括非暫存電腦可讀媒體(transitory media),如調制的數據信號和載波。

      如在說明書及權利要求當中使用了某些詞匯來指稱特定組件。本領域技術人員應可理解,硬件制造商可能會用不同名詞來稱呼同一個組件。本說明書及權利要求并不以名稱的差異來作為區(qū)分組件的方式,而是以組件在功能上的差異來作為區(qū)分的準則。如在通篇說明書及權利要求當中所提及的“包含”為一開放式用語,故應解釋成“包含但不限定于”?!按笾隆笔侵冈诳山邮盏恼`差范圍內,本領域技術人員能夠在一定誤差范圍內解決所述技術問題,基本達到所述技術效果。此外,“耦接”一詞在此包含任何直接及間接的電性耦接手段。因此,若文中描述一第一裝置耦接于一第二裝置,則代表所述第一裝置可直接電性耦接于所述第二裝置,或通過其他裝置或耦接手段間接地電性耦接至所述第二裝置。說明書后續(xù)描述為實施本發(fā)明的較佳實施方式,然所述描述乃以說明本發(fā)明的一般原則為目的,并非用以限定本發(fā)明的范圍。本發(fā)明的保護范圍當視所附權利要求所界定者為準。

      還需要說明的是,術語“包括”、“包含”或者其任何其他變體意在涵蓋非 排他性的包含,從而使得包括一系列要素的商品或者系統不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種商品或者系統所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的商品或者系統中還存在另外的相同要素。

      上述說明示出并描述了本發(fā)明的若干優(yōu)選實施例,但如前所述,應當理解本發(fā)明并非局限于本文所披露的形式,不應看作是對其他實施例的排除,而可用于各種其他組合、修改和環(huán)境,并能夠在本文所述發(fā)明構想范圍內,通過上述教導或相關領域的技術或知識進行改動。而本領域人員所進行的改動和變化不脫離本發(fā)明的精神和范圍,則都應在本發(fā)明所附權利要求的保護范圍內。

      當前第1頁1 2 3 
      網友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1