射頻識別(RFID)中間件位于RFID閱讀器與上層服務器應用層之間,具有屏蔽底層設備、標簽數據清洗、數據交互等功能。目前,國內外許多企業以及機構也都致力于RFID 中間件的研究,如:IBM、Microsoft、清華同方等都有自己的RFID 中間件產品。 這些產品大多部署在服務器端,如果短時間內產生了海量RFID 數據,大量原始數據都將集中在服務器端,對中間件的數據處理能力是很大的考驗。同時,海量數據的傳輸會占用網絡帶寬,如果網絡出現故障,有可能會造成數據的丟失。隨著大數據時代的到來,傳統RFID 中間件的瓶頸逐漸暴露,直接影響系統的整體性能。因此,在面對海量RFID原始數據的情況下,如何減小服務器端處理壓力,降低系統對網絡的依賴性成為RFID 中間件急需解決的問題。本文就一種基于 NFC手機的RFID中間件進行研究與實現,將RFID 中間件技術與移動互聯網相結合,彌補了傳統RFID 中間件的不足之處,并且符合當前發展趨勢。
1 中間件設計方案
1.1 系統架構
根據RFID 中間件功能需求以及移動設備資源有限等特點,提出了如圖1 所示的系統架構。
圖1 系統總體架構圖
1)設備管理模塊主要包含 4 個部分,NFC讀卡部分負責調用手機自帶 NFC模塊進行讀取標簽信息;外接閱讀器管理部分兼容外接閱讀器驅動,并通過藍牙、WiFi、3G網絡等與之進行數據交互;工作日志管理部分主要對手機及中間件的工作日志進行管理;手機狀態查詢部分能夠實時地對手機電量、剩余存儲空間、信號等狀態進行查詢。
2)數據處理模塊主要包含5 個部分,協議校驗部分負責對RFID 標簽數據根據標識位進行初步校驗,去除殘缺的或者非本系統數據;標簽緩存部分采用BlockingQueue 隊列作為緩存將初步校驗后的數據存儲;冗余數據處理部分采用自適應的臨近排序算法(Sorted Neighborhood Method,SNM)去除冗余數據;數據校驗部分采用 CRC16 算法對標簽數據中的校驗源數據進行校驗,以此驗證標簽數據是否被篡改過;數據分類部分根據約定的數據規則將數據進行分類。
3)數據庫模塊采用 SQLite 嵌入式數據庫存儲處理好的數據。
4)數據交互模塊采用Quartz框架結合Socket編程實現中間件與服務器之間的數據交互。
5)任務管理模塊負責將服務器端發送來的命令文件進行緩存與管理。
1.2 系統設計重點
1.2.1 設備管理模塊
該模塊主要為對硬件設備的管理與監控,集成NFC以及外接讀卡器驅動,并且能夠對系統工作日志以及手機狀態進行查詢。
系統主要采用 NFC模塊對RFID 卡片進行讀寫,集成多種NFC標準,可自動判別卡片類型,相關代碼如下所示:
mTechLists =new String[][]{new String[]{MifareClassic.class.getName()},
new String[]{MifareUltralight.class.getName()},
new String[]{NdefFormatable.class.getName()},
new String[]{Ndef.class.getName()},
new String[]{IsoDep.class.getName()},
new String[]{NfcV.class.getName()},
new String[]{NfcF.class.getName()},
new String[]{NfcB.class.getName()},
new String[]{NfcA.class.getName()}};
為了使系統有良好的可擴展性,中間件兼容多種讀卡器驅動,通過藍牙、WiFi、3G 網絡等與外接讀卡器進行數據傳輸。
此外,提供良好的接口,可對中間件工作日志以及手機電量、信號強度、剩余存儲空間等信息進行實時查詢與管理。
1.2.2 數據處理模塊
1)數據緩存、校驗及冗余數據處理。
系統采用BlockingQueue 隊列作為緩存來存儲短時間內接收的大量數據。 將接收的卡片數據進行初步校驗,去除殘缺或者非本系統數據。
表1 為標簽數據格式,其中UID 為每個標簽唯一標識,校驗數據中前7 位是用于生成校驗碼的原始數據,第8 位為本系統標簽標識,且對每個標簽的前7位校驗數據采用 CRC16 算法生成校驗碼,與標簽UID 一起由服務器通過JSON 文件寫入到手機端數據庫中。 當讀取到標簽數據后,中間件首先根據校驗源數據中第8 位標識符來判斷該卡片是否為本系統所屬,然后采用相同的 CRC16 算法對前7 位校驗數據生成校驗碼,并根據標簽 UID 與數據庫中的校驗碼相比較,以此來判斷標簽數據是否被改寫。 8 位校驗源數據在校驗完成后需去掉,只將有用數據存儲。
表1 RFID 標簽數據格式
數據冗余是RFID 系統不可避免的問題,如果數據不清洗,大量有用、無用的數據會占用網絡帶寬,增加系統處理負擔;如果將接收的數據逐一與數據庫中的數據進行比對,雖然準確率高,但是面對大量的RFID數據時會降低系統效率,因此,針對移動端有限的資源以及對數據處理效率的綜合考慮,本系統采用SNM 算法來處理冗余數據。
數據清洗流程如圖2 所示。
圖2 數據清洗流程圖
2)數據分類。
將通過清洗的數據根據事先約定好的數據規則進行分類,比如事先規定卡片中第 Ni ~Nj 位為數據標識位,則將數據存儲到 SQLite 數據庫相應表格中。
1.2.3 數據交互模塊
該模塊負責移動端中間件與服務器之間的數據交互,在保證數據完整性、安全性的前提下,提高傳輸速度。 采用Socket 通信,以文件的方式傳輸命令與數據,模塊中采用 CRC 校驗確保文件安全,并且支持文件斷點上傳、下載。 將相關文件在移動端進行存儲與備份,即使網絡出現故障,中間件也可以正常工作,且不會造成數據丟失。
數據交互流程如圖3 所示。
圖3 數據交互模塊流程圖
中間件采用Quartz開源框架根據需求設置作業調度,在一定時間自動向服務器發送一次請求,若服務器端有新的命令,則獲取該命令,解析并執行,無需人工干預,且參數可由服務器端下發命令進行修改,自動化程度高,可配置性好,服務器端采用多線程處理中間件的請求,進而提高處理效率。
表2 數據交互模塊傳輸速度測試
表2 為對數據交互模塊傳輸速度的測試結果,其中測試數據為支持ISO15693 標準的RFID標簽數據,手機端通過3G 網絡向服務器端上傳RFID 標簽數據文件,支持文件斷點續傳,而且當文件傳輸完成后,還會在本地進行備份,避免文件數據丟失。 由于手機端緩存有限,且經過測試,發送的數據包如果過大會導致數據丟失,所以系統數據包大小設置為 1kB,且每發送一次數據包,都會加上報頭用以標識該手機以及報尾用作 CRC 校驗。 當數據量較小時,傳輸速度受報頭、報尾的影響較大,而當數據量增大時,報頭、報尾對數據傳輸速度的影響越來越少。 所以,當傳輸的數據量增大到一定程度時(100000 條數據左右),所消耗的時間基本上與數據量大小成正比,此外,數據傳輸速度受網絡因素以及設備讀寫速度影響較大。
1.2.4 任務管理模塊
將命令文件解析后依次執行,如果命令執行成功,則將命令文件移到備份文件夾中;如果由于網絡原因造成命令執行失敗,則將該命令加入到任務隊列,待網絡恢復后執行該命令,命令所需數據暫存在本地數據庫中。
如以下JSON 命令所示,status 表示命令狀態,即服務器端命令是否正常;order_type 表示命令類型,比如獲取數據、修改參數等;details 中表示要進行的詳細操作,其中的object 表示操作的對象;action 表示對該對象執行的操作,比如獲取某一類型的數據、獲取日志文件、獲取設備狀態或者是修改請求上傳/下載時間間隔等程序參數,使得該中間件可配置性好。
1.2.5 數據存儲模塊
中間件根據服務器端發送來的命令,將相關數據生成JSON 文件,發送到服務器端的同時,將JSON格式的數據文件備份到本地存儲設備中,防止由于網絡問題等原因造成的服務器端接收的數據不完整,只有服務器端收到完整數據,并且發送相關命令給中間件,中間件才能根據命令將相關數據文件刪除,以此節省移動設備的存儲空間。
1.3 系統優點
1)減輕服務器端負擔。
RFID原始數據經由多個部署在移動設備上的中間件進行處理,將處理后的有效數據發送到服務器端,這樣既減少服務器端的壓力,又減少網絡傳輸量,提高了系統運行效率。
2)具有數據存儲及備份功能,獨立性強。
移動設備的存儲性能越來越強,當網絡或者服務器端出現故障時,可將RFID數據存儲在移動設備中,有效避免數據丟失。 因此在斷網的情況下也可以正常工作,解決了以往RFID中間件技術對網絡的依賴。
3)操作靈活,部署簡單。
NFC手機集讀卡器、中間件于一體,可以根據數據量的大小增減設備數量,也可根據卡片分布對中間件位置做出調整,方便部署,同時也解決了以往RFID系統中讀卡器與中間件之間信息安全及傳輸速率問題。
4)系統可配置性高。
中間件與服務器端通過傳輸JSON命令來控制系統進行相關操作或者更改系統參數,比如獲取指定數據、改變數據交互時間間隔等。 同時,操作人員也可以通過系統界面對中間件參數進行設置,解決了以往中間件自動化低、可配置性差等缺點。
5)自動報警機制。
系統定期對設備日志及狀態信息進行自檢,若出現緊急狀況,比如設備電量不足、存儲空間過滿以及卡片信息被篡改等,可以及時地向指定的手機號碼發送預警信息,避免造成損失,彌補了以往中間件報警不及時的弊端。
2 系統實現及運行效果
系統采用 Java 語言基于 Eclipse 平臺編寫,數據庫為 SQLite 嵌入式數據庫,測試設備為魅族 MX3 智能手機,其 RAM 容量為 2 GB,CPU 頻率為 1638MHz,ROM 為 32 GB,測試用卡片遵循 ISO15693 標準,采用NFC模塊讀取卡片內容,部分運行界面如圖4 所示。
圖4 系統運行部分界面
當程序運行時,將手機連接電腦,在 Eclipse 中啟動 Dalvik 調試監控服務器 (Dalvik Debug MonitorService,DDMS),并通過 DDMS 自帶的 Heap 來查看系統消耗內存,顯示該程序所占內存為 22.628 M,CPU 占用率為6%,由此可見,該系統可在移動設備有限的資源中完美運行。 并且經測試,包含 1000 W條RFID數據的 SQLite 數據庫大小為188 M,從所占存儲空間來看,該RFID 中間件可部署于大部分主流移動設備中,并且可有效處理并存儲更多的數據。
為了模擬處理大量RFID 數據下系統工作狀況,編寫程序根據RFID數據規則自動生成測試數據,不同數據量的系統性能測試結果如表3 所示。
表3 中間件部分性能測試
表3 中T 表示將原始數據經過清洗并且存入數據庫所需時間,R和P分別表示數據清洗的召回率和正確率,R=系統正確識別的重復記錄數/數據集中實際包含的重復記錄數,P=系統正確識別的重復記錄數/系統總共檢索到的重復記錄數,Size表示保存相應數據量數據庫的大小。
可以看出,系統能夠滿足基本的數據處理要求,但數據清洗的召回率、正確率及所耗時間還有待提高,分析其原因主要是滑動窗口的大小以及排序關鍵字的選擇。 當窗口太小時,容易漏配,即去除冗余效果不佳,導致召回率不理想;當窗口太大時,會產生許多沒必要的比較,時間效果不理想。所以,采用自適應隨機窗口在二者間找到一個平衡點。 本系統選取的關鍵字是時間戳,而根據實際應用,新到達的RFID數據更能代表當前狀況,所以每次比較都保留最新時間戳數據,這樣,使得部分數據之間的時間閾值可能小于預設值,即有的數據被誤認為是重復數據,導致了準確率不是很理想。
3 結束語
本文提出了基于NFC手機的RFID中間件,由于NFC手機集讀卡器與中間件功能于一體,且有較好的存儲能力,即使在網絡出現故障時中間件仍然可以運行,同時也使得系統部署更為靈活;數據交互模塊采用Quartz框架與Socket編程相結合,自動化程度高;通過JSON命令或者良好的界面對參數進行設置,使得系統具有良好的可配置性;在系統發生異常時還可實時發出報警短信,以便及時處理;充分利用移動互聯網的優勢,將RFID 中間件與移動平臺完美結合,解決了傳統中間件的諸多不便之處。
評論
查看更多