事件通知方法及用于事件通知的系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式系統(tǒng)技術(shù)領(lǐng)域,特別是涉及一種事件通知方法及用于事件通知的系統(tǒng)。
【背景技術(shù)】
[0002]分布式系統(tǒng)是由多個互相連接的處理資源組成的計算機(jī)系統(tǒng),它們在整個系統(tǒng)的控制下協(xié)同執(zhí)行同一個任務(wù),依賴于集中的程序、數(shù)據(jù)或硬件,這些資源可以是地理上相鄰,或者,在地理上分散;用戶感覺不到這些資源是分布的,就好像是一個統(tǒng)一的整體。
[0003]在分布式系統(tǒng)中,如何協(xié)調(diào)不同的服務(wù)進(jìn)行工作是關(guān)鍵問題之一,事件通知機(jī)制作為一種低耦合的服務(wù)交互方式,得到了廣泛應(yīng)用。事件通知機(jī)制包括事件發(fā)布者、事件訂閱者及事件代理集群三種角色,其中,事件發(fā)布者是事件的生產(chǎn)方;事件代理集群采用分布式系統(tǒng)。事件發(fā)布者和事件訂閱者的物理實體均可以是服務(wù)器或終端。
[0004]事件訂閱者向事件代理集群訂閱自己關(guān)注的事件,當(dāng)事件發(fā)布者產(chǎn)生事件后,事件代理集群將事件逐一發(fā)送給對應(yīng)的事件訂閱者。假設(shè),有10個事件訂閱者訂閱了同一個事件主題,當(dāng)該主題的事件產(chǎn)生后,事件代理集群需要分別向這10個事件訂閱者發(fā)送該事件。
[0005]當(dāng)某一事件主題具有大量的事件訂閱者時,采用上述的事件通知方法,事件代理集群需要發(fā)送事件的對象數(shù)量很大,將會導(dǎo)致網(wǎng)絡(luò)層消息傳輸量巨大,進(jìn)而降低了事件通知效率。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實施例中提供了一種分布式事件通知方法及用于事件通知的系統(tǒng),以解決現(xiàn)有技術(shù)中存在的事件通知效率低的問題。
[0007]為了解決上述技術(shù)問題,本發(fā)明實施例公開了如下技術(shù)方案:
[0008]第一方面,本發(fā)明提供一種事件通知方法,事件通知方法應(yīng)用于存儲系統(tǒng)中,存儲系統(tǒng)包括至少一個集群節(jié)點(diǎn)、多個網(wǎng)絡(luò)設(shè)備和多個事件訂閱者,事件訂閱者包括客戶端或者服務(wù)器;集群節(jié)點(diǎn)與多個網(wǎng)絡(luò)設(shè)備連接,每個網(wǎng)絡(luò)設(shè)備與一個或多個事件訂閱者連接,并且同一個網(wǎng)絡(luò)設(shè)備連接的一個或多個事件訂閱者所訂閱的主題相同;其中,事件通知方法包括:集群節(jié)點(diǎn)接收待通知事件,其中,待通知事件包括主題;然后,集群節(jié)點(diǎn)根據(jù)待通知事件的主題,以及事件主題與網(wǎng)絡(luò)設(shè)備的地址之間的對應(yīng)關(guān)系,確定待通知事件的主題對應(yīng)的目標(biāo)網(wǎng)絡(luò)設(shè)備的地址,并按照目標(biāo)網(wǎng)絡(luò)設(shè)備的地址將待通知事件發(fā)送給目標(biāo)網(wǎng)絡(luò)設(shè)備;目標(biāo)網(wǎng)絡(luò)設(shè)備將待通知事件組播給與目標(biāo)網(wǎng)絡(luò)設(shè)備連接的事件訂閱者。
[0009]第一方面提供的事件通知方法,集群節(jié)點(diǎn)只需向目標(biāo)網(wǎng)絡(luò)設(shè)備發(fā)送一次待通知事件,目標(biāo)網(wǎng)絡(luò)設(shè)備向與自身連接的事件訂閱者組播待通知事件;極大地降低了網(wǎng)絡(luò)層的消息傳輸量,減少通信消息的規(guī)模,提高事件通知效率。
[0010]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,在集群節(jié)點(diǎn)接收待通知事件之前,集群節(jié)點(diǎn)接收事件訂閱者的訂閱消息,其中,訂閱消息中包含事件訂閱者所訂閱的主題;如果事件主題與網(wǎng)絡(luò)設(shè)備的地址之間的對應(yīng)關(guān)系中不包含訂閱消息所包含的主題,則從存儲系統(tǒng)中選擇其它網(wǎng)絡(luò)設(shè)備的地址,并建立訂閱消息所包含的主題與所選擇的網(wǎng)絡(luò)設(shè)備的地址之間的對應(yīng)關(guān)系。
[0011]結(jié)合第一方面,在第一方面的第二種可能的實現(xiàn)方式中,存儲系統(tǒng)中還包括其它集群節(jié)點(diǎn);集群節(jié)點(diǎn)接收事件訂閱者的訂閱消息,還包括:集群節(jié)點(diǎn)將訂閱消息發(fā)送給其它集群節(jié)點(diǎn);當(dāng)集群節(jié)點(diǎn)故障時,其它集群節(jié)點(diǎn)根據(jù)接收到的訂閱消息所包含的主題及存儲系統(tǒng)包含的多個網(wǎng)絡(luò)設(shè)備,重新確定訂閱消息所包含主題對應(yīng)的網(wǎng)絡(luò)設(shè)備的地址。
[0012]第一方面的第二種可能的實現(xiàn)方式提供的事件通知方法,集群節(jié)點(diǎn)接收到訂閱消息后,將該訂閱消息發(fā)送給其它集群節(jié)點(diǎn),當(dāng)集群主節(jié)點(diǎn)發(fā)生故障后,系統(tǒng)中的其它集群節(jié)點(diǎn)可以代替集群主節(jié)點(diǎn)工作,只需要重新建立事件訂閱者訂閱的主題與網(wǎng)絡(luò)設(shè)備的地址之間的對應(yīng)關(guān)系。極大地減少事件代理集群節(jié)點(diǎn)故障后,整個事件代理集群故障恢復(fù)的時延,提高事件代理集群故障場景下事件通知的效率。
[0013]結(jié)合第一方面,在第一方面的第三種可能的實現(xiàn)方式中,存儲系統(tǒng)中還包括其它集群節(jié)點(diǎn);集群節(jié)點(diǎn)接收待通知事件,還包括:集群節(jié)點(diǎn)將待通知事件發(fā)送給其它集群節(jié)點(diǎn);當(dāng)集群節(jié)點(diǎn)發(fā)生故障時,其它集群節(jié)點(diǎn)根據(jù)接收到的待通知事件,以及事件主題與網(wǎng)絡(luò)設(shè)備的地址之間的對應(yīng)關(guān)系,確定待通知事件的主題對應(yīng)的目標(biāo)網(wǎng)絡(luò)設(shè)備的地址。
[0014]第一方面的第三種可能的實現(xiàn)方式提東的事件通知方法,集群節(jié)點(diǎn)接收到待通知事件后,將該待通知事件發(fā)送給其它節(jié)點(diǎn),當(dāng)集群節(jié)點(diǎn)故障時,由其它集群節(jié)點(diǎn)將待通知事件發(fā)送給對應(yīng)的目標(biāo)網(wǎng)絡(luò)設(shè)備,極大地減少事件代理集群節(jié)點(diǎn)故障后,整個事件代理集群故障恢復(fù)的時延,提高事件代理集群故障場景下事件通知的效率。
[0015]第二方面,本發(fā)明提供一種事件通知系統(tǒng),該系統(tǒng)包括至少一個集群節(jié)點(diǎn)、多個網(wǎng)絡(luò)設(shè)備和多個事件訂閱者,所述事件訂閱者包括客戶端或者服務(wù)器;所述集群節(jié)點(diǎn)與所述多個網(wǎng)絡(luò)設(shè)備連接,每個網(wǎng)絡(luò)設(shè)備與一個或多個事件訂閱者連接,并且同一個所述網(wǎng)絡(luò)設(shè)備連接的一個或多個事件訂閱者所訂閱的主題相同;集群節(jié)點(diǎn)用于執(zhí)行第一方面的第一種至第三種任意一種可能的實現(xiàn)方式提供的事件通知方法;目標(biāo)網(wǎng)絡(luò)設(shè)備用于將待通知事件組播給與目標(biāo)網(wǎng)絡(luò)設(shè)備連接的事件訂閱者。
[0016]由以上技術(shù)方案可見,本發(fā)明實施例提供的分布式事件通知方法,集群主節(jié)點(diǎn)接收到待通知事件后,根據(jù)該待通知事件的主題,查詢事件主題與網(wǎng)絡(luò)設(shè)備的地址之間的對應(yīng)關(guān)系,得到待通知事件的主題對應(yīng)的目標(biāo)網(wǎng)絡(luò)設(shè)備的地址,并按照目標(biāo)網(wǎng)絡(luò)設(shè)備的地址將待通知事件發(fā)送給目標(biāo)網(wǎng)絡(luò)設(shè)備;最后,由目標(biāo)網(wǎng)絡(luò)設(shè)備將待通知事件組播給自身所連接的全部事件訂閱者。本實施例提供的事件通知方法,集群主節(jié)點(diǎn)只需向目標(biāo)網(wǎng)絡(luò)設(shè)備發(fā)送一次待通知事件,目標(biāo)網(wǎng)絡(luò)設(shè)備將該待通知事件發(fā)送給組內(nèi)的各個事件訂閱者,極大地降低了網(wǎng)絡(luò)層的消息傳輸量,減少了通信消息的規(guī)模,提高了事件通知效率。
【附圖說明】
[0017]為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,對于本領(lǐng)域普通技術(shù)人員而言,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0018]圖1為本發(fā)明實施例提供的一種用于事件通知的系統(tǒng)的結(jié)構(gòu)示意圖;
[0019]圖2為本發(fā)明實施例提供的一種集群節(jié)點(diǎn)的結(jié)構(gòu)示意圖;
[0020]圖3為本發(fā)明實施例提供的應(yīng)用于圖1所示系統(tǒng)的一種事件通知方法的流程示意圖;
[0021]圖4為本發(fā)明實施例提供的應(yīng)用于圖1所示系統(tǒng)的另一種事件通知方法的流程示意圖;
[0022]圖5為本發(fā)明實施例提供的又一種事件通知方法的流程圖;
[0023]圖6為本發(fā)明實施例提供的另一種用于事件通知的系統(tǒng)的結(jié)構(gòu)示意圖;
[0024]圖7為本發(fā)明實施例提供的應(yīng)用于圖5所示的系統(tǒng)中的事件通知方法的流程圖。
【具體實施方式】
[0025]為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明實施例中的技術(shù)方案,并使本發(fā)明實施例的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對本發(fā)明實施例中技術(shù)方案作進(jìn)一步詳細(xì)的說明。
[0026]參見圖1,為本發(fā)明實施例提供的一種用于事件通知的系統(tǒng)的結(jié)構(gòu)示意圖,該系統(tǒng)包括至少一個集群節(jié)點(diǎn)、多個網(wǎng)絡(luò)設(shè)備和多個事件訂閱者。
[0027]至少一個集群節(jié)點(diǎn)構(gòu)成事件代理集群,每個集群節(jié)點(diǎn)均可以連接多個網(wǎng)絡(luò)設(shè)備。網(wǎng)絡(luò)設(shè)備可以連接一個或多個事件訂閱者,而且,同一個網(wǎng)絡(luò)設(shè)備連接的一個或多個事件訂閱者所訂閱的主題相同,每個網(wǎng)絡(luò)設(shè)備對應(yīng)一個組播組,該網(wǎng)絡(luò)設(shè)備所連接的一個或多個事件訂閱者是該組播組的成員。換言之,把訂閱有相同的主題的事件訂閱者劃分到同一個組播組中。
[0028]需要說明的是,集群節(jié)點(diǎn)與網(wǎng)絡(luò)設(shè)備,以及事件訂閱者與網(wǎng)絡(luò)設(shè)備之間可以通過有線方式連接,也可以通過無線方式連接,本發(fā)明對此并不限制。
[0029]如圖1所示,事件代理集群中的集群節(jié)點(diǎn)包括集群節(jié)點(diǎn)A、集群節(jié)點(diǎn)B和集群節(jié)點(diǎn)C,其中,集群節(jié)點(diǎn)A為主節(jié)點(diǎn),集群節(jié)點(diǎn)B和C為從節(jié)點(diǎn)。主節(jié)點(diǎn)用于事件通知,從節(jié)點(diǎn)起冗余備份的作用,當(dāng)主節(jié)點(diǎn)故障后,可以按照一定的策略選擇從節(jié)點(diǎn)作為新的主節(jié)點(diǎn)。集群節(jié)點(diǎn)可以是服務(wù)器。
[0030]集群節(jié)點(diǎn)A分別與網(wǎng)絡(luò)設(shè)備1、11和III連接;網(wǎng)絡(luò)設(shè)備可以是具有IP組播能力的硬件設(shè)備或軟件,例如,路由器。網(wǎng)絡(luò)設(shè)備I連接事件訂閱者a和b,即a和b所訂閱的主題相同;網(wǎng)絡(luò)設(shè)備II連接事件訂閱者c和d,c和d所訂閱的主題相同;網(wǎng)絡(luò)設(shè)備III連接事件訂閱者e和f,e和f所訂閱的主題相同。
[0031]事件訂閱者可以是客戶端或服務(wù)器,用于向集群節(jié)點(diǎn)發(fā)送訂閱消息訂閱需要的事件,訂閱消息中包含事件訂閱者所訂閱的主題。例如,事件訂閱者可以是某個APP(Applica