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