RFID中間件基于集群技術(shù)的研究與開(kāi)發(fā)
3.3 組件類(lèi)型
在確定組件協(xié)同工作機制之前, 首先需要定義一下組件的類(lèi)型:有狀態(tài)組件和無(wú)狀態(tài)組件。
有狀態(tài)組件:輸出結果的產(chǎn)生不只依賴(lài)當前的輸入數據,還依賴(lài)于之前的輸入數據。每一次輸入數據都會(huì )對后續結果的產(chǎn)生有影響。設備管理層的device 組件就是一個(gè)有狀態(tài)組件,因為device 組件中維護著(zhù)與讀寫(xiě)器之間的連接, 該連接是有狀態(tài)的,所以device 組件也是有狀態(tài)的。數據處理層的冗余過(guò)濾器也是有狀態(tài)的組件, 因為每次輸出結果時(shí)都要判斷指定時(shí)間內是否存在相同的數據。應用程序級接口層的EventCycle 組件CommandCycle組件也是有狀態(tài)的組件, 因為產(chǎn)生的報告與指定時(shí)間段內的所有數據有關(guān)。
無(wú)狀態(tài)組件:輸出結果的產(chǎn)生只與當前的輸入數據有關(guān)。在輸入數據確定的情況下,輸出數據也是確定的。數據處理層中的位過(guò)濾器是無(wú)狀態(tài)組件, 因為它只需要根據當前數據數據的EPC 碼來(lái)判斷是否符合過(guò)濾條件,與之前狀態(tài)無(wú)關(guān)。應用程序級接口層的Dispatcher 組件, 負責將產(chǎn)生的報告分發(fā)至指定URI,也是一個(gè)無(wú)狀態(tài)組件。
3.4 負載均衡
根據組件分類(lèi), 有狀態(tài)組件和無(wú)狀態(tài)組件我們將采用不同的策略。
對于無(wú)狀態(tài)組件,由于不涉及之前輸入數據的狀態(tài),數據即時(shí)產(chǎn)生即時(shí)處理。因此,我們在集群每一個(gè)節點(diǎn)處都創(chuàng )建出所有的無(wú)狀態(tài)組件, 每個(gè)節點(diǎn)的無(wú)狀態(tài)組件將通過(guò)一定負載均衡策略來(lái)獲得數據的處理權, 從而將數據計算處理的工作量分散到各個(gè)節點(diǎn)。
可以采用的負載均衡策略目前有2 種:
輪詢(xún)調度算法(Round-Robin Scheduling):針對每一個(gè)層次,把來(lái)自數據緩存總線(xiàn)的數據輪流分配給集群中各個(gè)節點(diǎn), 從1開(kāi)始,直到N(集群內節點(diǎn)數),然后重新開(kāi)始循環(huán)。由于無(wú)狀態(tài)組件不會(huì )占用高消耗的系統資源, 如數據庫連結、Socket 連接等(如果擁有連接,該組件應屬于有狀態(tài)組件),因此輪詢(xún)調度算法基本可以實(shí)現無(wú)狀態(tài)組件在各個(gè)節點(diǎn)上處理能力的負載均衡。
就近調度算法:在各個(gè)層次中,無(wú)狀態(tài)組件一般要與有狀態(tài)組件相結合,共同完成該層次所提供的功能。就近調度算法就是根據有狀態(tài)組件所處節點(diǎn)位置,來(lái)決定無(wú)狀態(tài)組件所處位置,使該層次中所有無(wú)狀態(tài)組件與有狀態(tài)組件處于同一個(gè)節點(diǎn)。這種算法的優(yōu)點(diǎn)就是當一個(gè)層次中所有串行操作的組件都處于同一個(gè)節點(diǎn)時(shí), 數據在每一個(gè)組件處理完成時(shí)不必在不同的節點(diǎn)間遷移, 大大減少了數據遷移時(shí)的時(shí)間延遲。該算法的缺點(diǎn)就是,負載均衡的效果很大程度上取決于有狀態(tài)組件的分布情況對于有狀態(tài)組件,參見(jiàn)后面的組件調度策略。
評論