本發(fā)明涉及計(jì)算機(jī)網(wǎng)絡(luò)服務(wù)領(lǐng)域,特別涉及一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法及裝置。
背景技術(shù):
隨著反向代理技術(shù)(如Nginx)在現(xiàn)代業(yè)務(wù)系統(tǒng)中應(yīng)用得越來越廣泛,用戶通過公網(wǎng)請(qǐng)求業(yè)務(wù)資源往往需要穿過多層服務(wù)器。在復(fù)雜業(yè)務(wù)環(huán)境下,服務(wù)器之間的指向關(guān)系錯(cuò)綜復(fù)雜且層次較多,為了直觀的查看反向代理服務(wù)器與具體業(yè)務(wù)應(yīng)用服務(wù)器之間的指向和層級(jí)關(guān)系,需要維護(hù)規(guī)模較為龐大的IP拓?fù)鋱D。
目前維護(hù)IP拓?fù)鋱D是由人工聚合相同業(yè)務(wù)IP與備份IP,而且由于機(jī)器變動(dòng)造成的服務(wù)拓?fù)浣Y(jié)構(gòu)改變,也只能手工去維護(hù)拓?fù)鋱D。這種人工聚合的方式產(chǎn)生錯(cuò)誤的機(jī)率較大。同時(shí),由于分布式以及備份等原因,業(yè)務(wù)系統(tǒng)中可能會(huì)存在大量的IP信息,使得拓?fù)鋱D十分龐大,可視化效果很差。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明實(shí)施例的目的在于提供一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法及裝置,以自動(dòng)聚合節(jié)點(diǎn),降低錯(cuò)誤機(jī)率,精簡(jiǎn)有向拓?fù)鋱D。
為達(dá)到上述目的,本發(fā)明實(shí)施例提供了一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法,所述方法包括:
根據(jù)目標(biāo)有向拓?fù)鋱D,確定所述目標(biāo)有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系;
根據(jù)所述指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合;
按照預(yù)設(shè)聚合規(guī)則,將所述源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。
可選的,所述根據(jù)所述指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合,包括:
根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合;
根據(jù)每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合,更新所述指向關(guān)系;
根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)集合相同的源節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)源節(jié)點(diǎn)集合。
可選的,所述根據(jù)所述指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合,包括:
根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)相同的源節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合;
根據(jù)每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合,更新所述指向關(guān)系;
根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)集合相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)目的節(jié)點(diǎn)集合。
可選的,所述按照預(yù)設(shè)聚合規(guī)則,將所述多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合,包括:
將每一個(gè)源節(jié)點(diǎn)集合作為預(yù)設(shè)碰撞集合中的一個(gè)元素,并對(duì)所述預(yù)設(shè)碰撞集合中的元素進(jìn)行排序;
依次將每一個(gè)目的節(jié)點(diǎn)集合確定為候選集合;
針對(duì)當(dāng)前候選集合,按照所述碰撞集合中元素的順序,進(jìn)行當(dāng)前候選集合和當(dāng)前元素的差集和交集運(yùn)算,將所述當(dāng)前元素從當(dāng)前碰撞集合中刪除;并將所述當(dāng)前元素與所述當(dāng)前候選集合的差集,以及所述當(dāng)前元素與所述當(dāng)前候選集合的交集添加在當(dāng)前碰撞集合中;將所述當(dāng)前候選集合與所述當(dāng)前元素的差集,確定為當(dāng)前候選集合,直至當(dāng)前候選集合為空或與最后一個(gè)元素進(jìn)行差集和交集運(yùn)算完成后,所述當(dāng)前候選集合與所述當(dāng)前元素的差集不為空,并將當(dāng)前候選集合與所述當(dāng)前元素的差集添加在當(dāng)前碰撞集合中;
將最終碰撞集合中的同一元素包含的至少兩個(gè)節(jié)點(diǎn)進(jìn)行聚合。
可選的,所述方法還包括:
根據(jù)節(jié)點(diǎn)聚合的聚合結(jié)果,更新所述目標(biāo)有向拓?fù)鋱D。
為達(dá)到上述目的,本發(fā)明實(shí)施例還提供了一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合裝置,所述裝置包括:
確定單元,用于根據(jù)目標(biāo)有向拓?fù)鋱D,確定所述目標(biāo)有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系;
獲得單元,用于根據(jù)所述指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合;
聚合單元,用于按照預(yù)設(shè)聚合規(guī)則,將所述源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。
可選的,所述獲得單元,包括:
第一聚合子單元,用于根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合;
第一更新子單元,用于根據(jù)每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合,更新所述指向關(guān)系;
第二聚合子單元,用于根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)集合相同的源節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)源節(jié)點(diǎn)集合。
可選的,所述獲得單元,包括:
第三聚合子單元,用于根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)相同的源節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合;
第二更新子單元,用于根據(jù)每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合,更新所述指向關(guān)系;
第四聚合子單元,用于根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)集合相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)目的節(jié)點(diǎn)集合。
可選的,所述聚合單元,包括:
排序子單元,用于將每一個(gè)源節(jié)點(diǎn)集合作為預(yù)設(shè)碰撞集合中的一個(gè)元素,并對(duì)所述預(yù)設(shè)碰撞集合中的元素進(jìn)行排序;
確定子單元,用于依次將每一個(gè)目的節(jié)點(diǎn)集合確定為候選集合;
處理子單元,用于針對(duì)當(dāng)前候選集合,按照所述碰撞集合中元素的順序,進(jìn)行當(dāng)前候選集合和當(dāng)前元素的差集和交集運(yùn)算,將所述當(dāng)前元素從當(dāng)前碰撞集合中刪除;并將所述當(dāng)前元素與所述當(dāng)前候選集合的差集,以及所述當(dāng)前元素與所述當(dāng)前候選集合的交集添加在當(dāng)前碰撞集合中;將所述當(dāng)前候選集合與所述當(dāng)前元素的差集,確定為當(dāng)前候選集合,直至當(dāng)前候選集合為空或與最后一個(gè)元素進(jìn)行差集和交集運(yùn)算完成后,所述當(dāng)前候選集合與所述當(dāng)前元素的差集不為空,并將當(dāng)前候選集合與所述當(dāng)前元素的差集添加在當(dāng)前碰撞集合中;
第五聚合子單元,用于將最終碰撞集合中的同一元素包含的至少兩個(gè)節(jié)點(diǎn)進(jìn)行聚合。
可選的,所述裝置還包括:
更新單元,用于根據(jù)節(jié)點(diǎn)聚合的聚合結(jié)果,更新所述目標(biāo)有向拓?fù)鋱D。
由上述的技術(shù)方案可見,本發(fā)明實(shí)施例提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法及裝置,首先確定有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系,根據(jù)確定的指向關(guān)系,獲得多個(gè)源節(jié)點(diǎn)集合和多個(gè)目的節(jié)點(diǎn)集合,最后按照預(yù)設(shè)聚合規(guī)則,將獲得的多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。不同于現(xiàn)有技術(shù)中依靠人工來聚合有向拓?fù)鋱D中的節(jié)點(diǎn),本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)節(jié)點(diǎn)聚合過程自動(dòng)化,從而降低錯(cuò)誤機(jī)率,并且將指向關(guān)系相同的節(jié)點(diǎn)聚合,能夠精簡(jiǎn)有向拓?fù)鋱D。當(dāng)然,實(shí)施本發(fā)明的任一產(chǎn)品或方法必不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法的流程示意圖;
圖2為本發(fā)明實(shí)施例提供的一個(gè)具體實(shí)施例中節(jié)點(diǎn)聚合前的有向拓?fù)鋱D;
圖3為根據(jù)圖2中的有向拓?fù)鋱D進(jìn)行節(jié)點(diǎn)聚合處理后的有向拓?fù)鋱D;
圖4為本發(fā)明實(shí)施例提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合裝置的結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
為解決現(xiàn)有技術(shù)問題,本發(fā)明實(shí)施例提供了一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法及裝置。下面通過具體實(shí)施例,先對(duì)本發(fā)明實(shí)施例提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法進(jìn)行詳細(xì)說明。
圖1為本發(fā)明實(shí)施例提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法的流程示意圖,該方法可以包括:
S101,根據(jù)目標(biāo)有向拓?fù)鋱D,確定目標(biāo)有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系。
實(shí)際應(yīng)用中,有向拓?fù)鋱D中的任意一個(gè)箭頭連接的兩個(gè)節(jié)點(diǎn)中,箭頭指出的節(jié)點(diǎn)為源節(jié)點(diǎn),箭頭指向的節(jié)點(diǎn)為目的節(jié)點(diǎn),即,任意一個(gè)箭頭表示兩個(gè)節(jié)點(diǎn)之間的指向關(guān)系。因此,可以根據(jù)目標(biāo)有向拓?fù)鋱D所有箭頭的指向,確定所有節(jié)點(diǎn)之間的指向關(guān)系。
S102,根據(jù)指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合。
具體的,源節(jié)點(diǎn)集合為指向關(guān)系中目的節(jié)點(diǎn)相同的所有節(jié)點(diǎn)的集合,同樣的,目的節(jié)點(diǎn)集合為指向關(guān)系中源節(jié)點(diǎn)相同的所有節(jié)點(diǎn)的集合。
在一種優(yōu)選的實(shí)施方式中,根據(jù)指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合,可以包括:
根據(jù)指向關(guān)系,對(duì)指向關(guān)系中源節(jié)點(diǎn)相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合;
根據(jù)每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合,更新指向關(guān)系;
根據(jù)更新后的指向關(guān)系,對(duì)指向關(guān)系中目的節(jié)點(diǎn)集合相同的源節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)源節(jié)點(diǎn)集合。
在另一種優(yōu)選的實(shí)施方式中,根據(jù)指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合,可以包括:
根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)相同的源節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合;
根據(jù)每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合,更新所述指向關(guān)系;
根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)集合相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)目的節(jié)點(diǎn)集合。
S103,按照預(yù)設(shè)聚合規(guī)則,將源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。
實(shí)際應(yīng)用中,在經(jīng)過步驟S102得到目的節(jié)點(diǎn)集合和源節(jié)點(diǎn)集合后,由于目的節(jié)集合和源節(jié)點(diǎn)集合中可能會(huì)存在相同的冗余節(jié)點(diǎn),因此需要將將源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合,將目標(biāo)有向拓?fù)鋱D中具有相同的指向關(guān)系的節(jié)點(diǎn)聚合在一起,這里,指向關(guān)系相同表示指向和被指向的節(jié)點(diǎn)相同。
在一種具體實(shí)現(xiàn)方式中,按照預(yù)設(shè)聚合規(guī)則,將多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合,可以包括:
將每一個(gè)源節(jié)點(diǎn)集合作為預(yù)設(shè)碰撞集合中的一個(gè)元素,并對(duì)預(yù)設(shè)碰撞集合中的元素進(jìn)行排序;
依次將每一個(gè)目的節(jié)點(diǎn)集合確定為候選集合;
針對(duì)當(dāng)前候選集合,按照碰撞集合中元素的順序,進(jìn)行當(dāng)前候選集合和當(dāng)前元素的差集和交集運(yùn)算,將所述當(dāng)前元素從當(dāng)前碰撞集合中刪除;并將當(dāng)前元素與當(dāng)前候選集合的差集,以及當(dāng)前元素與當(dāng)前候選集合的交集添加在當(dāng)前碰撞集合中;將當(dāng)前候選集合與所述當(dāng)前元素的差集,確定為當(dāng)前候選集合,直至當(dāng)前候選集合為空或與最后一個(gè)元素進(jìn)行差集和交集運(yùn)算完成后,當(dāng)前候選集合與當(dāng)前元素的差集不為空,并將當(dāng)前候選集合與當(dāng)前元素的差集添加在當(dāng)前碰撞集合中;
將最終碰撞集合中的同一元素包含的至少兩個(gè)節(jié)點(diǎn)進(jìn)行聚合。
實(shí)際應(yīng)用中,在將多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合后,還可以根據(jù)節(jié)點(diǎn)聚合的聚合結(jié)果,更新所述目標(biāo)有向拓?fù)鋱D,得到節(jié)點(diǎn)聚合后的有向拓?fù)鋱D。
應(yīng)用本發(fā)明實(shí)施例,首先確定有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系,根據(jù)確定的指向關(guān)系,獲得多個(gè)源節(jié)點(diǎn)集合和多個(gè)目的節(jié)點(diǎn)集合,最后按照預(yù)設(shè)聚合規(guī)則,將獲得的多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。不同于現(xiàn)有技術(shù)中依靠人工來聚合有向拓?fù)鋱D中的節(jié)點(diǎn),本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)節(jié)點(diǎn)聚合過程自動(dòng)化,從而降低錯(cuò)誤機(jī)率,并且將指向關(guān)系相同的節(jié)點(diǎn)聚合,能夠精簡(jiǎn)有向拓?fù)鋱D。
下面以一個(gè)具體實(shí)施例對(duì)本發(fā)明實(shí)施例所提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法進(jìn)行介紹。
如圖2所示,圖2為本發(fā)明實(shí)施例提供的一個(gè)具體實(shí)施例中節(jié)點(diǎn)聚合前的有向拓?fù)鋱D,圖中有A~O共15個(gè)節(jié)點(diǎn),由圖2可知,所有節(jié)點(diǎn)的之間的指向關(guān)系如下:
A→B,A→C,A→D,B→C,B→D,B→E,B→F,C→E,C→F,C→G,C→H,C→I,D→E,D→F,D→G,D→H,D→I,E→J,E→K,E→L,F(xiàn)→J,F(xiàn)→K,F(xiàn)→L,G→K,G→L,G→M,H→K,H→L,H→M,I→M,I→N,I→O,I→A。
根據(jù)上述指向關(guān)系,對(duì)指向關(guān)系中源節(jié)點(diǎn)相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合。例如以節(jié)點(diǎn)A為源節(jié)點(diǎn),A的目的節(jié)點(diǎn)有B、C、D,得到A的目的節(jié)點(diǎn)集合為{B,C,D};同樣的,確定其他節(jié)點(diǎn)作為源節(jié)點(diǎn)時(shí)所對(duì)應(yīng)的目的節(jié)點(diǎn)集合,如下:
B的目的節(jié)點(diǎn)集合為{C,D,E,F(xiàn)}
C的目的節(jié)點(diǎn)集合為{E,F(xiàn),G,H,I}
D的目的節(jié)點(diǎn)集合為{E,F(xiàn),G,H,I}
E的目的節(jié)點(diǎn)集合為{J,K,L}
F的目的節(jié)點(diǎn)集合為{J,K,L}
G的目的節(jié)點(diǎn)集合為{K,L,M}
H的目的節(jié)點(diǎn)集合為{K,L,M}
I的目的節(jié)點(diǎn)集合為{M,N,O,A}。
根據(jù)上述每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合,更新指向關(guān)系,例如源節(jié)點(diǎn)A指向目的節(jié)點(diǎn)集合{B,C,D},記為A→{B,C,D}。因此更新后的指向關(guān)系為:
A→{B,C,D}
B→{C,D,E,F(xiàn)}
C→{E,F(xiàn),G,H,I}
D→{E,F(xiàn),G,H,I}
E→{J,K,L}
F→{J,K,L}
G→{K,L,M}
H→{K,L,M}
I→{M,N,O,A}。
根據(jù)上述更新后的指向關(guān)系,對(duì)指向關(guān)系中目的節(jié)點(diǎn)集合相同的源節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)源節(jié)點(diǎn)集合。例如,源節(jié)點(diǎn)源節(jié)點(diǎn)C和D指向相同的目的節(jié)點(diǎn)集合{E,F(xiàn),G,H,I},因此將源節(jié)點(diǎn)C和D聚合,得到源節(jié)點(diǎn)集合{C,D},同樣的,聚合源節(jié)點(diǎn)E和F得到源節(jié)點(diǎn)集合{E,F(xiàn)},聚合源節(jié)點(diǎn)G和H得到源節(jié)點(diǎn)集合{G,H},另外源節(jié)點(diǎn)A、B、I分別作為源節(jié)點(diǎn)集合{A},{B},{I}。因此,獲得的目的節(jié)點(diǎn)集合和源節(jié)點(diǎn)集合及其指向關(guān)系如下,其中箭頭左側(cè)代表源節(jié)點(diǎn)集合,箭頭右側(cè)代表目的節(jié)點(diǎn)集合:
{A}→{B,C,D}
{B}→{C,D,E,F(xiàn)}
{C,D}→{E,F(xiàn),G,H,I}
{E,F(xiàn)}→{J,K,L}
{G,H}→{K,L,M}
{I}→{M,N,O,A}。
上述得到源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合為先獲得目的節(jié)點(diǎn)集合、后獲得源節(jié)點(diǎn)集合的結(jié)果。
若先獲得源節(jié)點(diǎn)集合、后獲得目的節(jié)點(diǎn)集合,則獲得的結(jié)果如下:
{A}→{B}
{A,B}→{C,D}
{B,C,D}→{E,F(xiàn)}
{C,D}→{G,H,I,J}
{E,F(xiàn)}→{J}
{E,F(xiàn),G,H}→{K,L}
{G,H,I}→{M}
{I}→{N,O,A}。
在得到源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合后,按照預(yù)設(shè)聚合規(guī)則,將源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。具體的,以先獲得目的節(jié)點(diǎn)集合、后獲得源節(jié)點(diǎn)集合的結(jié)果為例。首先將每一個(gè)源節(jié)點(diǎn)集合作為預(yù)設(shè)碰撞集合中的一個(gè)元素,并對(duì)預(yù)設(shè)碰撞集合中的元素進(jìn)行排序,排序后的預(yù)設(shè)碰撞集合中包含的元素為{A}、{B}、{C,D}、{E,F(xiàn)}、{G,H}、{I}。先將目的節(jié)點(diǎn)集合{B,C,D}確定為候選集合。
對(duì)于候選集合{B,C,D},按照碰撞集合中元素的順序,首先與碰撞集合中的第一個(gè)元素{A}進(jìn)行當(dāng)前候選集合和當(dāng)前元素的差集和交集運(yùn)算,并將當(dāng)前元素{A}從當(dāng)前碰撞集合中刪除。當(dāng)前元素{A}與當(dāng)前候選集合{B,C,D}的差集為集合{A},當(dāng)前元素{A}與當(dāng)前候選集合{B,C,D}的交集為空集將集合{A}和空集添加到當(dāng)前碰撞集合中,成為當(dāng)前碰撞集合中的元素。需要說明的是,由于空集中不包含任何節(jié)點(diǎn),因此將空集添加到當(dāng)前碰撞集合中不影響當(dāng)前碰撞集合中元素的組成,因此可以視為沒有將空集添加到當(dāng)前碰撞集合中。
當(dāng)前候選集合{B,C,D}與當(dāng)前元素{A}的差集為{B,C,D},因此將{B,C,D}確定為當(dāng)前候選集合,繼續(xù)與下一個(gè)元素{B}進(jìn)行上述處理過程。首先將當(dāng)前元素{B}從當(dāng)前碰撞集合中刪除,此時(shí)由于當(dāng)前元素{B}與當(dāng)前候選集合{B,C,D}的差集為空集當(dāng)前元素{B}與當(dāng)前候選集合{B,C,D}的交集為{B},因此將空集和集合{B}添加到當(dāng)前碰撞集合中,成為當(dāng)前碰撞集合中的元素。
此時(shí),當(dāng)前候選集合{B,C,D}與當(dāng)前元素{B}的差集為{C,D},因此將{C,D}確定為當(dāng)前候選集合,繼續(xù)與下一個(gè)元素{C,D}進(jìn)行上述處理過程。首先將當(dāng)前元素{C,D}從當(dāng)前碰撞集合中刪除,由于當(dāng)前元素{C,D}與當(dāng)前候選集合{C,D}的差集為空集交集為{C,D},因此將空集和集合{C,D}添加到當(dāng)前碰撞集合中,成為當(dāng)前碰撞集合中的元素。
到目前,由于當(dāng)前候選集合{C,D}與當(dāng)前元素{C,D}的差集為空集,因此以第一個(gè)目的節(jié)點(diǎn)集合為候選集合的處理過程已經(jīng)完成。即,可以將下一個(gè)目的節(jié)點(diǎn)集合確定為候選集合,重復(fù)執(zhí)行上述過程,以其他目的節(jié)點(diǎn)集合為候選集合進(jìn)行處理的具體過程可以參照上述相應(yīng)描述內(nèi)容,在此不做贅述。
為清楚起見,依次將每一個(gè)目的節(jié)點(diǎn)集合確定為候選集合進(jìn)行處理的過程如表1所示,其中,第二列的第一行為預(yù)設(shè)碰撞集合,第一列第二行到第六行表示目的節(jié)點(diǎn)集合依次為候選集合的順序,第二列的第二行到第六行依次為根據(jù)對(duì)應(yīng)的候選集合的順序進(jìn)行處理后的當(dāng)前碰撞集合。
表1
由表1可知,最終碰撞集合中的各元素依次為{A}、{B}、{C,D}、{E,F(xiàn)}、{G,H}、{I}、{J}、{K,L}、{M}、{N,O},因此可以將最終碰撞集合中的同一元素包含的至少兩個(gè)節(jié)點(diǎn)進(jìn)行聚合,具體的,將節(jié)點(diǎn)C、D進(jìn)行聚合,節(jié)點(diǎn)E、F進(jìn)行聚合,將節(jié)點(diǎn)G、H進(jìn)行聚合,將節(jié)點(diǎn)K、L進(jìn)行聚合,將節(jié)點(diǎn)N、O進(jìn)行聚合。
若以先獲得源節(jié)點(diǎn)集合、后獲得目的節(jié)點(diǎn)集合的方式,則依次將每一個(gè)目的節(jié)點(diǎn)集合確定為候選集合進(jìn)行處理的過程如表2所示。
表2
由表2可知,最終碰撞集合中的各元素依次為{A}、{B}、{C,D}、{E,F(xiàn)}、{G,H}、{I}、{J}、{K,L}、{M}、{N,O},因此可以將最終碰撞集合中的同一元素包含的至少兩個(gè)節(jié)點(diǎn)進(jìn)行聚合,具體的,將節(jié)點(diǎn)C、D進(jìn)行聚合,節(jié)點(diǎn)E、F進(jìn)行聚合,將節(jié)點(diǎn)G、H進(jìn)行聚合,將節(jié)點(diǎn)K、L進(jìn)行聚合,將節(jié)點(diǎn)N、O進(jìn)行聚合。
根據(jù)上述聚合結(jié)果,更新圖2所示的有向拓?fù)鋱D,得到節(jié)點(diǎn)聚合后的有向拓?fù)鋱D,如圖3所示。
由圖2和圖3所示的具體實(shí)施例可知,本發(fā)明實(shí)施例所提供的一種應(yīng)用于有向拓?fù)鋱D中的節(jié)點(diǎn)聚合方法,首先確定有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系,根據(jù)確定的指向關(guān)系,獲得多個(gè)源節(jié)點(diǎn)集合和多個(gè)目的節(jié)點(diǎn)集合,最后按照預(yù)設(shè)聚合規(guī)則,將獲得的多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。不同于現(xiàn)有技術(shù)中依靠人工來聚合有向拓?fù)鋱D中的節(jié)點(diǎn),本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)節(jié)點(diǎn)聚合過程自動(dòng)化,從而降低錯(cuò)誤機(jī)率,并且將指向關(guān)系相同的節(jié)點(diǎn)聚合,能夠有向精簡(jiǎn)拓?fù)鋱D,而且還能夠有效處理有向拓?fù)鋱D中的環(huán)狀結(jié)構(gòu),如圖2中的節(jié)點(diǎn)A和I。
下面以IP拓?fù)鋱D中的IP聚合為具體應(yīng)用實(shí)例,對(duì)本發(fā)明實(shí)施例所提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法進(jìn)行介紹,該具體應(yīng)用實(shí)例中能夠?qū)Σ煌瑢哟蔚墓?jié)點(diǎn)指向關(guān)系進(jìn)行聚合,確保IP拓?fù)鋱D中所有的節(jié)點(diǎn)不存在冗余,且將表現(xiàn)相同的節(jié)點(diǎn)聚合。
具體的聚合過程由Python程序?qū)崿F(xiàn),具體源文件有:
main.py,程序入口;
globalvar.py,用于默認(rèn)全局變量;
aggregation.py,包括各種聚合函數(shù);
drawtopology.py,用于利用節(jié)點(diǎn)聚合結(jié)果畫圖。
首先在利用源文件globalvar.py默認(rèn)全局變量之后,利用源文件main.py檢測(cè)程序運(yùn)行參數(shù),參數(shù)為二元的IP映射文件,文件內(nèi)容格式為“源IP目的IP”,參數(shù)的順序遵循實(shí)際網(wǎng)絡(luò)拓?fù)渲袕母邔拥降讓?,類似于“城市→機(jī)房→第一層Nginx→第二層Nginx(或Java服務(wù))→第三層Nginx(或Java服務(wù))→…”的結(jié)構(gòu)。該層次中,城市和機(jī)房在程序的處理中與IP等價(jià),均是進(jìn)行字符串的比對(duì),因此理論上本發(fā)明實(shí)施例所述的方法可以對(duì)任何字符串進(jìn)行聚合。當(dāng)沒有參數(shù)時(shí),按照默認(rèn)的三層Nginx(或Java服務(wù))處理,每一層的文件名分別為:
CITY_ISP_INFO="city_isp_info";
MACHINE_ROOM_INFO="first_level_nginx_ip";
FIRST_LEVEL_IP_TOPOLOGY_FILE="level1_nginx_ip_topology";
SECOND_LEVEL_IP_TOPOLOGY_FILE="level2_nginx_ip_topology";
NGINX_TOPOLOGY_GV_FILE="nginx_topology.gv"。
接下來做IP的聚合,需要調(diào)用所述源文件aggregation.py中的若干方法,其中:
函數(shù)dest_ip_aggregate(ip_file),用于聚合源IP相同的目的IP,得到每個(gè)源IP的目的IP集合;
函數(shù)source_ip_aggregate(ip_dict),用于聚合目的IP集合相同的源IP,得到源IP集合;
函數(shù)split_to_meta_set(meta_set,candidate_set),用于將每個(gè)聚合后的源IP集合作為預(yù)設(shè)碰撞集合中的一個(gè)元素,并調(diào)用collision_sputtering函數(shù);
函數(shù)collision_sputtering(stone,debris),用于按照預(yù)設(shè)聚合規(guī)則,將源IP集合和目的IP集合中的IP進(jìn)行聚合;
函數(shù)reformat_ip_aggregate(ip_dict,meta_set),用于根據(jù)IP聚合結(jié)果,更新指向關(guān)系。
最后,利用源文件drawtopology.py,使用畫圖工具Graphviz的DOT語(yǔ)言來描述IP拓?fù)浣Y(jié)構(gòu),生成聚合后的IP拓?fù)鋱D,使用的代碼可以為:dot example.gv–Tpng–o example.png。
綜上可知,本發(fā)明實(shí)施例提供的一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合方法,首先確定有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系,根據(jù)確定的指向關(guān)系,獲得多個(gè)源節(jié)點(diǎn)集合和多個(gè)目的節(jié)點(diǎn)集合,最后按照預(yù)設(shè)聚合規(guī)則,將獲得的多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。不同于現(xiàn)有技術(shù)中依靠人工來聚合有向拓?fù)鋱D中的節(jié)點(diǎn),本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)節(jié)點(diǎn)聚合過程自動(dòng)化,從而降低錯(cuò)誤機(jī)率,并且將指向關(guān)系相同的節(jié)點(diǎn)聚合,能夠精簡(jiǎn)有向拓?fù)鋱D。在實(shí)際應(yīng)用中,本發(fā)明實(shí)施例可以應(yīng)用于Nginx和Java服務(wù)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)的自動(dòng)化繪圖,代替原有手工聚合的方式,減少錯(cuò)誤的發(fā)生,也使IP服務(wù)管理的自動(dòng)化更進(jìn)一步。
相應(yīng)于上述方法實(shí)施例,本發(fā)明實(shí)施例還提供了一種應(yīng)用于有向拓?fù)鋱D的節(jié)點(diǎn)聚合裝置,如圖4所示,該裝置可以包括:
確定單元401,用于根據(jù)目標(biāo)有向拓?fù)鋱D,確定所述目標(biāo)有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系;
獲得單元402,用于根據(jù)所述指向關(guān)系,獲得源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合;
聚合單元403,用于按照預(yù)設(shè)聚合規(guī)則,將所述源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。
應(yīng)于本發(fā)明實(shí)施例,首先確定有向拓?fù)鋱D中所有節(jié)點(diǎn)之間的指向關(guān)系,根據(jù)確定的指向關(guān)系,獲得多個(gè)源節(jié)點(diǎn)集合和多個(gè)目的節(jié)點(diǎn)集合,最后按照預(yù)設(shè)聚合規(guī)則,將獲得的多個(gè)源節(jié)點(diǎn)集合和目的節(jié)點(diǎn)集合中的節(jié)點(diǎn)進(jìn)行聚合。不同于現(xiàn)有技術(shù)中依靠人工來聚合有向拓?fù)鋱D中的節(jié)點(diǎn),本發(fā)明實(shí)施例能夠?qū)崿F(xiàn)節(jié)點(diǎn)聚合過程自動(dòng)化,從而降低錯(cuò)誤機(jī)率,并且將指向關(guān)系相同的節(jié)點(diǎn)聚合,能夠精簡(jiǎn)有向拓?fù)鋱D。
在一種優(yōu)選的實(shí)施方式中,所述獲得單元402,可以包括:第一聚合子單元、第一更新子單元和第二聚合子單元(圖中未示出),其中,
第一聚合子單元,用于根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合;
第一更新子單元,用于根據(jù)每個(gè)源節(jié)點(diǎn)的目的節(jié)點(diǎn)集合,更新所述指向關(guān)系;
第二聚合子單元,用于根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)集合相同的源節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)源節(jié)點(diǎn)集合。
在另一種優(yōu)選的實(shí)施方式中,所述獲得單元402,可以包括:第三聚合子單元、第二更新子單元和第四聚合子單元(圖中未示出),其中,
第三聚合子單元,用于根據(jù)所述指向關(guān)系,對(duì)所述指向關(guān)系中目的節(jié)點(diǎn)相同的源節(jié)點(diǎn)進(jìn)行聚合,得到每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合;
第二更新子單元,用于根據(jù)每個(gè)目的節(jié)點(diǎn)的源節(jié)點(diǎn)集合,更新所述指向關(guān)系;
第四聚合子單元,用于根據(jù)更新后的指向關(guān)系,對(duì)所述指向關(guān)系中源節(jié)點(diǎn)集合相同的目的節(jié)點(diǎn)進(jìn)行聚合,得到多個(gè)目的節(jié)點(diǎn)集合。
優(yōu)選的,所述聚合單元403,可以包括:排序子單元、確定子單元、處理子單元和第五聚合子單元(圖中未示出),其中
排序子單元,用于將每一個(gè)源節(jié)點(diǎn)集合作為預(yù)設(shè)碰撞集合中的一個(gè)元素,并對(duì)所述預(yù)設(shè)碰撞集合中的元素進(jìn)行排序;
確定子單元,用于依次將每一個(gè)目的節(jié)點(diǎn)集合確定為候選集合;
處理子單元,用于針對(duì)當(dāng)前候選集合,按照所述碰撞集合中元素的順序,進(jìn)行當(dāng)前候選集合和當(dāng)前元素的差集和交集運(yùn)算,將所述當(dāng)前元素從當(dāng)前碰撞集合中刪除;并將所述當(dāng)前元素與所述當(dāng)前候選集合的差集,以及所述當(dāng)前元素與所述當(dāng)前候選集合的交集添加在當(dāng)前碰撞集合中;將所述當(dāng)前候選集合與所述當(dāng)前元素的差集,確定為當(dāng)前候選集合,直至當(dāng)前候選集合為空或與最后一個(gè)元素進(jìn)行差集和交集運(yùn)算完成后,所述當(dāng)前候選集合與所述當(dāng)前元素的差集不為空,并將當(dāng)前候選集合與所述當(dāng)前元素的差集添加在當(dāng)前碰撞集合中;
第五聚合子單元,用于將最終碰撞集合中的同一元素包含的至少兩個(gè)節(jié)點(diǎn)進(jìn)行聚合。
在實(shí)際應(yīng)用中,該裝置還可以包括:
更新單元(圖中未示出),用于根據(jù)節(jié)點(diǎn)聚合的聚合結(jié)果,更新所述目標(biāo)有向拓?fù)鋱D。
需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語(yǔ)僅僅用來將一個(gè)實(shí)體或者操作與另一個(gè)實(shí)體或操作區(qū)分開來,而不一定要求或者暗示這些實(shí)體或操作之間存在任何這種實(shí)際的關(guān)系或者順序。而且,術(shù)語(yǔ)“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語(yǔ)句“包括一個(gè)……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
本說明書中的各個(gè)實(shí)施例均采用相關(guān)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見即可,每個(gè)實(shí)施例重點(diǎn)說明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于裝置實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說明即可。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述方法實(shí)施方式中的全部或部分步驟是可以通過程序來指令相關(guān)的硬件來完成,所述的程序可以存儲(chǔ)于計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,這里所稱得的存儲(chǔ)介質(zhì),如:ROM/RAM、磁碟、光盤等。
以上所述僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換、改進(jìn)等,均包含在本發(fā)明的保護(hù)范圍內(nèi)。