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