分布式異步事件的處理方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種分布式異步事件的處理方法及系統(tǒng),該方法包括:以日志方式對各應用服務器中的要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息并傳輸;將接收的第一日志消息存儲到消息隊列中;根據(jù)各訂閱服務器向中心服務器登記的要處理的消息的消息類別,將消息隊列中的與登記的消息類別相對應的消息分別傳送至相應的訂閱服務器;訂閱服務器對消息進行處理并返回消息處理結果;將接收的第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件。本發(fā)明將日志實時傳輸與消息隊列相結合,使得中心服務器可以根據(jù)消息處理結果實時地、低入侵地判斷出接收端是否接收到事件并進行了處理,且可以較好地補償處理失敗或丟失的事件。
【專利說明】分布式異步事件的處理方法及系統(tǒng)
【技術領域】
[0001]本發(fā)明涉及計算機技術,具體涉及一種分布式異步事件的處理方法及系統(tǒng)。
【背景技術】
[0002]隨著網絡的發(fā)展,越來越多的應用基于網絡提供,甚至一些關鍵性的業(yè)務也基于網絡來提供。這些關鍵性的業(yè)務例如網上支付等,對系統(tǒng)的可靠性提出了較高的要求。
[0003]分布式處理系統(tǒng)是將不同地點的或具有不同功能的或擁有不同數(shù)據(jù)的多臺計算機用通信網絡連接起來,在控制系統(tǒng)的統(tǒng)一管理控制下,協(xié)調地完成信息處理任務的計算機系統(tǒng)。分布式異步事件處理是在處理不同事務的服務器通過網絡進行通信的分布式通信環(huán)境下,發(fā)送端發(fā)送承載消息的事件后,不必等待接收端應答就可以繼續(xù)執(zhí)行后續(xù)處理;而接收端在接收到事件之后,采用異步的方式來處理事件的過程。
[0004]目前,可以通過隊列(例如Active MQ, Gearman)服務來進行事件傳遞,達到異步處理的目的,其中,Gearman是一個用來把工作委派給其他機器、分布式地調用更適合做某項工作的機器、并發(fā)地做某項工作,在多個調用間做負載均衡或用來調用其它語言的函數(shù)的系統(tǒng);也可以通過定時獲取日志并分析處理,達到異步處理的目的。
[0005]分布式異步事件處理解決了發(fā)送端必須等待接收端處理完事件后才能繼續(xù)執(zhí)行的問題,也解決了接收端并發(fā)處理多個發(fā)送端請求的事件的性能瓶頸問題,因此顯著地提高了事件處理的負載均衡和效率。但是,在分布式異步事件處理系統(tǒng)中,由于發(fā)送端沒有等待接收端的反饋就繼續(xù)執(zhí)行,因此,如何確認接收端接收到事件并進行了處理就成為分布式異步事件處理系統(tǒng)必須要考慮的問題。
【發(fā)明內容】
[0006]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的分布式異步事件的處理方法及系統(tǒng)。
[0007]依據(jù)本發(fā)明的一個方面,提供了一種分布式異步事件的處理方法,該方法包括:
[0008]以日志方式對每一應用服務器中的要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息,并且傳輸?shù)谝蝗罩鞠ⅲ龅谝蝗罩鞠⒅辽侔ㄏ㈩悇e和消息內容;
[0009]將接收的所述第一日志消息存儲到中心服務器中的消息隊列中;
[0010]根據(jù)各個訂閱服務器向所述中心服務器登記的要處理的消息的消息類別,將所述中心服務器的消息隊列中的與所登記的消息類別相對應的消息分別傳送至相應的訂閱服務器;
[0011]所述訂閱服務器對所述消息進行處理,并向所述中心服務器返回消息處理結果;以及
[0012]將接收的第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件。
[0013]依據(jù)本發(fā)明的另一個方面,提供了一種分布式異步事件的處理系統(tǒng),包括:[0014]一個或多個應用服務器,每個應用服務器適于以日志方式對要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息,并且傳輸?shù)谝蝗罩鞠?,所述第一日志消息至少包括消息類別和消息內容;
[0015]中心服務器,適于接收第一日志消息,將所述第一日志消息存儲到所述中心服務器的消息隊列中;接收來自每個訂閱服務器的消息處理結果,將第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件;以及
[0016]一個或多個訂閱服務器,每個訂閱服務器適于向所述中心服務器登記要處理的消息的消息類別,接收所述中心服務器所傳輸?shù)?、所述消息隊列中與所登記的消息類別相對應的消息,對所述消息進行處理,并且向所述中心服務器返回消息處理結果。
[0017]本發(fā)明實施例,以日志方式對每一應用服務器中的要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息,并將第一日志消息存儲到消息隊列中,并根據(jù)各個訂閱服務器向中心服務器登記的要處理的消息的消息類別,將消息隊列中的與所登記的消息類別相對應的消息分別傳送至相應的訂閱服務器,訂閱服務器對上述消息處理后向中心服務器返回消息處理結果,中心服務器根據(jù)該消息處理結果可以實時地、低入侵地判斷出接收端是否接收到事件并進行了處理,同時,中心服務器將接收的第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件,較好地克服了現(xiàn)有技術的缺陷。
[0018]上述說明僅是本發(fā)明技術方案的概述,為了能夠更清楚了解本發(fā)明的技術手段,而可依照說明書的內容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【專利附圖】
【附圖說明】
[0019]通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0020]圖1a示出了根據(jù)本發(fā)明一個實施例的分布式異步事件的處理方法的流程圖;
[0021]圖1b示出了本發(fā)明圖1a中步驟S102的細化過程的流程圖;
[0022]圖1c示出了本發(fā)明圖1a中步驟S105的細化過程的流程圖;
[0023]圖2示出了根據(jù)本發(fā)明一個實施例的分布式異步事件的處理系統(tǒng)的結構示意圖;
[0024]圖3示出了根據(jù)本發(fā)明另一個實施例的分布式異步事件的處理系統(tǒng)的結構示意圖;
[0025]圖4示出了根據(jù)本發(fā)明一個實施例的消息預處理器的結構示意圖;
[0026]圖5示出了根據(jù)本發(fā)明一個實施例的補償處理器的結構示意圖。
【具體實施方式】
[0027]下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現(xiàn)本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
[0028]通過使用隊列服務來進行事件傳遞來確認接收端對事件的接收和處理狀態(tài)存在以下問題:應用程序受制于隊列自身的穩(wěn)定性和網絡的可訪問性;例如,應用系統(tǒng)A直接訪問Gearman,如果Gearman本身的可靠性為90%,網絡可訪問性為90%,那原系統(tǒng)A的可靠性(假設為100%)則下降到90%*90%=81%。這種可靠性的下降,對業(yè)務的可靠性產生嚴重的影響。
[0029]另一方面,通過定時獲取日志并分析來確認接收端對事件的接收和處理狀態(tài)存在以下問題:雖然對系統(tǒng)沒有侵入性和可靠性的影響,但因為采用定時輪詢的方式達不到實時或準時的要求,延時最長會達到5分鐘以上。
[0030]另外,事件在傳輸?shù)倪^程中會產生丟失的情況。
[0031]因此,如何實時地、低入侵地確認接收端是否接收到事件并進行了處理且避免事件丟失就成為分布式異步事件處理系統(tǒng)必須要解決的技術問題之一。圖1a示出了根據(jù)本發(fā)明一個實施例的分布式異步事件的處理方法的流程圖,如圖1a所示,該方法包括:
[0032]步驟S101、以日志方式對每一應用服務器中的要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息,并且傳輸?shù)谝蝗罩鞠?,上述第一日志消息至少包括消息類別和消息內容;
[0033]具體地,可以通過調用syslog函數(shù)為每個要處理的事件創(chuàng)建第一日志消息,軟件開發(fā)工具包(Hydar SDK)封裝unix下的標準C函數(shù)syslog,并規(guī)范一定的格式,具體的格式說明和日志格式示例如下:
[0034]//格式說明:
[0035]日期時間(iso標準格式)發(fā)生機器事件分類(hydra_send | hydra_back) #事件名#事件ID事件數(shù)據(jù)(JSON)
[0036]從上述格式說明中,可以看出日志消息包括下列信息中的一個或多個:事件生成的時間、生成事件的主機信息、事件類別、事件名、事件標識和事件內容;
[0037]Il日志格式示例
[0038]2012-07-2412:09:24w20.wg.zwt.qiho0.net hydra_send#pay#21981248#{"money":〃10000〃,〃uid〃:〃138348497〃,〃time〃:〃1343102964〃,〃gkey〃:〃rxhzW〃,〃skey〃:〃S4"}
[0039]其中,事件分類中的hydra_Send是指從應用服務器發(fā)送到中心服務器的日志;
[0040]在本實施例中,可以通過在各個服務器之間傳遞日志的開放源代碼軟件syslog-ng將應用服務器上的信息路由到中心服務器(Hydra SVR),具體示例如下:
[0041]
【權利要求】
1.一種分布式異步事件的處理方法,包括: 以日志方式對每一應用服務器中的要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息,并且傳輸?shù)谝蝗罩鞠?,所述第一日志消息至少包括消息類別和消息內容; 將接收的所述第一日志消息存儲到中心服務器中的消息隊列中; 根據(jù)各個訂閱服務器向所述中心服務器登記的要處理的消息的消息類別,將所述中心服務器的消息隊列中的與所登記的消息類別相對應的消息分別傳送至相應的訂閱服務器; 所述訂閱服務器對所述消息進行處理,并向所述中心服務器返回消息處理結果;以及 將接收的第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件。
2.根據(jù)權利要求1所述的處理方法,其中,所述訂閱服務器對所述消息進行處理,并向所述中心服務器返回消息處理結果,包括: 所述訂閱服務器以日志方式對消息處理結果進行處理以生成第二日志消息,并將所述第二日志消息傳輸?shù)剿鲋行姆掌鳌?br>
3.根據(jù)權利要求1或2所述的處理方法,其中,所述第一日志消息和所述第二日志消息包括下列中的一個或多個:事件生成的時間、生成事件的主機信息、事件類別、事件名、事件標識和事件內容。
4.根據(jù)權利要求1所述的處理方法,所述將接收的第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件,包括: 從所述中心服務器讀取N個時間單位內所接收的第一日志消息中包含的數(shù)據(jù),N為正整數(shù); 將讀取到的所述數(shù)據(jù)存儲在數(shù)據(jù)庫中; 讀取N+M個時間單位內訂閱服務器返回的消息處理結果,并將消息處理結果與所述數(shù)據(jù)庫中存儲的數(shù)據(jù)進行對比,如果所述數(shù)據(jù)庫中存在消息處理結果中未包含的事件,則將該事件記錄為處理失敗或丟失的事件,將所述事件進行處理以生成第一日志消息,并將第一日志消息存儲到中心服務器中的消息隊列中,其中,M為正整數(shù)。
5.根據(jù)權利要求4所述的處理方法,其中,所述時間單位為小時,M的值為I。
6.根據(jù)權利要求1或4或5所述的處理方法,其中,將所述第一日志消息存儲到中心服務器中的消息隊列中,包括: 從所述第一日志消息中提取出要處理的事件; 根據(jù)事件配置原則對與提取出的事件對應的第一日志消息進行打包和/或消重處理,然后存儲到消息隊列中。
7.根據(jù)權利要求6所述的處理方法,其中,所述對與提取出的事件對應的第一日志消息進行消重處理,包括: 將要處理的日志消息存儲于第一緩存器; 查找所述第一緩存器中是否存儲有第一日志消息,如果不存在,則將所述第一日志消息緩存于所述第一緩存器中,并輸出至所述消息隊列中,如果存在,則不將所述第一日志消息存儲于所述第一緩存器中,也不將其傳輸至所述消息隊列中; 其中,所述對與提取出的事件對應的第一日志消息進行打包處理,包括:緩存要處理的日志消息,當所緩存的要處理的日志消息數(shù)量達到預設的最大值后,將所緩存的日志消息合成一條日志消息,并輸出到所述消息隊列中。
8.根據(jù)權利要求7所述的處理方法,該方法還包括: 定時觸發(fā)而清除所述第一緩存器中的數(shù)據(jù);和/或 在緩存的日志消息數(shù)量沒有達到所述預設的最大值的情況下,定時觸發(fā)而將緩存的日志消息合成一條日志消息,并輸出到所述消息隊列中。
9.一種分布式異步事件的處理系統(tǒng),包括: 一個或多個應用服務器,每個應用服務器適于以日志方式對要處理的事件進行處理,為每個要處理的事件創(chuàng)建第一日志消息,并且傳輸?shù)谝蝗罩鞠?,所述第一日志消息至少包括消息類別和消息內容; 中心服務器,適于接收第一日志消息,將所述第一日志消息存儲到所述中心服務器的消息隊列中;接收來自每個訂閱服務器的消息處理結果,將第一日志消息和消息處理結果進行對比,補償處理失敗或丟失的事件;以及 一個或多個訂閱服務器,每個訂閱服務器適于向所述中心服務器登記要處理的消息的消息類別,接收所述中心服務器所傳輸?shù)?、所述消息隊列中與所登記的消息類別相對應的消息,對所述消息進行處理,并且向所述中心服務器返回消息處理結果。
10.根據(jù)權利要求9所述的處理系統(tǒng),其中,所述一個或者多個應用服務器中的每個應用服務器包括: 事件生成器,適于以日志方式生成與要處理的事件相對應的第一日志消息; 第一日志傳輸單兀,適于在所述事件生成器生成第一日志消息時,將所生成的第一日志消息傳輸至所述中心服務器。
【文檔編號】G06F13/38GK103530255SQ201310476116
【公開日】2014年1月22日 申請日期:2013年10月12日 優(yōu)先權日:2013年10月12日
【發(fā)明者】左文建, 王東洋 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司