程茂上 ,項 前,余玉風,黃 曦,呂志軍
(1.東華大學(xué) 機械工程學(xué)院,上海 201620;2.上海精星物流設(shè)備工程有限公司,上海 201611)
作為一種物流倉儲系統(tǒng),電子標簽揀選系統(tǒng)是一組安裝在貨架上的電子顯示裝置取代揀貨單,指示應(yīng)揀取的物品及數(shù)量,引導(dǎo)揀貨人員準確、高效地完成揀貨工作[1]。根據(jù)揀貨方式不同,主要分為摘取式(DPS)與播種式(DAS)。摘取式揀選法是針對每一份訂單揀選,系統(tǒng)依據(jù)訂單號點亮所需物料的貨位電子標簽,引導(dǎo)揀貨員揀選物料;播種式揀選法是針對批量訂單揀選,每個貨位代表一份訂單,先匯總多份訂單需要各種物料的數(shù)量,系統(tǒng)再根據(jù)物料號將需要該物料的貨位電子標簽點亮,引導(dǎo)揀貨員分發(fā)物料[2]。
目前,電子標簽揀選系統(tǒng)多采用單體架構(gòu)。文獻[3,4]中采用單體架構(gòu)與C/S模式構(gòu)建單體式倉儲揀選系統(tǒng),驗證了電子標簽揀選系統(tǒng)對傳統(tǒng)揀選效率、準確率的極大提升;文獻[5,6]中采用MVC三層架構(gòu)與B/S模式,融入SignalR實時Web通信服務(wù),實現(xiàn)了揀選作業(yè)遠程實時監(jiān)控功能。實際應(yīng)用中,單體架構(gòu)下的倉儲揀選系統(tǒng),作業(yè)效率受限于服務(wù)器的性能,無法更好地滿足高并發(fā)處理的要求。此外,當服務(wù)器宕機時,整個系統(tǒng)將面臨癱瘓的風險。微服務(wù)架構(gòu)作為一種架構(gòu)模式,以業(yè)務(wù)為導(dǎo)向構(gòu)建不同的服務(wù),且每個服務(wù)運行于獨立進程中,通過輕量級的訪問機制實現(xiàn)互聯(lián)互通,具有并發(fā)處理能力強、容錯性強等特點[7,8]。上述研究表明,蓬勃發(fā)展的互聯(lián)網(wǎng)技術(shù)促進了傳統(tǒng)倉儲系統(tǒng)的升級,本文基于微服務(wù)架構(gòu),以ASP.NET Core MVC、實體框架[9]數(shù)據(jù)庫訪問技術(shù)等搭建電子標簽揀選系統(tǒng),采用SignalR[10]服務(wù)實現(xiàn)Web實時監(jiān)控功能,結(jié)合消息中間件[11]技術(shù)實現(xiàn)分布式架構(gòu)下業(yè)務(wù)一致性。
電子標簽揀選系統(tǒng)架構(gòu)如圖1所示。該系統(tǒng)主要由三類服務(wù)構(gòu)成:應(yīng)用微服務(wù)、作業(yè)微服務(wù)與標簽操作微服務(wù)。
應(yīng)用微服務(wù)是揀選系統(tǒng)的入口,通過人機交互,實現(xiàn)權(quán)限管理、訂單管理、作業(yè)管理以及監(jiān)控管理等。通過訂單拆分功能,將訂單拆分成多項作業(yè),當需要下發(fā)作業(yè)來點亮電子標簽時,僅需向作業(yè)服務(wù)發(fā)出請求,作業(yè)服務(wù)會自動調(diào)用標簽操作服務(wù)完成標簽的點亮工作;當需要人工干預(yù)標簽的狀態(tài)時,僅需要在APP的監(jiān)控界面,模擬現(xiàn)場操作,即可遠程控制標簽狀態(tài)。
作業(yè)微服務(wù),用于接收APP的作業(yè)請求,將獲取到的符合規(guī)范的作業(yè)信息轉(zhuǎn)化為電子標簽控制信息,并下發(fā)到標簽操作服務(wù)。每當作業(yè)進度有更新時,作業(yè)服務(wù)通過SignalR向APP推送作業(yè)狀態(tài)改變信息。
標簽操作微服務(wù),用于接收作業(yè)微服務(wù)的請求,調(diào)用標簽SDK改變電子標簽的狀態(tài),并將狀態(tài)信息保存至數(shù)據(jù)庫中;負責接收揀貨員拍擊完成器產(chǎn)生的事件,并通知作業(yè)微服務(wù)改變作業(yè)狀態(tài)。當貨位標簽狀態(tài)有更新時,標簽操作服務(wù)通過SignalR向APP推送標簽狀態(tài)改變信息。
圖1 系統(tǒng)架構(gòu)圖
為了協(xié)同各微服務(wù),實現(xiàn)分布式架構(gòu)下高可用的電子標簽揀選系統(tǒng),需要在微服務(wù)管理、設(shè)備實時監(jiān)控與揀選業(yè)務(wù)集成方面進一步研究。
該電子標簽揀選系統(tǒng)中涉及的技術(shù)如表1所示。
1)微服務(wù)注冊與發(fā)現(xiàn)
隨著微服務(wù)數(shù)量增加,每個微服務(wù)需要對所有目標服務(wù)的網(wǎng)絡(luò)位置進行配置,而當某個微服務(wù)的部署地址發(fā)生變化時,該微服務(wù)的調(diào)用方的配置也要進行改變,導(dǎo)致開發(fā)與管理難度進一步加大,需要微服務(wù)發(fā)現(xiàn)機制進行協(xié)作。在比較Consul、Zookeeper、Etcd等服務(wù)發(fā)現(xiàn)組件后,結(jié)合揀選系統(tǒng)現(xiàn)有架構(gòu),選用Consul組件,利用HTTP或DNS方式完成微服務(wù)注冊與發(fā)現(xiàn),結(jié)合key-value儲存服務(wù)實現(xiàn)了動態(tài)配置網(wǎng)絡(luò)位置,為揀選系統(tǒng)提供更全面可靠的健康檢查,最終實現(xiàn)微服務(wù)的高可用性[12,13]。
2)倉儲設(shè)備虛擬化監(jiān)控技術(shù)
本文基于Web技術(shù)實現(xiàn)對倉儲設(shè)備的監(jiān)測與控制。首先通過設(shè)備虛擬化,將電子標簽揀選設(shè)備封裝成類庫,將標簽操作行為封裝成類庫的方法,再根據(jù)不同的業(yè)務(wù)邏輯封裝成微服務(wù),最后結(jié)合MVC技術(shù)將微服務(wù)封裝成Web API,為設(shè)備的遠程監(jiān)控提供支持。其三層封裝結(jié)構(gòu)如圖2所示。
SignalR框架能夠?qū)崿F(xiàn)服務(wù)端向前端實時推送數(shù)據(jù)功能。在服務(wù)端創(chuàng)建SignalR中心以及廣播方法,在客戶端采用JavaScript技術(shù)連接到中心。當服務(wù)端需要推送消息到前端時,僅需要調(diào)用中心的廣播方法,即連接的客戶端皆可以收到消息。客戶端在接收到消息后,更新前端界面,實現(xiàn)遠程實時監(jiān)測??紤]到Web通信成本,在不影響監(jiān)測實時性的基礎(chǔ)上,設(shè)計每隔500毫秒,通過SignalR向前端推送監(jiān)控信息,降低通信頻次;采用AJAX技術(shù)實現(xiàn)監(jiān)控局部更新,降低網(wǎng)絡(luò)傳輸流量,提高網(wǎng)頁更新速度,從而以降低網(wǎng)絡(luò)擁堵與系統(tǒng)能耗。以揀選設(shè)備實時監(jiān)測為基礎(chǔ),通過調(diào)用Web API來控制設(shè)備動作,從而實現(xiàn)遠程虛擬化監(jiān)控功能。
圖2 標簽操作微服務(wù)結(jié)構(gòu)圖
表1 電子標簽揀選系統(tǒng)主要技術(shù)簡介
3)微服務(wù)架構(gòu)下倉儲業(yè)務(wù)集成
微服務(wù)部署在不同的計算機上,通信本質(zhì)是進程間通信(IPC)?;贖TTP的REST通信模式無需中間代理,簡單易調(diào)試,當需要訪問目標服務(wù)時,通過微服務(wù)發(fā)現(xiàn)機制,獲取服務(wù)實例的URL,即可通過HTTP協(xié)議建立通信,采用GET與POST方式訪問到目標服務(wù),實現(xiàn)微服務(wù)間數(shù)據(jù)傳遞。針對分布式系統(tǒng)網(wǎng)絡(luò)通信延時、通信故障導(dǎo)致信息缺失問題,根據(jù)ACID理論,為了保證事務(wù)一致性,采用RabbitMQ[14]作消息中間件,消息生產(chǎn)者使用API向代理發(fā)布事件,代理可以向消費者提供訂閱服務(wù),并且在事件發(fā)生時通知消費者[15]。如DPS作業(yè)過程中,在揀選系統(tǒng)下發(fā)任務(wù)后,需要請求標簽操作服務(wù)以改變標簽狀態(tài),請求數(shù)據(jù)庫服務(wù)記錄標簽狀態(tài)、更新任務(wù)進度信息等,其中請求方作為消息生產(chǎn)者,生產(chǎn)消息并發(fā)送給交換器,通過選定的路由規(guī)則將消息送至指定的隊列中,目標微服務(wù)作為消費者,從隊列中獲取消息并消費,從而實現(xiàn)微服務(wù)之間異步協(xié)作。在此基礎(chǔ)上,當微服務(wù)出現(xiàn)宕機或重啟時,電子標簽會根據(jù)標簽數(shù)據(jù)庫中的信息進行初始化,實現(xiàn)現(xiàn)場恢復(fù)。
根據(jù)倉儲布局與業(yè)務(wù)邏輯抽象出實體模型,構(gòu)建系統(tǒng)E-R圖,如圖3所示。在布局管理方面,根據(jù)倉儲現(xiàn)場布置對倉庫、單元、貨架、貨位、設(shè)備與標簽進行虛擬化,并將參數(shù)存入數(shù)據(jù)庫中,便于監(jiān)測與維護。在庫存管理方面,托盤與物料之間存在中間表,負責記錄托盤中存放物料與數(shù)量,而庫存表記錄貨位與托盤的關(guān)系,根據(jù)貨位即可查出存放的物料信息。在作業(yè)管理方面,將客戶與訂單信息分表管理,減少冗余信息;根據(jù)不同的作業(yè)類型,將訂單拆分成DPS/DAS作業(yè)表,為現(xiàn)場作業(yè)提供數(shù)據(jù)支持。
圖3 系統(tǒng)E-R圖
實際應(yīng)用中,考慮某些倉庫存在物料堆積區(qū),設(shè)計標簽數(shù)據(jù)庫中貨架與貨位的外鍵可為空來滿足多樣化需求,即某區(qū)不存在貨架與貨位時,仍可以用標簽來指示該區(qū)域;鑒于不同倉庫對托盤需求的不確定性,采用自增長ID為主鍵的虛擬托盤來滿足不同需求,即每個貨位默認綁定虛擬托盤,當存在真實托盤時,只需在虛擬托盤的實例中加入托盤編號。
在數(shù)據(jù)庫建?;A(chǔ)上,通過實體框架技術(shù),將對象與屬性映射成數(shù)據(jù)庫表與列,從而實現(xiàn)利用對象處理數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)。
圖4 系統(tǒng)運行流程圖
系統(tǒng)采用Visual Studio2017與SQL Server2014開發(fā)工具,基于ASP.NET Core實現(xiàn)跨平臺部署,配合JavaScript、SignalR、AJAX等技術(shù)實現(xiàn)揀選作業(yè)過程的遠程實時監(jiān)控,結(jié)合消息中間件技術(shù)保證事務(wù)一致性。系統(tǒng)運行流程如圖4所示。在訂單拆分時,根據(jù)DPS/DAS不同作業(yè)方式,產(chǎn)生不同類型的作業(yè)。在摘取式作業(yè)中,根據(jù)標簽顯示數(shù)量進行揀選,當所需物料庫存不足時,揀貨人員需先完成補貨操作再揀選,最后確認;在播種式作業(yè)中,物料經(jīng)統(tǒng)籌規(guī)劃后,按標簽顯示的數(shù)量進行分發(fā)并確認,直到揀貨員完成所有任務(wù)。
表2 電子標簽揀選系統(tǒng)應(yīng)用效果
圖5 PTL應(yīng)用現(xiàn)場
圖6 DPS執(zhí)行界面
圖7 貨位監(jiān)控界面
PTL現(xiàn)場應(yīng)用測試環(huán)境如圖5所示,每個貨架有3層6列共18個貨位。通過調(diào)試與修正,在現(xiàn)場測試中達到預(yù)期的效果。以DPS作業(yè)為例,對訂單編號為Or04進行揀選,作業(yè)執(zhí)行界面如圖6所示,貨位監(jiān)控界面如圖7所示。與傳統(tǒng)揀選方式對比分析,揀選系統(tǒng)應(yīng)用效果如表2所示。
本文設(shè)計了一種基于微服務(wù)架構(gòu)的電子標簽揀選系統(tǒng),利用微服務(wù)架構(gòu)下的高并發(fā)處理特性,進一步提升倉儲揀選效率。基于Web通信技術(shù),融入SignalR實現(xiàn)了遠程實時監(jiān)控。對典型倉儲模型與業(yè)務(wù)邏輯進行抽象提取,建立了電子標簽揀選實體模型,實現(xiàn)了庫存管理、作業(yè)管理等?;谙⒅虚g件技術(shù),保證了事務(wù)一致性,提高了揀選作業(yè)的可靠性與準確性。通過應(yīng)用展示了該揀選系統(tǒng)具有良好的效果,滿足高并發(fā)環(huán)境下的作業(yè)需求。
此外,運用全新的微服務(wù)架構(gòu)也帶來巨大的挑戰(zhàn)。在后續(xù)研究中,利用負載均衡等技術(shù)進一步完善系統(tǒng)架構(gòu);可加入智能揀選服務(wù),實現(xiàn)訂單無人化拆分;可采用從PTL揀選到“貨到人”的揀選方式,進一步提高倉儲作業(yè)效率。