隨著RFID(Radio Frequency Identification)技術的推廣,越來越多的企業開始使用RFID 技術, 并且正在被應用到很多著名的ERP 系統中去,例如EBS 和SAP 系統。在整合RFID 中間件和ERP 系統時,我們遇到了很多挑戰。對于大多數的ERP 系統,高可靠性、高可用性、高擴展性、高性能是至關重要的,因此在RFID 中間件與ERP 系統整合過程中,RFID 中間件也必須像必須向上層應用系統提供高質量的服務, 才能保證整個系統的高可靠性、高可用性、高擴展性、高性能。
為了解決這些問題, 我們將集群技術應用到中間件中來。RFID 中間件是基于組件的形式開發的,因此系統可以粗略的劃分為2 個部分:數據和組件。對于數據,我們可以利用集群的分布式數據管理模塊來處理, 通過分布式緩存服務形成同一的數據視圖,使得每個節點都可以訪問到其他節點的數據;通過復制緩存服務為每一個數據在不同節點產生一個備份, 使得數據具有高可靠性和高可用性。對于組件,我們通過組件調度策略是把所有的組件分配到不同的節點去, 以實現系統的高擴展性和高性能。
2 系統架構
2.1 整體架構
設備管理層:RFID 中間件的底層系統部分,完成對RFID 系統中的所有硬件設備的管理與監控。為不同生產廠家的讀寫設備提供了統一的接口,屏蔽了底層環境的異構性和復雜性;對各種硬件設備進行統一的管理, 極大地簡化和加快了應用系統和設備的集成。
數據處理層: 數據處理層需要對原始數據進行處理,包括數據過濾以消除重復讀取產生的冗余數據, 位過濾篩選感興趣的數據,數據聚合分組等等。從而減少數據量并且保留感興趣的數據。
應用程序級接口層:提供標準化的事件接口,應用系統可通過向其發送事件請求來訂閱需要的數據。事件請求中定義了數據處理的方式以及發送報告的格式。該層解析應用系統的事件請求,根據請求中的定義調用設備層獲取數據并對采集到的原始數據進行數據緩存、數據編碼解析、數據過濾和數據歸并等基本數據處理操作。最后將處理結果封裝成報告,發送給應用系統。
信息服務層:提供各種RFID 信息服務,包括存儲捕獲的事件、對事件進行推理、提供信息的查詢等,協助應用程序完成相應的業務操作。
業務集成層:用戶可以結合具體的業務,定義相應的業務模型, 由RFID 中間件根據定義的業務模型來輔助完成相應業務,最后將處理的結果與后臺應用系統進行整合。
集群服務層: 為上層的應用系統提供一個統一的中間件視圖,管理集群節點狀態,系統所有組件在各個節點間的分配,并且提供統一的分布式緩存視圖。
2.2 集群服務層
集群服務層主要由以下4 個部分組成:
跟蹤服務:該模塊主要管理集群系統內的節點成員列表和注冊服務列表。當節點啟動時,該服務自動啟動,并且將該節點加入到集群中,同時維護集群內其他節點列表,探測節點失敗狀態,并且維護集群中所注冊的服務列表(主要就是分布式緩存服務)。分布式緩存服務:該模塊允許節點去訪問其他節點的數據,這樣就可以使得數據只保存在一個節點中, 另外通過悲觀鎖來實現分布式緩存的一致性。
復制緩存服務: 該模塊同步的復制分布式緩存服務中的數據,將復制數據保存在其他節點上。當數據發生變動時,復制數據自動相應變動。當集群節點增加時,自動將復制數據均攤到新增節點中,實現復制數據的負載平衡。當集群節點發生故障或者離開集群時,備份數據自動變為可訪問數據,并且在其他節點備份該數據。
組件管理:該RFID 中間件是面向組件開發設計的,每個層次都是由多個組件串行或者并行組合實現其功能。該模塊就是通過制定一定的策略,來決定組件如何分布在各個節點,并且協同工作,來提高系統性能
3 系統實現
3.1 組件定義
組件是系統最基本的功能模塊, 每個層次的服務都是通過多個組件串行或者并行組合來實現其功能的。設備管理層的基本組件就是device 組件,每個device 組件對應一個實際讀寫器,所有的device 組件并行工作就組成了設備管理層。數據處理層的基本組件是各種過濾器,包括冗余過濾器、位過濾器等等,多個過濾器串行工作,使得要處理的數據依次通過這些過濾器,則實現了數據處理層的工作。
3.2 組件結構
每個組件都包含輸入和輸出, 在這里輸入和輸出都要掛在數據緩存總線上, 各個節點的數據緩存總線都有分布式緩存服務來管理,并且生成一致的數據視圖,這樣就把分布在各個節點的組件通過分布式緩存服務整合了起來。結構如下:
3.3 組件類型
在確定組件協同工作機制之前, 首先需要定義一下組件的類型:有狀態組件和無狀態組件。
有狀態組件:輸出結果的產生不只依賴當前的輸入數據,還依賴于之前的輸入數據。每一次輸入數據都會對后續結果的產生有影響。設備管理層的device 組件就是一個有狀態組件,因為device 組件中維護著與讀寫器之間的連接, 該連接是有狀態的,所以device 組件也是有狀態的。數據處理層的冗余過濾器也是有狀態的組件, 因為每次輸出結果時都要判斷指定時間內是否存在相同的數據。應用程序級接口層的EventCycle 組件CommandCycle組件也是有狀態的組件, 因為產生的報告與指定時間段內的所有數據有關。
無狀態組件:輸出結果的產生只與當前的輸入數據有關。在輸入數據確定的情況下,輸出數據也是確定的。數據處理層中的位過濾器是無狀態組件, 因為它只需要根據當前數據數據的EPC 碼來判斷是否符合過濾條件,與之前狀態無關。應用程序級接口層的Dispatcher 組件, 負責將產生的報告分發至指定URI,也是一個無狀態組件。
3.4 負載均衡
根據組件分類, 有狀態組件和無狀態組件我們將采用不同的策略。
對于無狀態組件,由于不涉及之前輸入數據的狀態,數據即時產生即時處理。因此,我們在集群每一個節點處都創建出所有的無狀態組件, 每個節點的無狀態組件將通過一定負載均衡策略來獲得數據的處理權, 從而將數據計算處理的工作量分散到各個節點。
可以采用的負載均衡策略目前有2 種:
輪詢調度算法(Round-Robin Scheduling):針對每一個層次,把來自數據緩存總線的數據輪流分配給集群中各個節點, 從1開始,直到N(集群內節點數),然后重新開始循環。由于無狀態組件不會占用高消耗的系統資源, 如數據庫連結、Socket 連接等(如果擁有連接,該組件應屬于有狀態組件),因此輪詢調度算法基本可以實現無狀態組件在各個節點上處理能力的負載均衡。
就近調度算法:在各個層次中,無狀態組件一般要與有狀態組件相結合,共同完成該層次所提供的功能。就近調度算法就是根據有狀態組件所處節點位置,來決定無狀態組件所處位置,使該層次中所有無狀態組件與有狀態組件處于同一個節點。這種算法的優點就是當一個層次中所有串行操作的組件都處于同一個節點時, 數據在每一個組件處理完成時不必在不同的節點間遷移, 大大減少了數據遷移時的時間延遲。該算法的缺點就是,負載均衡的效果很大程度上取決于有狀態組件的分布情況對于有狀態組件,參見后面的組件調度策略。
3.5 組件調度策略
該策略主要用來分配有狀態組件在各個節點的分布, 位于組件管理模塊中。
1) 平均分配策略
平均分配策略即將每個層次中的有狀態組件平均的分配到各個節點中。
該策略的優點是實現簡單, 在加入新節點或者節點故障時也比較容易在集群中重新分配組件。
該策略的缺點是大量的數據遷移帶來不可忽視的延遲。不同層次間的數據可能需要遷移到不同的節點, 來移交給下一個層次的組件來處。相同層次內,也有能由多個組件組成一個串行操作,當這些組件位于不同節點時,也會帶來大量的層次內組件間的數據遷移。
2) 流水分配策略
如上圖所示,流水分配策略就是類似于流水線作業,按層次分配組件,將相同層次的組件放在相同的節點中。
該策略的優點是實現也相對比較簡單。使得相同節點內串行操作組件的數據全部位于本地節點內, 完全消除這類數據操作遠程存儲和數據遷移的時間延遲。
該策略的缺點是不能做到負載均衡, 不同層次間的計算量差異較大,也就導致了不同節點間的負載不均衡。不同節點層次間的數據遷移量很大, 對于這一點可以利用分布式緩存服務的批量遷移功能,減少遷移次數,增大每次的遷移數據量,來減少時間延遲。
3) 并行分配策略
并行分配策略就是類似于并行作業,將處理相同邏輯的讀寫器定義為一個邏輯讀寫器組, 從邏輯讀寫器組出發,跟蹤數據流動的路徑,將數據流經的所有的組件都分配在同一個節點處。
該策略的優點是使得數據的本地副本只在一個節點內傳遞,盡可能的消除數據遠程調用和數據遷移的時間延遲,復制緩存服務也可以批量異步的完成備份數據的更新操作。
該策略的缺點是程序實現的復雜度高, 當邏輯不相關的組件之間的交叉引用增多時,該策略的效率將會明顯下降。這種情況下,應當考慮重新設計組件架構,適當增加重復組件,以減少不相關組件之間的交叉引用關系。
4 小結
本文第一次將集群技術引入到RFID 中間件中來。并且討論了分布式數據管理和組件調度策略。分布式數據管理通過分布式緩存服務形成同一的數據視圖, 使得每個節點都可以訪問到其他節點的數據; 通過復制緩存服務為每一個數據在不同節點產生一個備份,使得數據具有高可靠性和高可用性。組件調度策略是把所有的組件分配到不同的節點去, 以實現系統的高擴展性和高性能。最終實現了RFID 中間件的高可靠性、高可用性、高擴展性、高性能。
本文作者創新點: 本文第一次將集群技術引入到RFID 中間件中來, 并且討論了分布式數據管理和組件調度策略在中間件中的實現,最終實現了RFID 中間件的高可靠性、高可用性、高擴展性、高性能。