《一種基於記憶體的設備後台指令管理系統的控制》是浙江維融電子科技股份有限公司於2016年1月17日申請的專利,該專利的申請號為2016100291260,公布號為CN105426238A,授權公布日為2016年3月23日,發明人是魏偉、陳祥獻、商莖正、陳小勇、虞華鋒、馮國平、程露露、謝愛文。
《一種基於記憶體的設備後台指令管理系統的控制》公開了一種基於記憶體的設備指令管理系統的控制方法,通過任務安排器根據指令請求生成對設備的指令;指令快取到基於記憶體的指令池;採用獨立的指令狀態更新執行緒把指令持久化到資料庫,以及異步和批處理的方式更新資料庫中指令狀態;客戶端請求指令時直接從記憶體中查找。該發明採用記憶體哈希表來快取指令內容,記憶體根據客戶編號的哈希查詢是非常高效的,客戶端端在查詢時可以迅速獲得結果,並發性非常高。該發明對指令狀態採用異步定時批量更新方式,充分利用資料庫的批處理功能,相較於實時資料庫更新,不但極大提高持久化的效率,同時減少當前執行緒回響時間,避免當前執行緒阻塞。該發明清晰良好的結構,非常有利於擴展。
2018年12月20日,《一種基於記憶體的設備後台指令管理系統的控制》獲得第二十屆中國專利優秀獎。
基本介紹
- 中文名:一種基於記憶體的設備後台指令管理系統的控制方法
- 公告號:CN105426238A
- 授權日:2016年3月23日
- 申請號:2016100291260
- 申請日:2016年1月17日
- 申請人:浙江維融電子科技股份有限公司
- 地址:浙江省溫州市蒼南縣靈溪鎮蒼南縣工業園區塘河南路以北
- 發明人:魏偉、陳祥獻、商莖正、陳小勇、虞華鋒、馮國平、程露露、謝愛文
- Int.Cl.:G06F9/46(2006.01)I
- 代理機構:杭州求是專利事務所有限公司
- 代理人:忻明年
- 類別:發明專利
專利背景,發明內容,專利目的,技術方案,改善效果,附圖說明,技術領域,權利要求,實施方式,榮譽表彰,
專利背景
從2011年起,人民銀行要求銀行現金設備(A類點鈔機,清分機和ATM)具備識別人民幣冠字號功能,並且以標準FSN檔案格式向中心匯報,這樣所有的銀行現金設備都必須具備聯網功能。大銀行的省級分行下轄眾多網點擁有各類現金設備從幾千到幾萬不等,其中A類點驗鈔機占比最高。對眾多現金設備的管理,包括遠程監控,升級管理,黑名單管理,設備參數管理,數據匯總等成為難題,特別是在後台對設備的指令管理往往需要分地區單獨分設伺服器,比較占用伺服器資源,也不便伺服器維護和管理。
發明內容
專利目的
《一種基於記憶體的設備後台指令管理系統的控制方法》的目的在於提供一種基於記憶體設備後台指令管理系統的控制方法,把對設備的管理指令存放於記憶體,對指令的存取異常高效,可以對接非常多的終端設備,同時以異步方式進行指令的持久化,系統重啟之後指令不會丟失。
技術方案
《一種基於記憶體的設備後台指令管理系統的控制方法》技術方案如下:基於記憶體的指令管理系統及控制方法,包括:指令請求(CommandRequest),指令請求表(CommandRequestTable),指令規劃器(CommandScheduler),指令表(Commandtable),指令(Command),指令池(CommandPool)和任務安排器(QuartzJob)。
所述指令請求(CommandRequest)由管理員通過後台程式(瀏覽器)或者自動程式發出的一個命令,為一個指令請求,比如下發廣告信息。
所述指令規劃器(CommandScheduler)是一個把指令請求,根據系統設定的參數和邏輯,計算出指令發布的時間;指令規劃器需考慮每種指令請求的不同特點,比如不同指令請求的執行時間,有無上下行數據,上下行數據的大小,指令的實時性等,形成不同的算法來計算指令的發布時間,並維護指令的狀態。
所述指令表(Commandtable)持久化所有指令內容,里存放由指令規劃器生成的針對客戶端的所有指令,指令表以客戶端ID,指令編號,指令內容,狀態等格式存放。
所述指令(Command)中的一條數據稱為一條指令,它亦是伺服器對一個客戶端的一個命令。指令包含5種狀態,分別為創建(created),快取(pooled),傳送(sent),接收(accepted),完成(completed)。
所述指令池(CommandPool)是一個以客戶端ID/機具ID為Key,指令列表為value的哈希表。這個哈希表快取在記憶體里,通過Ehcache在不同instance(實例)間進行同步。
所述任務安排器(QuartzJob),根據設定時間間隔,掃描指令請求來生成指令清單,並放入基於記憶體的指令快取池(CommandPool)。
上述基於記憶體設備指令管理系統,其中,指令池(CommandPool)是一個存放各種設備指令一段記憶體,對指令池的讀,寫,改就是直接對記憶體的操作,效率非常高。
上述基於記憶體設備指令管理系統,其中,指令表(Commandtable)寫入和修改都以異步方式,不會阻塞當前執行緒。
上述基於記憶體設備指令管理系統,其中,指令(Command)狀態的變遷順序為:創建(created),快取(pooled),傳送(sent),接收(accepted),完成(completed)。
上述基於記憶體設備指令管理系統的控制方法,包括如下步驟:
步驟1:通過https、訊息或者socket的接口,指令規劃器(CommandScheduler)收到一條指令請求。
步驟2:指令規劃器(CommandScheduler)解析接收到的指令請求,並首先持久化指令請求(CommandRequest)到資料庫中指令請求表(CommandRequestTable)。
步驟3:指令規劃器(CommandScheduler)根據解析的指令請求(CommandRequest)內容,為請求範圍內的每個客戶端生成一條指令(Command),規劃指令執行的時間,並持久化指令(Command)到指令表(CommandTable),並標識狀態為創建(created)。
步驟4:任務安排器(QuartzJob)定時讀取指令請求表(CommandRequestTable),發現有未處理的指令請求(CommandRequest),根據指令請求編號從指令表(CommandTable)中提取對應的指令,放入指令池(CommandPool)。
步驟5:客戶端發起指令請求來獲取可執行指令。
步驟6:指令規劃器(CommandScheduler)根據客戶端編號查詢指令池(CommandPool),對指令進行編碼並返回給客戶端,同時更新該指令狀態為傳送(sent)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。
步驟7:客戶端接收到指令後,傳送指令狀態更新請求,指令規劃器(CommandScheduler)把指令從指令池(CommandPool)中移除,同時更新該指令狀態為接收(accepted)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。
步驟8:客戶端完成指令執行後,傳送指令狀態更新請求,指令規劃器(CommandScheduler)更新該指令狀態為完成(completed)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。
上述基於記憶體設備指令管理系統的控制方法,其中,步驟6,7,8還包括指令狀態更新過程,更新過程包括如下步驟:
步驟a:指令狀態更新執行緒(CommandStatusThread)偵聽指令狀態更新佇列(CommandStatusQueue)
步驟b:每隔設定時間(通常20秒),指令狀態更新執行緒(CommandStatusThread)取到指令狀態更新佇列(CommandStatusQueue)所有待更新指令,進行一次資料庫更新批處理,更新成功後,清除更新過的指令。
改善效果
1、《一種基於記憶體的設備後台指令管理系統的控制方法》採用記憶體哈希表來快取指令內容,記憶體根據客戶編號的哈希查詢是非常高效的,客戶端端在查詢時可以迅速獲得結果,並發性非常高。
2、《一種基於記憶體的設備後台指令管理系統的控制方法》對指令狀態採用異步定時批量更新方式,充分利用資料庫的批處理功能,相較於實時資料庫更新,不但極大提高持久化的效率,同時減少當前執行緒回響時間,避免當前執行緒阻塞。
3、《一種基於記憶體的設備後台指令管理系統的控制方法》清晰良好的結構,非常有利於擴展。
附圖說明
圖1為基於記憶體設備指令管理系統的控制方法流程圖;
圖2為基於記憶體指令管理系統控制指令狀態遷移圖;
圖3為基於記憶體指令管理系統拓撲圖。
技術領域
《一種基於記憶體的設備後台指令管理系統的控制方法》涉及一種基於記憶體的設備後台指令管理系統的控制方法,具體涉及一種基於記憶體的現金設備(如點鈔機、清分機及ATM等)後台指令系統包括生成、保存、傳送的控制方法。
權利要求
1.一種基於記憶體的設備後台指令管理系統的控制方法,其特徵在於,所述方法包括如下步驟:
步驟1:通過https、訊息或者socket的接口,指令規劃器(CommandScheduler)收到一條指令請求;
步驟2:指令規劃器(CommandScheduler)解析接收到的指令請求,並首先持久化指令請求(CommandRequest)到資料庫中指令請求表(CommandRequestTable);
步驟3:指令規劃器(CommandScheduler)根據解析的指令請求(CommandRequest)內容,為請求範圍內的每個客戶端生成一條指令(Command),規劃指令執行的時間,並持久化指令(Command)到指令表(CommandTable),並標識狀態為創建(created);
步驟4:任務安排器(QuartzJob)定時讀取指令請求表(CommandRequestTable),發現有未處理的指令請求(CommandRequest),根據指令請求編號從指令表(CommandTable)中提取對應的指令,放入指令池(CommandPool);
步驟5:客戶端發起指令請求來獲取可執行指令;
步驟6:指令規劃器(CommandScheduler)根據客戶端編號查詢指令池(CommandPool),對指令進行編碼並返回給客戶端,同時更新該指令狀態為傳送(sent)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態;
步驟7:客戶端接收到指令後,傳送指令狀態更新請求,指令規劃器(CommandScheduler)把指令從指令池(CommandPool)中移除,同時更新該指令狀態為接收(accepted)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態;
步驟8:客戶端完成指令執行後,傳送指令狀態更新請求,指令規劃器(CommandScheduler)更新該指令狀態為完成(completed)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。
2.根據權利要求1所述一種基於記憶體的設備後台指令管理系統的控制方法,其特徵在於,所述步驟2中所述指令規劃器(CommandScheduler)根據系統設定的參數和邏輯,計算出指令發布的時間,並維護指令的狀態。
3.根據權利要求1所述一種基於記憶體的設備後台指令管理系統的控制方法,其特徵在於,所述步驟3中所述規劃指令執行的時間,由用戶指定一個日期時間,系統根據設定的一批執行機器的數量及每批執行的間隔時間,來為每台機器的執行指令設定具體的執行時間;所述一批執行機器的數量及每批執行的間隔時間,通過系統配置來設定。
4.根據權利要求1所述一種基於記憶體的設備後台指令管理系統的控制方法,其特徵在於,所述步驟6中所述指令池(CommandPool)是一個以客戶端編號(ID)或機具編號(ID)為鍵(Key),指令列表為值(value)的哈希表;這個哈希表快取在記憶體里,通過高速快取(Ehcache)在不同實例(instance)間進行同步。
5.根據權利要求1所述一種基於記憶體的設備後台指令管理系統的控制方法,其特徵在於,步驟6、7、8中,指令狀態更新過程,包括以下步驟:步驟a:指令狀態更新執行緒(CommandStatusThread)偵聽指令狀態更新佇列(CommandStatusQueue);步驟b:每隔設定時間,指令狀態更新執行緒(CommandStatusThread)取到指令狀態更新佇列(CommandStatusQueue)所有待更新指令,進行一次資料庫更新批處理,更新成功後,清除更新過的指令。
實施方式
《一種基於記憶體的設備後台指令管理系統的控制方法》的總體思路是通過任務安排器根據指令請求(CommandRequest)生成對設備的指令(Command);指令快取到基於記憶體的指令池(CommandPool);採用獨立的指令狀態更新執行緒(CommandStatusThread)把指令持久化到資料庫,以異步和批處理的方式更新資料庫中指令狀態;客戶端請求指令時直接從記憶體中查找。以下通過實施例對《一種基於記憶體的設備後台指令管理系統的控制方法》的方法做進一步闡述。
該實施例具體涉及一種基於記憶體的現金設備(如點鈔機、清分機及ATM等)後台指令系統包括生成、保存、傳送的控制方法。
具體地,如圖1所示,《一種基於記憶體的設備後台指令管理系統的控制方法》提出的一種基於記憶體設備指令管理系統的控制方法,包括步驟:
步驟1:用戶在瀏覽器上發布一條設備控制指令,或者其他系統發布一條設備控制指令;指令通過https,訊息或者socket的接口傳到指令規劃器(CommandScheduler),這樣指令規劃器就收到一條指令請求。
步驟2:指令規劃器(CommandScheduler)解析接收到的指令請求,並先持久化指令請求(CommandRequest)到指令請求表(CommandRequestTable)。不同指令有不同的內容,解析指令採用工廠模式來生成不同指令對應的解析器。
步驟3:指令規劃器(CommandScheduler)根據解析的指令請求(CommandRequest)內容,為請求範圍內的每個客戶端生成一條指令(Command),規劃指令執行的時間,並持久化指令(Command)到指令表(CommandTable),並標識狀態為創建(created)。指令規劃的方法依據用戶的設定,主要參數是指令請求的設定時間,每批次傳送給多少台機具,間隔時間是多少秒。
步驟4:任務安排器(QuartzJob)定時讀取指令請求表(CommandRequestTable),發現有未處理的指令請求(CommandRequest),根據指令請求編號從指令表(CommandTable)中提取對應的指令,放入指令池(CommandPool)。任務安排器根據給定的時間間隔,反覆去查詢指令請求表。因為指令請求表存放的是指令請求,所以通常數據量很小,查詢速度很快。
步驟5:客戶端發起指令查詢請求,客戶端在開啟,定時和用戶觸發三種情況下發起對後台指令管理系統的指令查詢。
步驟6:指令規劃器(CommandScheduler)根據客戶端編號查詢指令池(CommandPool),對指令進行編碼返回給客戶端,同時把更新該指令狀態為傳送(sent)狀態放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。
步驟7:客戶端接收到指令後,傳送指令狀態更改請求,指令規劃器(CommandScheduler),把指令從指令池(CommandPool)中移除,同時把更新該指令狀態為接收(accepted)狀態放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。
步驟8:客戶端完成指令執行後,傳送指令狀態更新請求,指令規劃器(CommandScheduler)更新該指令狀態為完成(completed)狀態並放入指令狀態更新佇列(CommandStatusQueue),由指令狀態更新執行緒(CommandStatusThread)自動異步更新指令狀態。指令狀態更新執行緒(CommandStatusThread)以事件模型的方式運轉,指令更新放入指令狀態更新佇列(CommandStatusQueue)後會通知指令狀態更新執行緒(CommandStatusThread),同時根據設定的時間間隔來對指令狀態進行資料庫批處理更新。
參見附圖2基於記憶體指令管理系統控制指令狀態遷移圖,指令有5種狀態分別為創建(created),快取(pooled),傳送(sent),接收(accepted),完成(completed)。指令創建後,由任務安排器(QuartzJob)放入快取池,狀態更新為快取(pooled);客戶端來請求指令時,指令規劃器(CommandScheduler)從基於記憶體的快取池中取出指令並傳送給客戶端,指令狀態改為傳送(sent);客戶端接收到指令後,指令狀態改為傳送(accepted);客戶端執行指令後,不管成功失敗,指令狀態根系更新為完成(completed),若失敗,備註中附加失敗信息和原因。
參見附圖3基於記憶體指令管理系統拓撲圖,控制人員在瀏覽器中對後台指令管理系統發出指令請求(CommandRequest),後台指令管理系統生成指令並傳送給設備(點鈔機,ATM和清分機),設備接收到指令後執行指令,執行後反饋給後台指令管理系統。
榮譽表彰
2018年12月20日,《一種基於記憶體的設備後台指令管理系統的控制》獲得第二十屆中國專利優秀獎。