本發(fā)明涉及流式計算技術領域,尤其涉及一種用于流式計算系統(tǒng)中的故障處理技術。
背景技術:
目前而言,常見流式計算系統(tǒng)提供計算結果到傳輸系統(tǒng)三種可選語義:
1)至多一次(at most once):保證計算結果在計算過程中遇到節(jié)點故障后,計算恢復前后結算結果至多發(fā)送到傳輸系統(tǒng)一次。
2)至少一次(at least once):保證計算結果在計算過程中遇到節(jié)點故障后,計算恢復前后結算結果至少發(fā)送到傳輸系統(tǒng)一次。例如Strom。
3)受限的嚴格一次(exactly once):依賴計算結果發(fā)布的存儲支持update冪等功能,且update依據(jù)的key一般由業(yè)務方指定,實現(xiàn)計算結果直接記入存儲,不再支持結果繼續(xù)進行流式計算。例如Flink使用Cassandra作為存儲。
至多一次(at most once)或者至少一次(at least once)只是嚴格一次(exactly once)某一個方面的實現(xiàn)保證。用戶使用中,只能選擇不重或者不丟來折中業(yè)務計算需求。受限的嚴格一次(exactly once)語義支持計算結果發(fā)布update冪等存儲,但是不支持后續(xù)計算結果繼續(xù)流式計算分析等復雜app級聯(lián)等業(yè)務場景。
而在很多領域,例如金融、計費、反作弊、廣告等,業(yè)務場景天然需求數(shù)據(jù)計算至傳輸都保證不重不丟,以滿足精準的數(shù)據(jù)完整性需求,同時有復雜的業(yè)務計算場景,計算結果簡單存入update冪等存儲不能滿足需求。為此,用戶需要在業(yè)務層增加額外復雜的數(shù)據(jù)重放及校驗去重邏輯來保證計算數(shù)據(jù)結果的不重不丟,但是此方案對用戶要求很高,極易出現(xiàn)數(shù)據(jù)不一致等問題,增大了用戶的開發(fā)成本。而且,此種方案用戶間無法復用,無法形成流式計算框架層通用邏輯。
技術實現(xiàn)要素:
本發(fā)明的目的是提供一種用于流式計算系統(tǒng)中的故障處理的方法、裝置、計算節(jié)點和計算機程序產品。
根據(jù)本發(fā)明的一個方面,提供了一種用于流式計算系統(tǒng)中的故障處理方法,其中,在一個計算節(jié)點,該方法包括以下步驟:
-記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序;
-將所述各原始數(shù)據(jù)按照預定的周期進行持久化操作;
-當發(fā)生故障而重啟后,按照所記錄的到達順序從經持久化操作的原始數(shù)據(jù)和/或所述上游計算節(jié)點恢復內存中的待計算數(shù)據(jù),并將所恢復的待計算數(shù)據(jù)按照其之前的到達順序進行重放和計算;
-將每條計算完畢的結果數(shù)據(jù)按照故障前上一持久化操作周期的結果數(shù)據(jù)的偏移量繼續(xù)編碼并發(fā)送至下一節(jié)點。
根據(jù)本發(fā)明的一個方面,還提供了一種用于流式計算系統(tǒng)中的故障處理裝置,其中,故障處理裝置被布置于所述流式計算系統(tǒng)中的一個計算節(jié)點中,該故障處理裝置包括:
用于記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序的裝置;
用于將所述各原始數(shù)據(jù)按照預定的周期進行持久化操作的裝置;
用于當發(fā)生故障而重啟后,按照所記錄的到達順序從經持久化操作的原始數(shù)據(jù)和/或所述上游計算節(jié)點恢復內存中的待計算數(shù)據(jù),并將所恢復的待計算數(shù)據(jù)按照其之前的到達順序進行重放和計算的裝置;
用于將每條計算完畢的結果數(shù)據(jù)按照故障前上一持久化操作周期的結果數(shù)據(jù)的偏移量繼續(xù)編碼并發(fā)送至下一節(jié)點的裝置。
根據(jù)本發(fā)明的一個方面,還提供了一種流式計算系統(tǒng)中的計算節(jié)點,其中,該計算節(jié)點包括上述如根據(jù)本發(fā)明的一個方面所提供的一種用于流式計算系統(tǒng)中的故障處理裝置。
根據(jù)本發(fā)明的一個方面,還提供了一種流式計算系統(tǒng)中的計算節(jié)點,其中,該計算節(jié)點包括存儲器和處理器,其中,所述存儲器中存儲有計算機程序指令,當所述處理器運行所述計算機程序指令時,上述如根據(jù)本發(fā)明的一個方面所提供的一種用于流式計算系統(tǒng)中的故障處理方法被執(zhí)行。
根據(jù)本發(fā)明的一個方面,還提供了一種計算機程序產品,所述計算機程序產品可以在流式計算系統(tǒng)中的計算節(jié)點中運行,當所述計算機程序產品被運行時,上述如根據(jù)本發(fā)明的一個方面所提供的一種用于流式計算系統(tǒng)中的故障處理方法被執(zhí)行。
與現(xiàn)有技術相比,本發(fā)明提供了一種在框架層實現(xiàn)的流式計算輸出結果不重不丟的容錯機制,通過流式計算系統(tǒng)的定期checkpoint機制、下游節(jié)點按發(fā)布偏移量去重以及“數(shù)據(jù)有序重放”機制,可應對各種軟硬件故障,保證輸出結果的高準確性。本發(fā)明可廣泛應用于對流式計算有嚴格不重不丟語義的領域,例如廣告、金融、反作弊等。
在流式計算框架完成的實現(xiàn),對用戶透明,即用戶通過使用本發(fā)明,無需額外開發(fā)或操作即可保證計算結果的高準確性。
本發(fā)明無需用戶在業(yè)務層代碼增加額外復雜數(shù)據(jù)重放或校驗邏輯即可保證計算數(shù)據(jù)結果的exactly once語義,降低了用戶程序開發(fā)的復雜度,提高數(shù)據(jù)的準確性,拓寬了流式計算的應用場景。
附圖說明
通過閱讀參照以下附圖所作的對非限制性實施例所作的詳細描述,本發(fā)明的其它特征、目的和優(yōu)點將會變得更明顯:
圖1示出根據(jù)本發(fā)明一個實施例的一種用于流式計算系統(tǒng)的故障處理方法的流程圖;
圖2示出根據(jù)本發(fā)明一個實施例的一種用于流式計算系統(tǒng)的故障處理裝置的示意圖。
附圖中相同或相似的附圖標記代表相同或相似的部件。
具體實施方式
在更加詳細地討論示例性實施例之前應當提到的是,一些示例性實施例被描述成作為流程圖描繪的處理或方法。雖然流程圖將各項操作描述成順序的處理,但是其中的許多操作可以被并行地、并發(fā)地或者同時實施。此外,各項操作的順序可以被重新安排。當其操作完成時所述處理可以被終止,但是還可以具有未包括在附圖中的附加步驟。所述處理可以對應于方法、函數(shù)、規(guī)程、子例程、子程序等等。
在上下文中所稱“計算機設備”,也稱為“電腦”,是指可以通過運行預定程序或指令來執(zhí)行數(shù)值計算和/或邏輯計算等預定處理過程的智能電子設備,其可以包括處理器與存儲器,由處理器執(zhí)行在存儲器中預存的程序指令來執(zhí)行預定處理過程,或是由ASIC、FPGA、DSP等硬件執(zhí)行預定處理過程,或是由上述二者組合來實現(xiàn)。計算機設備包括但不限于服務器、個人電腦(PC)、筆記本電腦、平板電腦、智能手機等。
所述計算機設備例如包括用戶設備與網絡設備。其中,所述用戶設備包括但不限于個人電腦(PC)、筆記本電腦、移動終端等,所述移動終端包括但不限于智能手機、PDA等;所述網絡設備包括但不限于單個網絡服務器、多個網絡服務器組成的服務器組或基于云計算(Cloud Computing)的由大量計算機或網絡服務器構成的云,其中,云計算是分布式計算的一種,由一群松散耦合的計算機集組成的一個超級虛擬計算機。其中,所述計算機設備可單獨運行來實現(xiàn)本發(fā)明,也可接入網絡并通過與網絡中的其他計算機設備的交互操作來實現(xiàn)本發(fā)明。其中,所述計算機設備所處的網絡包括但不限于互聯(lián)網、廣域網、城域網、局域網、VPN網絡等。
需要說明的是,所述用戶設備、網絡設備和網絡等僅為舉例,其他現(xiàn)有的或今后可能出現(xiàn)的計算機設備或網絡如可適用于本發(fā)明,也應包含在本發(fā)明保護范圍以內,并以引用方式包含于此。
本文后面所討論的方法(其中一些通過流程圖示出)可以通過硬件、軟件、固件、中間件、微代碼、硬件描述語言或者其任意組合來實施。當用軟件、固件、中間件或微代碼來實施時,用以實施必要任務的程序代碼或代碼段可以被存儲在機器或計算機可讀介質(比如存儲介質)中。(一個或多個)處理器可以實施必要的任務。
這里所公開的具體結構和功能細節(jié)僅僅是代表性的,并且是用于描述本發(fā)明的示例性實施例的目的。但是本發(fā)明可以通過許多替換形式來具體實現(xiàn),并且不應當被解釋成僅僅受限于這里所闡述的實施例。
應當理解的是,雖然在這里可能使用了術語“第一”、“第二”等等來描述各個單元,但是這些單元不應當受這些術語限制。使用這些術語僅僅是為了將一個單元與另一個單元進行區(qū)分。舉例來說,在不背離示例性實施例的范圍的情況下,第一單元可以被稱為第二單元,并且類似地第二單元可以被稱為第一單元。這里所使用的術語“和/或”包括其中一個或更多所列出的相關聯(lián)項目的任意和所有組合。
應當理解的是,當一個單元被稱為“連接”或“耦合”到另一單元時,其可以直接連接或耦合到所述另一單元,或者可以存在中間單元。與此相對,當一個單元被稱為“直接連接”或“直接耦合”到另一單元時,則不存在中間單元。應當按照類似的方式來解釋被用于描述單元之間的關系的其他詞語(例如“處于...之間”相比于“直接處于...之間”,“與...鄰近”相比于“與...直接鄰近”等等)。
這里所使用的術語僅僅是為了描述具體實施例而不意圖限制示例性實施例。除非上下文明確地另有所指,否則這里所使用的單數(shù)形式“一個”、“一項”還意圖包括復數(shù)。還應當理解的是,這里所使用的術語“包括”和/或“包含”規(guī)定所陳述的特征、整數(shù)、步驟、操作、單元和/或組件的存在,而不排除存在或添加一個或更多其他特征、整數(shù)、步驟、操作、單元、組件和/或其組合。
還應當提到的是,在一些替換實現(xiàn)方式中,所提到的功能/動作可以按照不同于附圖中標示的順序發(fā)生。舉例來說,取決于所涉及的功能/動作,相繼示出的兩幅圖實際上可以基本上同時執(zhí)行或者有時可以按照相反的順序來執(zhí)行。
本發(fā)明適用于流式計算系統(tǒng)。流式計算系統(tǒng)是一種分布式計算系統(tǒng),其中包括多級計算節(jié)點,每一級也可以有多個計算節(jié)點。每個計算節(jié)點按照其所分配的計算任務對來自上游節(jié)點的原始數(shù)據(jù)進行計算,并將計算所獲得的結果數(shù)據(jù)發(fā)送至下游節(jié)點。
典型地,流式計算系統(tǒng)向下游傳輸系統(tǒng)輸出結果數(shù)據(jù)。因此,對于流式計算系統(tǒng)中的最后一級計算節(jié)點而言,其下游節(jié)點即為傳輸系統(tǒng)。
具體地,本發(fā)明主要通過流式計算系統(tǒng)的定期checkpoint機制、下游節(jié)點按結果數(shù)據(jù)的發(fā)布偏移量去重以及對恢復數(shù)據(jù)的“數(shù)據(jù)有序重放”機制,提供了一種在流式計算中數(shù)據(jù)計算結果高準確性保證。根據(jù)本發(fā)明的方案,用戶可保證數(shù)據(jù)結果的exactly once語義,不再需要在業(yè)務層增加額外復雜數(shù)據(jù)重放或校驗邏輯來保證計算數(shù)據(jù)結果的不重不丟。
下面結合附圖對本發(fā)明作進一步詳細描述。
圖1示出根據(jù)本發(fā)明的一個實施例,其中具體示出一種用于流式計算系統(tǒng)的故障處理方法的流程圖。
該故障處理方法可以用于流式計算系統(tǒng)中的任一個計算節(jié)點。典型地,該故障處理方法可以用于流式計算系統(tǒng)中的最后一級計算節(jié)點。
如圖1所示,在步驟S1中,計算節(jié)點記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序;在步驟S2中,計算節(jié)點將所接收的各原始數(shù)據(jù)按照預定的周期進行持久化操作;在步驟S3中,當發(fā)生故障而重啟后,計算節(jié)點按照所記錄的到達順序從經持久化操作的原始數(shù)據(jù)和/或所述上游計算節(jié)點恢復內存中的待計算數(shù)據(jù),并將所恢復的待計算數(shù)據(jù)按照其之前的到達順序進行重放和計算;在步驟S4中,計算節(jié)點將每條計算完畢的結果數(shù)據(jù)按照故障前上一持久化操作周期的結果數(shù)據(jù)的偏移量繼續(xù)編碼并發(fā)送至下一節(jié)點。
具體地,在步驟S1中,計算節(jié)點記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序。
在此,本發(fā)明為了實現(xiàn)“嚴格一次(exactly once)”的語義,需要計算節(jié)點記錄每條原始數(shù)據(jù)的到達順序,以當該計算節(jié)點發(fā)生故障而重啟后,可以按照每條原始數(shù)據(jù)的到達順序來恢復和嚴格重放(replay)。
據(jù)此,本發(fā)明為計算節(jié)點定義了一項新的功能,即:記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序。
并且,為了在故障恢復時,計算節(jié)點能夠獲得各原始數(shù)據(jù)的到達順序,計算節(jié)點不僅在本地記錄上游計算節(jié)點的各原始數(shù)據(jù)的到達順序,并在從上游獲取到原始數(shù)據(jù)后即同步地將原始數(shù)據(jù)的到達順序記錄至外部存儲系統(tǒng)中,如存入checkpoint機制中的外部分布式存儲系統(tǒng)HBase,以避免部分順序數(shù)據(jù)缺失。
隨后,在步驟S2中,計算節(jié)點將所接收的各原始數(shù)據(jù)按照預定的周期進行持久化操作。
優(yōu)選地,計算節(jié)點對原始數(shù)據(jù)的持久化操作通過checkpoint機制來按照預定的周期執(zhí)行。
計算節(jié)點將所接收到的各原始數(shù)據(jù)定期checkpoint到外部的分布式存儲系統(tǒng),如HBase,從而實現(xiàn)對原始數(shù)據(jù)的持久化操作。
此外,由于計算節(jié)點的內存中也緩存有這些原始數(shù)據(jù),以用于實時計算,從而checkpoint僅作為故障恢復的保障,以當計算節(jié)點發(fā)生故障重啟后可以從checkpoint的原始數(shù)據(jù)中恢復相關原始數(shù)據(jù)。這在保證節(jié)點故障前后內存中待計算數(shù)據(jù)不會丟失的同時,也顯著減少了對HBase的讀操作,提高了系統(tǒng)的處理效率。
接著,在步驟S3中,當發(fā)生故障而重啟后,計算節(jié)點按照所記錄的到達順序從經持久化操作的原始數(shù)據(jù)和/或所述上游計算節(jié)點恢復內存中的待計算數(shù)據(jù),并將所恢復的待計算數(shù)據(jù)按照其之前的到達順序進行重放和計算。
在此,本發(fā)明為了實現(xiàn)結果數(shù)據(jù)的“不重不丟”,當計算節(jié)點發(fā)生故障而重啟后,該故障節(jié)點例如從checkpoint點恢復上一周期的原始數(shù)據(jù),并將所恢復的原始數(shù)據(jù)的到達順序與故障節(jié)點在各原始數(shù)據(jù)到達時所記錄的順序進行比較,以確定是否尚有丟失數(shù)據(jù):如果是,則確定丟失數(shù)據(jù)的到達順序及其來源的上游計算節(jié)點,以從這些上游計算節(jié)點重新請求這些丟失數(shù)據(jù);如果否,則可從checkpoint恢復之前內存中的所有計算數(shù)據(jù)。在另一種更極端的情形下,從checkpoint恢復的原始數(shù)據(jù)中可能并無任何故障前的內存計算數(shù)據(jù)。也即,在上一次checkpoint周期之后,計算節(jié)點即發(fā)生故障,內存中的所有計算數(shù)據(jù)均未做checkpoint。對于此種情形,內存中的所有丟失數(shù)據(jù)同樣可以通過向來源的上游計算節(jié)點重新請求而獲得。根據(jù)前述的這些方式,故障節(jié)點可以恢復故障前內存中的所有計算數(shù)據(jù),以對這些數(shù)據(jù)按照之前到達該故障節(jié)點的順序進行嚴格重放和計算,否則會帶來計算數(shù)據(jù)的錯亂引發(fā)數(shù)據(jù)的丟失或重復。
由于當故障發(fā)生時,計算節(jié)點內存中的原始數(shù)據(jù)并非是全部未處理的,而是已處理了一部分,但仍有一部分未處理,為了保證數(shù)據(jù)處理的準確性,故障節(jié)點從checkpoint恢復上一周期的全部原始數(shù)據(jù),并從上游計算節(jié)點重新請求其他丟失數(shù)據(jù)(即尚未來得及做checkpoint的原始數(shù)據(jù)),進而對所恢復的這些待計算數(shù)據(jù)(包括從checkpoint恢復的原始數(shù)據(jù)和從上游計算節(jié)點重新請求的丟失數(shù)據(jù))按照其之前的到達順序進行嚴格重放和計算,以重新獲得相應的結果數(shù)據(jù)。并且,只有在這些故障恢復數(shù)據(jù)嚴格按照故障前順序重放和計算后,新數(shù)據(jù)才會到達,保證了故障數(shù)據(jù)有序重放需求。
隨后,在步驟S4中,計算節(jié)點將每條計算完畢的結果數(shù)據(jù)按照故障前上一持久化操作周期的結果數(shù)據(jù)的偏移量繼續(xù)編碼并發(fā)送至下一節(jié)點。
在此,本發(fā)明為了保證每條結果數(shù)據(jù)的全局唯一和編碼一致,會將計算節(jié)點重啟后重新計算的結果數(shù)據(jù)按照上一checkpoint周期的編碼偏移量進度信息,繼續(xù)編碼。因此,當發(fā)生故障而重啟后,計算節(jié)點可以從checkpoint點恢復上一周期的結果數(shù)據(jù)的偏移量進度信息。也即,計算節(jié)點不僅周期性地將所接收的原始數(shù)據(jù)checkpoint到HBase,還將相應周期的結果數(shù)據(jù)的偏移量進度信息也做checkpoint。
編碼過程中,結合數(shù)據(jù)嚴格重放功能,計算節(jié)點保證每條計算完畢的結果數(shù)據(jù)發(fā)送到下游節(jié)點時攜帶的偏移量編碼嚴格一致,即故障前后編碼冪等,保證下游節(jié)點的去重機制準確生效。
例如,計算節(jié)點根據(jù)故障前上一持久化操作周期(上一checkpoint周期)的結果數(shù)據(jù)的偏移量進度信息,確定重啟后第一條計算完畢的結果數(shù)據(jù)的編碼偏移量。
在此,當前計算節(jié)點的下一節(jié)點可以是當前計算節(jié)點的下級計算節(jié)點。如果當前計算節(jié)點是流式計算系統(tǒng)的最后一級計算節(jié)點,則將結果數(shù)據(jù)傳遞至外部傳輸系統(tǒng)。
當下一節(jié)點接收到結果數(shù)據(jù)后,其將所接收到的結果數(shù)據(jù)的編碼偏移量與其已接收到的結果數(shù)據(jù)的編碼偏移量進行比較,以對結果數(shù)據(jù)進行去重。
例如,傳輸系統(tǒng)使用偏移量去重機制,保證在上游計算節(jié)點故障重啟后,將上游計算節(jié)點發(fā)布數(shù)據(jù)中攜帶的偏移量信息與傳輸系統(tǒng)內部已接收到的數(shù)據(jù)的偏移量進行比較,完成重復數(shù)據(jù)的過濾去除功能,實現(xiàn)了計算結果發(fā)布至傳輸系統(tǒng)的不重特性。對重復數(shù)據(jù)的過濾去除功能,實現(xiàn)了計算結果發(fā)布至傳輸系統(tǒng)的不重特性。
圖2示出根據(jù)本發(fā)明的一個實施例,其中具體示出一種用于流式計算系統(tǒng)的故障處理裝置的示意圖。
該故障處理裝置可以布置于流式計算系統(tǒng)中的任一個計算節(jié)點。典型地,該故障處理裝置可以布置于流式計算系統(tǒng)中的最后一級計算節(jié)點。
如圖2所示,故障處理裝置20具體包括順序記錄裝置21、數(shù)據(jù)持久化裝置22、數(shù)據(jù)重放裝置23和數(shù)據(jù)編碼裝置24。
其中,順序記錄裝置21記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序;隨后,數(shù)據(jù)持久化裝置22將所接收的各原始數(shù)據(jù)按照預定的周期進行持久化操作;接著,當計算節(jié)點發(fā)生故障而重啟后,數(shù)據(jù)重放裝置23按照所記錄的到達順序從經持久化操作的原始數(shù)據(jù)和/或所述上游計算節(jié)點恢復內存中的待計算數(shù)據(jù),并將所恢復的待計算數(shù)據(jù)按照其之前的到達順序進行重放和計算;隨后,數(shù)據(jù)編碼裝置24將每條計算完畢的結果數(shù)據(jù)按照故障前上一持久化操作周期的結果數(shù)據(jù)的偏移量繼續(xù)編碼并發(fā)送至下一節(jié)點。
具體地,順序記錄裝置21記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序。
在此,本發(fā)明為了實現(xiàn)“嚴格一次(exactly once)”的語義,需要順序記錄裝置21記錄每條原始數(shù)據(jù)的到達順序,以當該計算節(jié)點發(fā)生故障而重啟后,可以按照每條原始數(shù)據(jù)的到達順序來恢復和嚴格重放(replay)。
據(jù)此,本發(fā)明為計算節(jié)點定義了一項新的功能,即:由順序記錄裝置21記錄來自上游計算節(jié)點的各原始數(shù)據(jù)的到達順序。
并且,為了在故障恢復時,計算節(jié)點能夠獲得各原始數(shù)據(jù)的到達順序,計算節(jié)點不僅在本地記錄上游計算節(jié)點的各原始數(shù)據(jù)的到達順序,并在從上游獲取到原始數(shù)據(jù)后即同步地將原始數(shù)據(jù)的到達順序記錄至外部存儲系統(tǒng)中,如存入checkpoint機制中的外部分布式存儲系統(tǒng)HBase,以避免部分順序數(shù)據(jù)缺失。
隨后,數(shù)據(jù)持久化裝置22將所接收的各原始數(shù)據(jù)按照預定的周期進行持久化操作。
優(yōu)選地,數(shù)據(jù)持久化裝置22對原始數(shù)據(jù)的持久化操作通過checkpoint機制來按照預定的周期執(zhí)行。
數(shù)據(jù)持久化裝置22將計算節(jié)點所接收到的各原始數(shù)據(jù)定期checkpoint到外部的分布式存儲系統(tǒng),如HBase,從而實現(xiàn)對原始數(shù)據(jù)的持久化操作。
此外,由于計算節(jié)點的內存中也緩存有這些原始數(shù)據(jù),以用于實時計算,從而checkpoint僅作為故障恢復的保障,以當計算節(jié)點發(fā)生故障重啟后,數(shù)據(jù)重放裝置23可以從checkpoint的原始數(shù)據(jù)中恢復相關原始數(shù)據(jù)。這在保證節(jié)點故障前后內存中待計算數(shù)據(jù)不會丟失的同時,也顯著減少了對HBase的讀操作,提高了系統(tǒng)的處理效率。
接著,當計算節(jié)點發(fā)生故障而重啟后,數(shù)據(jù)重放裝置23按照所記錄的到達順序從經持久化操作的原始數(shù)據(jù)和/或所述上游計算節(jié)點恢復內存中的待計算數(shù)據(jù),并將所恢復的待計算數(shù)據(jù)按照其之前的到達順序進行重放和計算。
在此,本發(fā)明為了實現(xiàn)結果數(shù)據(jù)的“不重不丟”,當計算節(jié)點發(fā)生故障而重啟后,數(shù)據(jù)重放裝置23例如從checkpoint點恢復上一周期的原始數(shù)據(jù),并將所恢復的原始數(shù)據(jù)的到達順序與故障節(jié)點在各原始數(shù)據(jù)到達時所記錄的順序進行比較,以確定是否尚有丟失數(shù)據(jù):如果是,則確定丟失數(shù)據(jù)的到達順序及其來源的上游計算節(jié)點,以從這些上游計算節(jié)點重新請求這些丟失數(shù)據(jù);如果否,則可從checkpoint恢復之前內存中的所有計算數(shù)據(jù)。在另一種更極端的情形下,從checkpoint恢復的原始數(shù)據(jù)中可能并無任何故障前的內存計算數(shù)據(jù)。也即,在上一次checkpoint周期之后,計算節(jié)點即發(fā)生故障,內存中的所有計算數(shù)據(jù)均未做checkpoint。對于此種情形,內存中的所有丟失數(shù)據(jù)同樣可以通過向來源的上游計算節(jié)點重新請求而獲得。根據(jù)前述的這些方式,故障節(jié)點可以恢復故障前內存中的所有計算數(shù)據(jù),以對這些數(shù)據(jù)按照之前到達該故障節(jié)點的順序進行嚴格重放和計算,否則會帶來計算數(shù)據(jù)的錯亂引發(fā)數(shù)據(jù)的丟失或重復。
由于當故障發(fā)生時,計算節(jié)點內存中的原始數(shù)據(jù)并非是全部未處理的,而是已處理了一部分,但仍有一部分未處理,為了保證數(shù)據(jù)處理的準確性,數(shù)據(jù)重放裝置23從checkpoint恢復上一周期的全部原始數(shù)據(jù),并從上游計算節(jié)點重新請求其他丟失數(shù)據(jù)(即尚未來得及做checkpoint的原始數(shù)據(jù)),進而對所恢復的這些待計算數(shù)據(jù)(包括從checkpoint恢復的原始數(shù)據(jù)和從上游計算節(jié)點重新請求的丟失數(shù)據(jù))按照其之前的到達順序進行嚴格重放和計算,以重新獲得相應的結果數(shù)據(jù)。并且,只有在這些故障恢復數(shù)據(jù)嚴格按照故障前順序重放和計算后,新數(shù)據(jù)才會到達,保證了故障數(shù)據(jù)有序重放需求。
隨后,數(shù)據(jù)編碼裝置24將每條計算完畢的結果數(shù)據(jù)按照故障前上一持久化操作周期的結果數(shù)據(jù)的偏移量繼續(xù)編碼并發(fā)送至下一節(jié)點。
在此,本發(fā)明為了保證每條結果數(shù)據(jù)的全局唯一和編碼一致,會將計算節(jié)點重啟后數(shù)據(jù)重放裝置23重新計算的結果數(shù)據(jù)按照上一checkpoint周期的編碼偏移量進度信息,繼續(xù)編碼。因此,當計算節(jié)點發(fā)生故障而重啟后,數(shù)據(jù)編碼裝置24可以從checkpoint點恢復上一周期的結果數(shù)據(jù)的偏移量進度信息。也即,數(shù)據(jù)持久化裝置22不僅周期性地將計算節(jié)點所接收的原始數(shù)據(jù)checkpoint到HBase,還將相應周期的結果數(shù)據(jù)的偏移量進度信息也做checkpoint。
編碼過程中,結合數(shù)據(jù)嚴格重放功能,數(shù)據(jù)編碼裝置24保證每條計算完畢的結果數(shù)據(jù)發(fā)送到下游節(jié)點時攜帶的偏移量編碼嚴格一致,即故障前后編碼冪等,保證下游節(jié)點的去重機制準確生效。
例如,數(shù)據(jù)編碼裝置24根據(jù)故障前上一持久化操作周期(上一checkpoint周期)的結果數(shù)據(jù)的偏移量進度信息,確定重啟后第一條計算完畢的結果數(shù)據(jù)的編碼偏移量。
在此,當前計算節(jié)點的下一節(jié)點可以是當前計算節(jié)點的下級計算節(jié)點。如果當前計算節(jié)點是流式計算系統(tǒng)的最后一級計算節(jié)點,則將結果數(shù)據(jù)傳遞至外部傳輸系統(tǒng)。
當下一節(jié)點接收到結果數(shù)據(jù)后,其將所接收到的結果數(shù)據(jù)的編碼偏移量與其已接收到的結果數(shù)據(jù)的編碼偏移量進行比較,以對結果數(shù)據(jù)進行去重。
例如,傳輸系統(tǒng)使用偏移量去重機制,保證在上游計算節(jié)點故障重啟后,將上游計算節(jié)點發(fā)布數(shù)據(jù)中攜帶的偏移量信息與傳輸系統(tǒng)內部已接收到的數(shù)據(jù)的偏移量進行比較,完成重復數(shù)據(jù)的過濾去除功能,實現(xiàn)了計算結果發(fā)布至傳輸系統(tǒng)的不重特性。對重復數(shù)據(jù)的過濾去除功能,實現(xiàn)了計算結果發(fā)布至傳輸系統(tǒng)的不重特性。
需要注意的是,本發(fā)明可在軟件和/或軟件與硬件的組合體中被實施,例如,本發(fā)明的各個裝置可采用專用集成電路(ASIC)或任何其他類似硬件設備來實現(xiàn)。在一個實施例中,本發(fā)明的軟件程序可以通過處理器執(zhí)行以實現(xiàn)上文所述步驟或功能。同樣地,本發(fā)明的軟件程序(包括相關的數(shù)據(jù)結構)可以被存儲到計算機可讀記錄介質中,例如,RAM存儲器,磁或光驅動器或軟磁盤及類似設備。另外,本發(fā)明的一些步驟或功能可采用硬件來實現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。
對于本領域技術人員而言,顯然本發(fā)明不限于上述示范性實施例的細節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實現(xiàn)本發(fā)明。因此,無論從哪一點來看,均應將實施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化涵括在本發(fā)明內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復數(shù)。系統(tǒng)權利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。