唐乙雙,胡 洋,向 偉
(中國(guó)電子科技集團(tuán)公司第三十研究所,四川 成都 610041)
在傳統(tǒng)的互聯(lián)網(wǎng)(Internet Protocol,IP)網(wǎng)絡(luò)體系架構(gòu)中,作為核心設(shè)備的路由器包含路由決策和數(shù)據(jù)轉(zhuǎn)發(fā)等功能。隨著網(wǎng)絡(luò)規(guī)模的急劇膨脹,其結(jié)構(gòu)及其所承載的功能變得繁復(fù)不堪并且有越來(lái)越復(fù)雜的趨勢(shì)[1]。相對(duì)于互聯(lián)網(wǎng)通信協(xié)議第四版(Internet Protocol version 4,IPv4)網(wǎng)絡(luò),軟件定義網(wǎng)絡(luò)(Software Defined Network,SDN)技術(shù)的核心思想是實(shí)現(xiàn)網(wǎng)絡(luò)控制面和數(shù)據(jù)轉(zhuǎn)發(fā)面分離的架構(gòu),從而顯著減少了傳統(tǒng)網(wǎng)絡(luò)中路由器所承載的諸多大而全且復(fù)雜的功能。作為現(xiàn)今網(wǎng)絡(luò)通信技術(shù)領(lǐng)域的熱點(diǎn)技術(shù),SDN 被認(rèn)為代表著未來(lái)網(wǎng)絡(luò)通信技術(shù)的演進(jìn)發(fā)展方向。松耦合的邏輯控制和數(shù)據(jù)轉(zhuǎn)發(fā)、網(wǎng)絡(luò)狀態(tài)的集中控制、底層網(wǎng)絡(luò)設(shè)備對(duì)上層應(yīng)用透明、動(dòng)態(tài)可編程[2]是其最重要也是SDN 最顯著的特點(diǎn)。
控制與轉(zhuǎn)發(fā)分離是SDN 網(wǎng)絡(luò)架構(gòu)的基本特征之一。SDN 控制器通過(guò)網(wǎng)絡(luò)配置交換機(jī),SDN 交換機(jī)通過(guò)網(wǎng)絡(luò)發(fā)送設(shè)備信息到控制器。網(wǎng)絡(luò)的穩(wěn)定性問(wèn)題及SDN 交換機(jī)具體實(shí)現(xiàn)的差異性,會(huì)導(dǎo)致SDN 控制器與SDN 交換機(jī)之間出現(xiàn)數(shù)據(jù)不一致的問(wèn)題,甚至?xí)霈F(xiàn)SDN 交換機(jī)配置出錯(cuò)但是控制器卻一無(wú)所知的情況。如何保證控制器與交換機(jī)之間的數(shù)據(jù)一致性是構(gòu)建高可靠、高自愈SDN 網(wǎng)絡(luò)的關(guān)鍵。針對(duì)控制器與交換機(jī)之間數(shù)據(jù)一致性問(wèn)題,在目前大多數(shù)控制器開(kāi)源框架,如FloodLight、OpenDaylight 等,均專(zhuān)注于核心業(yè)務(wù),極少考慮到實(shí)際應(yīng)用中由于各種原因?qū)е碌目刂破髋c網(wǎng)絡(luò)設(shè)備間數(shù)據(jù)不同步的問(wèn)題。商用的控制器產(chǎn)品雖然具備維護(hù)配置數(shù)據(jù)一致性的相關(guān)功能,但大部分僅支持手動(dòng)配置維護(hù),自動(dòng)化程度較低,且在進(jìn)行數(shù)據(jù)查詢(xún)時(shí)通常才采用一次性拉取方式。該方式在交換機(jī)需要同步海量數(shù)據(jù)時(shí),顯得有些力不從心。
因此,在高安全可靠的SDN 控制器的設(shè)計(jì)中,本文提出一種基于數(shù)據(jù)快照的南向數(shù)據(jù)對(duì)賬技術(shù),通過(guò)該技術(shù),控制器通過(guò)定時(shí)數(shù)據(jù)快照比對(duì)的方式,基于優(yōu)先級(jí)、數(shù)據(jù)管理權(quán)限等完成交換機(jī)與控制器之間的數(shù)據(jù)對(duì)賬,發(fā)現(xiàn)并糾正出現(xiàn)的差錯(cuò)。此外,針對(duì)控制器與交換機(jī)的數(shù)據(jù)對(duì)賬需求,本文通過(guò)借鑒用于存儲(chǔ)網(wǎng)絡(luò)中軟故障恢復(fù)的快照技術(shù)[3],從數(shù)據(jù)建模、數(shù)據(jù)拉取、數(shù)據(jù)比對(duì)3 個(gè)方面出發(fā),設(shè)計(jì)一種基于數(shù)據(jù)快照的高可靠南向?qū)~系統(tǒng)。利用該系統(tǒng),控制器可以避免直接從海量數(shù)據(jù)中提取有用信息,而是使用定時(shí)數(shù)據(jù)快照比對(duì)的方式完成交換機(jī)與控制器之間的數(shù)據(jù)對(duì)賬,發(fā)現(xiàn)并糾正出現(xiàn)的差錯(cuò),極大提高了數(shù)據(jù)對(duì)賬的效率。
基于數(shù)據(jù)快照的南向數(shù)據(jù)對(duì)賬系統(tǒng)在設(shè)計(jì)上應(yīng)與控制器整體框架保持一致,并將整個(gè)設(shè)計(jì)融入到SDN 控制器整體框架中,細(xì)化自動(dòng)化配置數(shù)據(jù)一致性功能的業(yè)務(wù)邏輯,由此得到系統(tǒng)的總體架構(gòu)如圖1 所示。
圖1 系統(tǒng)結(jié)構(gòu)
圖1 展示的系統(tǒng)結(jié)構(gòu)是根據(jù)軟件工程中分層框架設(shè)計(jì)原則設(shè)計(jì)的?;跀?shù)據(jù)快照的南向數(shù)據(jù)對(duì)賬系統(tǒng)的總體架構(gòu)分為北向接口層、控制層以及南向接口層。
北向接口層為網(wǎng)絡(luò)管理員提供自動(dòng)對(duì)賬和日志管理接口。其中,自動(dòng)對(duì)賬接口為網(wǎng)絡(luò)管理員提供對(duì)賬管理的控制接口;日志管理接口主要負(fù)責(zé)向網(wǎng)絡(luò)管理員展示數(shù)據(jù)對(duì)賬服務(wù)的運(yùn)維狀態(tài)和輸出結(jié)果。
控制層主要根據(jù)網(wǎng)絡(luò)管理員設(shè)置的抽樣比例周期性地調(diào)用數(shù)據(jù)對(duì)賬服務(wù)對(duì)一定數(shù)量的網(wǎng)絡(luò)設(shè)備進(jìn)行配置一致性維護(hù)。
控制層提供的數(shù)據(jù)對(duì)賬服務(wù)是整個(gè)數(shù)據(jù)對(duì)賬系統(tǒng)的邏輯主體,主要負(fù)責(zé)根據(jù)抽樣比例自動(dòng)地選取控制器所管控的網(wǎng)絡(luò)設(shè)備進(jìn)行配置數(shù)據(jù)一致性的維護(hù)工作。在數(shù)據(jù)對(duì)賬服務(wù)中,數(shù)據(jù)修復(fù)與數(shù)據(jù)比對(duì)模塊是實(shí)現(xiàn)數(shù)據(jù)自動(dòng)對(duì)賬功能的基礎(chǔ),對(duì)賬管理、對(duì)賬設(shè)備選取與對(duì)賬權(quán)重維護(hù)模塊則負(fù)責(zé)制定數(shù)據(jù)對(duì)賬服務(wù)的依據(jù)。
南向接口層主要為數(shù)據(jù)對(duì)賬服務(wù)提供設(shè)備的維護(hù)和管理功能。其中設(shè)備通信模塊除作為數(shù)據(jù)對(duì)賬服務(wù)實(shí)現(xiàn)設(shè)備對(duì)賬管理的渠道外,也是控制器其他功能模塊賴(lài)以控制管理網(wǎng)絡(luò)設(shè)備的基礎(chǔ),這里本文僅需要利用控制器已有的設(shè)備通信模塊的完成網(wǎng)絡(luò)設(shè)備參數(shù)的查詢(xún)和設(shè)置,無(wú)需進(jìn)行特殊改造。數(shù)據(jù)拉取模塊負(fù)責(zé)周期性獲取網(wǎng)絡(luò)設(shè)備的實(shí)時(shí)配置參數(shù),是實(shí)現(xiàn)數(shù)據(jù)對(duì)賬服務(wù)完成數(shù)據(jù)比對(duì)的依據(jù)。
在南向數(shù)據(jù)對(duì)賬系統(tǒng)的3 層結(jié)構(gòu)中,控制層與南向接口層是實(shí)現(xiàn)數(shù)據(jù)對(duì)賬系統(tǒng)的核心部分,下文將展開(kāi)具體介紹。
南向接口層是數(shù)據(jù)對(duì)賬服務(wù)實(shí)現(xiàn)配置數(shù)據(jù)一致性的通道,數(shù)據(jù)對(duì)賬系統(tǒng)不僅需要利用設(shè)備通信單模塊來(lái)實(shí)現(xiàn)設(shè)備的參數(shù)查詢(xún)和配置,還需要通過(guò)數(shù)據(jù)拉取模塊來(lái)獲取實(shí)時(shí)的網(wǎng)絡(luò)設(shè)備配置數(shù)據(jù)。
1.2.1 設(shè)備通信模塊
設(shè)備通信模塊是控制器對(duì)底層網(wǎng)絡(luò)設(shè)備進(jìn)行集中管控的橋梁,該模塊提供了各種南向協(xié)議如OpenFlow、網(wǎng)絡(luò)配置(Network Configuration,NETCONF)等。每個(gè)被管控的網(wǎng)絡(luò)設(shè)備通信在設(shè)備通信模塊內(nèi)部都存在一個(gè)唯一的映射,每個(gè)映射對(duì)象都維護(hù)著一個(gè)與對(duì)應(yīng)設(shè)備建立的南向協(xié)議會(huì)話(huà),該會(huì)話(huà)負(fù)責(zé)控制器與網(wǎng)絡(luò)設(shè)備間的數(shù)據(jù)交互。本文所設(shè)計(jì)的數(shù)據(jù)對(duì)賬服務(wù)主要利用NETCONF[4]協(xié)議完成與網(wǎng)絡(luò)設(shè)備的信息交互。
1.2.2 數(shù)據(jù)拉取模塊
數(shù)據(jù)拉取模塊負(fù)責(zé)為數(shù)據(jù)比對(duì)提供數(shù)據(jù)源。數(shù)據(jù)拉取模塊負(fù)責(zé)利用NETCONF 協(xié)議進(jìn)行基于YANG 的數(shù)據(jù)建模,是針對(duì)NETCONF 訪(fǎng)問(wèn)的數(shù)據(jù)建模語(yǔ)言,它可以描述各種操作、數(shù)據(jù)、以及通知進(jìn)行建模,具有良好的可讀性和可擴(kuò)展性。根據(jù)需要,通過(guò)YANG 語(yǔ)言對(duì)控制器內(nèi)所要對(duì)賬的數(shù)據(jù)進(jìn)行建模,包括流表與業(yè)務(wù)配置。控制器數(shù)據(jù)庫(kù)在設(shè)計(jì)上分為Config datastore 與Running datastore[5]。Config datastore 用于保存控制器各功能模塊成功向網(wǎng)絡(luò)設(shè)備下發(fā)的配置數(shù)據(jù),Running datastore 用于從設(shè)備拉取回來(lái)的數(shù)據(jù)保存,用于作為數(shù)據(jù)比對(duì)時(shí)配置獲取的數(shù)據(jù)源。需要注意的是,設(shè)備的表項(xiàng)內(nèi)部會(huì)攜帶狀態(tài)數(shù)據(jù),比如統(tǒng)計(jì)、狀態(tài)等,這些數(shù)據(jù)會(huì)在建模時(shí)與配置數(shù)據(jù)一起定義,在數(shù)據(jù)拉取的時(shí)候狀態(tài)數(shù)據(jù)會(huì)被一同拉取回來(lái),但是比對(duì)的時(shí)候不需要考慮狀態(tài)數(shù)據(jù),狀態(tài)數(shù)據(jù)的拉取可用于應(yīng)用層面需要狀態(tài)同步的情形。
數(shù)據(jù)拉取模塊在進(jìn)行數(shù)據(jù)拉取前需要對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行分類(lèi),每一類(lèi)數(shù)據(jù)是一個(gè)datastore,比如Openflow 流表是一類(lèi),interface 配置是一類(lèi),路由表是一類(lèi),標(biāo)簽交換路徑(Label Switched Path,LSP)是一類(lèi)等等。業(yè)務(wù)數(shù)據(jù)分類(lèi)后,在設(shè)計(jì)業(yè)務(wù)數(shù)據(jù)的時(shí)候,需要為每一條業(yè)務(wù)數(shù)據(jù)加Index 標(biāo)簽定義,用于全局唯一標(biāo)識(shí)該數(shù)據(jù)表項(xiàng)。比如流表的標(biāo)簽是標(biāo)準(zhǔn)定義的,路由的標(biāo)簽或者LSP 的標(biāo)簽可以自己定義。
交換機(jī)內(nèi)的表項(xiàng)數(shù)據(jù)有時(shí)候規(guī)模非常大,比如流表可能達(dá)到上百KB 的級(jí)別,這么多表項(xiàng)如果一次同步拉取,一方面將影響控制器的性能,另一方面也會(huì)影響設(shè)備的管理性能。為此,本文將數(shù)據(jù)在分類(lèi)的基礎(chǔ)上再分塊(Data Block),數(shù)據(jù)塊的大小可調(diào)節(jié),默認(rèn)一個(gè)塊的數(shù)據(jù)是2 000 條。數(shù)據(jù)分塊之后,控制器向交換機(jī)拉取數(shù)據(jù)的時(shí)候,每次最多拉取一個(gè)塊的數(shù)據(jù)。由于數(shù)據(jù)存在標(biāo)簽,控制器知道上次拉取的位置,所以下次就從新的標(biāo)簽處開(kāi)始拉取,具體流程如圖2 所示。
圖2 數(shù)據(jù)拉取流程
控制層是南向數(shù)據(jù)對(duì)賬系統(tǒng)的邏輯主體,包括對(duì)賬管理、對(duì)賬設(shè)備選取、對(duì)賬權(quán)重維護(hù)、數(shù)據(jù)比對(duì)與數(shù)據(jù)修復(fù)5 個(gè)功能模塊。
1.3.1 對(duì)賬管理模塊
對(duì)賬管理模塊根據(jù)網(wǎng)絡(luò)管理員設(shè)定的時(shí)間周期定時(shí)地抽樣選取網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)比對(duì)工作。對(duì)賬管理模塊在初始化時(shí)會(huì)激活該模塊的守護(hù)進(jìn)程,該進(jìn)程將周期性地調(diào)用對(duì)賬設(shè)備選取模塊提供的服務(wù),并根據(jù)選取結(jié)果完成指定設(shè)備的數(shù)據(jù)比對(duì)工作。待數(shù)據(jù)比對(duì)工作執(zhí)行完畢后,對(duì)賬管理模塊將會(huì)調(diào)用北向接口層的日志管理接口記錄比對(duì)結(jié)果。
1.3.2 對(duì)賬設(shè)備選取模塊
考慮到網(wǎng)絡(luò)規(guī)模較大,網(wǎng)絡(luò)節(jié)點(diǎn)較多時(shí),一次性遍歷所有設(shè)備將會(huì)占用大量的網(wǎng)絡(luò)和計(jì)算資源,極大降低了控制器性能,因此需要增加對(duì)賬設(shè)備選取模塊來(lái)提高數(shù)據(jù)對(duì)賬的效率。對(duì)賬設(shè)備選取模塊通過(guò)調(diào)用對(duì)賬權(quán)重維護(hù)模塊抽樣選出對(duì)賬權(quán)重大的網(wǎng)絡(luò)設(shè)備,并將選出的網(wǎng)絡(luò)設(shè)備交給數(shù)據(jù)比對(duì)模塊,完成這些設(shè)備的數(shù)據(jù)對(duì)賬工作。對(duì)于數(shù)據(jù)比對(duì)模塊所返回的對(duì)賬結(jié)果,對(duì)賬設(shè)備選取模塊除了將比對(duì)結(jié)果傳遞對(duì)賬管理模塊外,還需要將結(jié)果信息作為下次對(duì)賬權(quán)重維護(hù)模塊進(jìn)行對(duì)賬權(quán)重調(diào)整的依據(jù)。一般而言,數(shù)據(jù)對(duì)賬的工作量級(jí)會(huì)隨著抽樣比例的增大而增加,網(wǎng)絡(luò)管理員可以根據(jù)控制器性能對(duì)賬靈活調(diào)整對(duì)賬管理任務(wù)的工作量級(jí)。
1.3.3 對(duì)賬權(quán)重維護(hù)模塊
該模塊主要負(fù)責(zé)為控制器在管的所有網(wǎng)絡(luò)設(shè)備設(shè)定對(duì)賬權(quán)重,使對(duì)賬設(shè)備選取模塊可以快速且具有針對(duì)性地選出將要進(jìn)行數(shù)據(jù)對(duì)賬的網(wǎng)絡(luò)設(shè)備。對(duì)賬權(quán)重維護(hù)模塊開(kāi)始運(yùn)行時(shí)會(huì)查詢(xún)所有網(wǎng)絡(luò)設(shè)備的設(shè)備ID 并為每個(gè)設(shè)備交換機(jī)分配一個(gè)初始權(quán)重,這個(gè)權(quán)重會(huì)根據(jù)隨著選取情況及后續(xù)對(duì)賬結(jié)果進(jìn)行動(dòng)態(tài)調(diào)整。對(duì)于上次選出且對(duì)賬成功的設(shè)備,在本次次選取時(shí)應(yīng)降低其對(duì)應(yīng)的權(quán)重值;對(duì)于在上次選出且對(duì)賬結(jié)果異常的設(shè)備,對(duì)賬權(quán)重維護(hù)模塊則應(yīng)該提高異常設(shè)備的對(duì)賬權(quán)重,確保其能夠在下一次數(shù)據(jù)對(duì)賬任務(wù)中被再次選中。另外,對(duì)賬權(quán)重也與上次選中進(jìn)行數(shù)據(jù)對(duì)賬的時(shí)間差成正比,假設(shè)第i次設(shè)備對(duì)賬權(quán)重W(si),第i-1 次設(shè)備對(duì)賬權(quán)重為W(si-1)。W(si)具體計(jì)算公式為:
式中:θ表示調(diào)節(jié)系數(shù);Δt表示本次計(jì)算距設(shè)備上次選中的時(shí)間差;ri-1表示上次設(shè)備對(duì)賬結(jié)果,一共有3 種取值,ri-1=1 時(shí)表示對(duì)賬成功,ri-1=-1 時(shí)表示對(duì)賬失敗,其他情況下ri-1=0。
由上述公式計(jì)算出的對(duì)賬權(quán)重來(lái)進(jìn)行設(shè)備選擇,權(quán)重越高表示設(shè)備優(yōu)先級(jí)越高。
1.3.4 數(shù)據(jù)修復(fù)模塊
數(shù)據(jù)比對(duì)完成后,對(duì)于存在異常配置的網(wǎng)絡(luò)設(shè)備,數(shù)據(jù)比對(duì)模塊會(huì)通知數(shù)據(jù)修復(fù)模塊進(jìn)行配置修復(fù)。數(shù)據(jù)修復(fù)模塊在接到命令后會(huì)根據(jù)比對(duì)結(jié)果生成對(duì)應(yīng)的策略,對(duì)網(wǎng)絡(luò)設(shè)備內(nèi)缺少的數(shù)據(jù),需要生成相應(yīng)策略補(bǔ)全對(duì)應(yīng)的設(shè)備參數(shù),對(duì)于多出來(lái)的數(shù)據(jù),同樣需要生成對(duì)應(yīng)策略,以便刪除掉這些配置。最后利用設(shè)備通信模塊完成對(duì)網(wǎng)絡(luò)設(shè)備配置數(shù)據(jù)的修復(fù),并將設(shè)備側(cè)返回的執(zhí)行結(jié)果加以解析和整理,返回處理結(jié)果給數(shù)據(jù)比對(duì)模塊。
1.3.5 數(shù)據(jù)比對(duì)模塊
數(shù)據(jù)比對(duì)模塊是整個(gè)南向數(shù)據(jù)對(duì)賬系統(tǒng)的核心模塊,主要負(fù)責(zé)對(duì)控制器與其所管控的網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)一致性檢查。數(shù)據(jù)比對(duì)模塊執(zhí)行時(shí),需要根據(jù)設(shè)備ID 從Running Datastore 和Config Datastore 中提取對(duì)賬設(shè)備的運(yùn)行數(shù)據(jù)和配置數(shù)據(jù),并將二者數(shù)據(jù)進(jìn)行比對(duì),然后將比對(duì)結(jié)果反饋給對(duì)賬設(shè)備選取模塊,用以作為對(duì)賬設(shè)備模塊進(jìn)行下一次設(shè)備選取的依據(jù)。在進(jìn)行數(shù)據(jù)比對(duì)時(shí),為了提高比對(duì)效率和速度,本文提出了一種基于差分快照的數(shù)據(jù)比對(duì)方法,下面將展開(kāi)具體介紹。
數(shù)據(jù)比對(duì)有兩種選擇,一種是基于數(shù)據(jù)庫(kù)內(nèi)抽象數(shù)據(jù)的比對(duì),另外一種基于業(yè)務(wù)類(lèi)型與條目的比對(duì)。由于網(wǎng)絡(luò)設(shè)備內(nèi)數(shù)據(jù)在順序的分布上可能和控制器不一致,所以選擇基于第二種比對(duì)方法,即基于業(yè)務(wù)數(shù)據(jù)類(lèi)型的條目比對(duì)。在對(duì)業(yè)務(wù)數(shù)據(jù)進(jìn)行條目比對(duì)時(shí),難點(diǎn)是比對(duì)數(shù)據(jù)量大、任務(wù)重??紤]到控制器的性能問(wèn)題,必須將比對(duì)任務(wù)離散化,即每次數(shù)據(jù)比對(duì)只是比對(duì)一部分?jǐn)?shù)據(jù),與數(shù)據(jù)拉取類(lèi)似,通過(guò)數(shù)據(jù)表項(xiàng)的索引來(lái)進(jìn)行多次的數(shù)據(jù)比對(duì)。
在進(jìn)行單條數(shù)據(jù)比對(duì)時(shí),考慮到如果對(duì)記錄數(shù)據(jù)的所有字段逐一比較來(lái)實(shí)現(xiàn),需要對(duì)整個(gè)數(shù)據(jù)庫(kù)的所有記錄信息進(jìn)行比對(duì),導(dǎo)致控制器開(kāi)銷(xiāo)較大??紤]到數(shù)據(jù)指紋技術(shù)可以通過(guò)提取記錄信息的特征來(lái)對(duì)原始信息進(jìn)行唯一的標(biāo)識(shí),由此來(lái)提高海量信息的檢索效率。因此,本文完全可以將原始數(shù)據(jù)用數(shù)據(jù)指紋生成單條表項(xiàng)的數(shù)據(jù)快照的方式來(lái)替代,解決海量數(shù)據(jù)比對(duì)的效率問(wèn)題。
有了基于數(shù)據(jù)指紋的數(shù)據(jù)快照,無(wú)需比較記錄的所有字段,只需比較該記錄的數(shù)據(jù)是否發(fā)生變化。本文中的數(shù)據(jù)指紋由單條數(shù)據(jù)表項(xiàng)的“主鍵”+“摘要信息”的方式構(gòu)成,“主鍵”采用單條數(shù)據(jù)表項(xiàng)的“Index 標(biāo)簽”表示,“摘要信息”采用信息-摘要算法(Message-Digest algorithm 5,MD5)算法[6]對(duì)整條項(xiàng)記錄計(jì)算出的“摘要”。
基于數(shù)據(jù)快照的數(shù)據(jù)比對(duì)的具體流程如下文所述:
輸入:f1、f2(Config Datastore、Running Datastore數(shù)據(jù)快照),f(f1的MD5 臨時(shí)表)
輸出:增量文件
開(kāi)始
按塊讀入方式將MD5 臨時(shí)表f 讀入內(nèi)存。
根據(jù)哈希函數(shù)h,計(jì)算內(nèi)存中f 每條記錄t1的值h(t1.Key),并建立相應(yīng)的哈希表。
按塊讀入新快照f(shuō)2。
對(duì)f2中的每條記錄t2,計(jì)算其記錄摘要即MD5值,將記錄的Key 值和MD5 值暫存到鏈表變量list中,同時(shí)根據(jù)哈希函數(shù)h計(jì)算h(t2,K),并與(2)中建立的哈希表進(jìn)行Key 值和MD5 值的匹配。
重復(fù)步驟(4),直到f2中的所有記錄都匹配完畢。
對(duì)哈希表中剩余的記錄,即未被匹配的記錄,作為被刪除的記錄輸出到增量文件中。
結(jié)束
數(shù)據(jù)快照的數(shù)據(jù)比對(duì)的流程中,初始化時(shí),創(chuàng)建表f1(Config datastore 數(shù)據(jù)快照),表f2(Running Datastore 的數(shù)據(jù)快照),臨時(shí)表f,這張表包含兩個(gè)字段,分別保存控制器Config datastore 每一條數(shù)據(jù)的Key 值和記錄摘要(即MD5 值),并在表f 中記錄Key 值和MD5 值,由此建立了Config datastore Key 值和MD5 值一一對(duì)應(yīng)的Hash 表。對(duì)通過(guò)數(shù)據(jù)拉取模塊獲取的實(shí)時(shí)更新的Running Datastore 的每一條記錄計(jì)算其數(shù)據(jù)指紋信息,并將生成的Key 值和MD5值與臨時(shí)表f中的Key值和MD5值進(jìn)行匹配,最后將匹配失敗的記錄輸出到增量文件中。
本文通過(guò)分析SDN 網(wǎng)絡(luò)中控制器與網(wǎng)絡(luò)設(shè)備配置數(shù)據(jù)一致性的高可靠性與實(shí)時(shí)性需求,設(shè)計(jì)了一種基于數(shù)據(jù)快照的南向數(shù)據(jù)對(duì)賬系統(tǒng)方案。該方案在遵循控制器基本框架的基礎(chǔ)上,巧妙地利用為NETCONF 協(xié)議服務(wù)的YANG 語(yǔ)言構(gòu)建數(shù)據(jù)模型,提出了基于分片分塊的數(shù)據(jù)巡檢拉取方法,避免了因一次同步造成的控制器性能下降問(wèn)題。并在數(shù)據(jù)比對(duì)過(guò)程中提出了一種采用數(shù)據(jù)快照來(lái)替代整條數(shù)據(jù)記錄的方式,生成數(shù)據(jù)快照由記錄的數(shù)據(jù)指紋(“主鍵+記錄摘要”)構(gòu)成,“記錄摘要”采用在信息摘要中廣泛應(yīng)用的MD5 算法對(duì)整條記錄計(jì)算生成,利用記錄的數(shù)據(jù)指紋來(lái)比較和替代記錄的全部字段比較,極大提高了數(shù)據(jù)比對(duì)效率。該機(jī)制為解決大規(guī)模的SDN 網(wǎng)絡(luò)環(huán)境的數(shù)據(jù)配置同步問(wèn)題提供了一種解決思路,對(duì)于新一代高可靠SDN 控制系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)有借鑒意義。