本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,具體而言,涉及一種智能設(shè)備實時數(shù)據(jù)流式處理方法及處理系統(tǒng)。
背景技術(shù):
智能設(shè)備是目前研究的熱點,伴隨各種智能設(shè)備的接入,會產(chǎn)生大量的數(shù)據(jù),需要通過大量數(shù)據(jù)的分析計算來推斷用戶的行為,然后用計算得來的數(shù)據(jù)反饋到智能設(shè)備中,自動的將自己調(diào)整到用戶想要的那種狀態(tài),這其中最主要的步驟就是數(shù)據(jù)的處理。隨著接入的智能設(shè)備越來越多,傳統(tǒng)的數(shù)據(jù)處理已經(jīng)無法滿足需求,需要一種可擴展系統(tǒng)來實時處理越來越多的智能設(shè)備產(chǎn)生的實時數(shù)據(jù)流。
技術(shù)實現(xiàn)要素:
為解決上述問題,本發(fā)明的目的在于提供一種智能設(shè)備實時數(shù)據(jù)流式處理方法及處理系統(tǒng),解決海量智能設(shè)備的數(shù)據(jù)實時處理問題。
本發(fā)明提供了一種智能設(shè)備實時數(shù)據(jù)流式處理方法,該方法包括:
步驟1,用戶通過前端模塊上傳數(shù)據(jù)流處理程序包并配置需要啟動的元數(shù)據(jù)信息;
步驟2,不同智能設(shè)備上傳的實時數(shù)據(jù)流經(jīng)過路由模塊傳輸給對應(yīng)的數(shù)據(jù)流處理實例進行處理;
步驟3,每個機器上部署的執(zhí)行模塊收集本機上所有的數(shù)據(jù)流處理程序?qū)嵗畔?,匯報給策略調(diào)度模塊,策略調(diào)度模塊根據(jù)這些信息來決定實例的擴縮容;
步驟4,日志收集模塊收集機器上所有實例的日志并提供一個日志查詢接口,前端模塊通過這個日志查詢接口展示實例的日志。
作為本發(fā)明進一步的改進,步驟1具體包括:
步驟101,用戶通過前端模塊上傳數(shù)據(jù)流處理程序包,并配置元數(shù)據(jù)信息,元數(shù)據(jù)信息包括實例個數(shù)、資源大小、語言類型,同時所述前端模塊將這些元數(shù)據(jù)信息存儲至存儲模塊中供后續(xù)調(diào)度使用;
步驟102,多個執(zhí)行模塊在多臺機器上構(gòu)成一個資源池,每個執(zhí)行模塊收集本機的內(nèi)存使用信息及所有實例信息,并將這些信息通過http協(xié)議發(fā)送給策略調(diào)度模塊;
步驟103,策略調(diào)度模塊根據(jù)前端模塊配置的元數(shù)據(jù)信息和所有機器上執(zhí)行模塊發(fā)送來的信息確定各個機器的資源使用情況及各個數(shù)據(jù)流處理實例布置情況,同時,所述策略調(diào)度模塊從所述存儲模塊中查詢數(shù)據(jù)流處理實例信息,并結(jié)合執(zhí)行模塊發(fā)送來的信息確定調(diào)度方案,包括是否需要新增數(shù)據(jù)流處理實例或刪除多余數(shù)據(jù)流處理實例,所述策略調(diào)度模塊在執(zhí)行模塊發(fā)送過來的http請求連接上直接響應(yīng)返回調(diào)度信息下發(fā)調(diào)度命令;
步驟104,執(zhí)行模塊接收策略調(diào)度模塊的調(diào)度命令后執(zhí)行相應(yīng)的操作。
作為本發(fā)明進一步的改進,步驟104中,如果調(diào)度命令是刪除多余數(shù)據(jù)流處理實例,所述執(zhí)行模塊通過調(diào)用dockerapi的方式將此實例的容器停掉并清除遺留數(shù)據(jù),服務(wù)發(fā)現(xiàn)模塊從路由表中清除沒有定期更新的數(shù)據(jù)流處理實例信息;
如果調(diào)度命令是增加數(shù)據(jù)流處理實例,所述執(zhí)行模塊先判斷用戶采用的程序語言,并根據(jù)該程序語言選擇一個對應(yīng)的鏡像,然后根據(jù)配置的資源參數(shù)、環(huán)境參數(shù)調(diào)用dockerapi的方式基于此鏡像創(chuàng)建實例容器,最后將新實例的ip:port信息即地址信息注冊到所述服務(wù)發(fā)現(xiàn)模塊中。
作為本發(fā)明進一步的改進,步驟2具體包括:
步驟201,智能設(shè)備上報的實時數(shù)據(jù)流通過網(wǎng)關(guān)先傳輸至路由模塊;
步驟202,所述路由模塊根據(jù)實時數(shù)據(jù)流中的信息獲取智能設(shè)備的名稱信息,并根據(jù)此信息在所述服務(wù)發(fā)現(xiàn)模塊中查詢該智能設(shè)備對應(yīng)的數(shù)據(jù)流處理實例地址,并將實時數(shù)據(jù)發(fā)送給其中一個數(shù)據(jù)流處理實例進行處理。
作為本發(fā)明進一步的改進,步驟202中,當(dāng)某個智能設(shè)備對應(yīng)多個數(shù)據(jù)流處理實例時,根據(jù)負載均衡策略選取其中一個數(shù)據(jù)流處理實例進行處理。
作為本發(fā)明進一步的改進,步驟3中,單個數(shù)據(jù)流處理實例在收到上傳的實時數(shù)據(jù)流后,將處理的結(jié)果數(shù)據(jù)儲存在cache模塊里對應(yīng)的隊列中,隊列是根據(jù)智能設(shè)備的物理id創(chuàng)建的,每個智能設(shè)備對應(yīng)一個隊列,定期將各個隊列中的數(shù)據(jù)批量刷出到存儲模塊中進行存儲。
作為本發(fā)明進一步的改進,步驟4具體包括:
步驟401,日志收集模塊收集機器上所有數(shù)據(jù)流處理實例的日志并存儲到es中,對外提供一個日志查詢接口;
步驟402,前端模塊通過所述日志查詢接口,根據(jù)內(nèi)容、時間進行相關(guān)日志的查找,同時,所述前端模塊通過所述日志查詢接口將實例的日志展示在web系統(tǒng)上。
本發(fā)明還提供了一種智能設(shè)備實時數(shù)據(jù)流式處理系統(tǒng),包括智能設(shè)備和服務(wù)器,所述智能設(shè)備上報需要處理的數(shù)據(jù)流至所述服務(wù)器,所述服務(wù)器用于處理接收到的實時數(shù)據(jù)流;
所述服務(wù)器包括:
前端模塊,用于上傳數(shù)據(jù)流處理程序包,并配置元數(shù)據(jù)信息,元數(shù)據(jù)信息包括實例個數(shù)、資源大小、語言類型,同時所述前端模塊將這些元數(shù)據(jù)信息存儲至存儲模塊中供后續(xù)調(diào)度使用;
路由模塊,用于將智能設(shè)備上報的數(shù)據(jù)流傳輸給對應(yīng)的數(shù)據(jù)流處理實例進行處理,在服務(wù)發(fā)現(xiàn)模塊中查詢數(shù)據(jù)流對應(yīng)的數(shù)據(jù)流處理實例地址信息來選擇一個實例,并將智能設(shè)備的數(shù)據(jù)流發(fā)送給選中的實例來處理;
執(zhí)行模塊,用于收集本機的內(nèi)存使用信息及所有實例信息,并將這些信息通過http協(xié)議發(fā)送給策略調(diào)度模塊,同時接收策略調(diào)度模塊的調(diào)度命令并執(zhí)行相應(yīng)的操作;
策略調(diào)度模塊,用于根據(jù)前端模塊配置的元數(shù)據(jù)信息和所有機器上的執(zhí)行模塊發(fā)送來的信息確定調(diào)度方案,并在執(zhí)行模塊發(fā)送過來的http請求連接上直接響應(yīng)返回調(diào)度信息下發(fā)調(diào)度命令;
服務(wù)發(fā)現(xiàn)模塊,用于存儲數(shù)據(jù)流處理實例地址信息,并定期更新的路由表中的實例信息;
cache模塊,用于存儲被數(shù)據(jù)流處理實例處理后的結(jié)果數(shù)據(jù),并將處理后結(jié)果數(shù)據(jù)批量傳輸至存儲模塊中進行存儲;
存儲模塊,用于存儲前端模塊中配置的元數(shù)據(jù)信息及cache模塊中的結(jié)果數(shù)據(jù);
日志收集模塊,用于收集機器上所有實例的日志并存儲到es中,提供一個日志查詢接口,前端模塊通過這個接口將實例的日志展示在web系統(tǒng)上。
本發(fā)明的有益效果為:
1、支持不同語言寫的處理程序,只需要按照一定打包規(guī)范打包即可,降低接入成本,同時通過web系統(tǒng)長傳的方式降低了程序部署的復(fù)雜性;
2、可以通過添加機器,可以方便達到系統(tǒng)擴容的目的;
3、由于多個智能設(shè)備上傳的數(shù)據(jù)前后可能是有關(guān)聯(lián)的,如果后端處理實例存在多個的話,為了確保數(shù)據(jù)流處理的順序,引入cache模塊,根據(jù)智能設(shè)備的物理id創(chuàng)建一個隊列,然后將處理完的數(shù)據(jù)存入此隊列中,這樣每個處理實例本身不帶任何狀態(tài),任何實例在接收到上傳數(shù)據(jù)流后,均會根據(jù)上報的設(shè)備物理id去cache模塊中查找已經(jīng)處理過的信息,然后結(jié)合剛上報的數(shù)據(jù)進行處理,這樣就保證了每個智能設(shè)備數(shù)據(jù)流都能被順序的處理;
后端數(shù)據(jù)流處理實例在處理智能設(shè)備上傳的數(shù)據(jù)時會將中間結(jié)果實時的寫入cache系統(tǒng),由于同一個智能設(shè)備下的不同實例本身也是沒有狀態(tài)的,因此如果某種產(chǎn)品的智能設(shè)備數(shù)據(jù)過多、上傳的數(shù)據(jù)壓力過大、導(dǎo)致現(xiàn)有的實例個數(shù)處理不過來時,可以輕易的通過增加實例個數(shù)來解決;
4、路由模塊也是無狀態(tài)的,因此當(dāng)接入智能設(shè)備過多導(dǎo)致性能問題時,也可以通過簡單的部署多個實例來解決,同時將路由模塊和服務(wù)發(fā)現(xiàn)模塊結(jié)合,可以將接入智能設(shè)備的數(shù)據(jù)流轉(zhuǎn)發(fā)給后端的某個實例,在路由過程中還能起到負載均衡和故障轉(zhuǎn)移的作用;
路由模塊的引入,對設(shè)備來說屏蔽了后端實例的細節(jié),使得設(shè)備端只需要知道路由模塊的地址即可;
5、日志收集模塊通過前端模塊可視化,可以幫助及時的發(fā)現(xiàn)實例應(yīng)用程序的問題,方便測試和問題排查,可運維性高;
6、策略調(diào)度模塊在執(zhí)行模塊發(fā)送過來的http請求連接上直接響應(yīng)返回調(diào)度信息下發(fā)調(diào)度命令,使得執(zhí)行模塊的信息上傳和策略調(diào)度模塊的決策信息返回僅僅只需要一次網(wǎng)絡(luò)往返;
7、本發(fā)明智能設(shè)備實時數(shù)據(jù)流式處理系統(tǒng)的各個模塊均可以通過簡單的增加機器來解決瓶頸問題,魯棒性和可擴展性都很高,可以解決海量智能設(shè)備的數(shù)據(jù)上傳問題,上傳的數(shù)據(jù)不容易丟失。
附圖說明
圖1為本發(fā)明實施例所述的一種智能設(shè)備實時數(shù)據(jù)流式處理方法的流程示意圖。
具體實施方式
下面通過具體的實施例并結(jié)合附圖對本發(fā)明做進一步的詳細描述。
實施例1,如圖1所示,本發(fā)明實施例的一種智能設(shè)備實時數(shù)據(jù)流式處理方法,該方法包括:
步驟1,用戶通過前端模塊上傳數(shù)據(jù)流處理程序包并配置需要啟動的元數(shù)據(jù)信息。具體包括:
步驟101,用戶采用某一種程序語言編寫好處理的邏輯程序,按照約定的打包格式規(guī)范將程序打好包,通過前端模塊上傳此數(shù)據(jù)流處理程序包,并配置元數(shù)據(jù)信息,元數(shù)據(jù)信息包括實例個數(shù)、資源大小、語言類型,同時前端模塊將這些元數(shù)據(jù)信息存儲至存儲模塊中供后續(xù)調(diào)度使用;
步驟102,每個機器上面部署一個執(zhí)行模塊,多個執(zhí)行模塊在多臺機器上構(gòu)成一個資源池,每個執(zhí)行模塊收集本機的內(nèi)存使用信息及所有實例信息,并將這些信息通過http協(xié)議發(fā)送給策略調(diào)度模塊;
步驟103,策略調(diào)度模塊根據(jù)前端模塊配置的元數(shù)據(jù)信息和所有機器上執(zhí)行模塊發(fā)送來的信息確定各個機器的資源使用情況及各個數(shù)據(jù)流處理實例布置情況,同時,策略調(diào)度模塊從存儲模塊中查詢數(shù)據(jù)流處理實例信息,并結(jié)合執(zhí)行模塊發(fā)送來的信息確定調(diào)度方案,包括是否需要新增實例或刪除多余實例,策略調(diào)度模塊在執(zhí)行模塊發(fā)送過來的http請求連接上直接響應(yīng)返回調(diào)度信息下發(fā)調(diào)度命令;
在調(diào)度時,應(yīng)遵循:盡量將實例部署在空閑資源最多的機器上;同一個數(shù)據(jù)流處理程序的多個實例盡量分散部署,防止一個機器宕機導(dǎo)致整個智能硬件廠商的數(shù)據(jù)流處理程序瞬間不可用的情況;
步驟104,執(zhí)行模塊接收策略調(diào)度模塊的調(diào)度命令后執(zhí)行相應(yīng)的操作:
如果調(diào)度命令是刪除多余實例,執(zhí)行模塊通過調(diào)用dockerapi的方式將此實例的容器停掉并清除遺留數(shù)據(jù),服務(wù)發(fā)現(xiàn)模塊自動清除路由表沒有定期更新的實例信息;
如果調(diào)度命令是增加實例,執(zhí)行模塊先判斷用戶采用的程序語言,并根據(jù)該程序語言選擇一個對應(yīng)的鏡像,然后根據(jù)配置的資源參數(shù)、環(huán)境參數(shù)調(diào)用dockerapi的方式基于此鏡像創(chuàng)建實例容器,最后將新實例的ip:port信息即地址信息注冊到服務(wù)發(fā)現(xiàn)模塊中。
步驟2,不同智能設(shè)備上傳的實時數(shù)據(jù)流經(jīng)過路由模塊傳輸給對應(yīng)的數(shù)據(jù)流處理實例進行處理。具體包括:
步驟201,智能設(shè)備上傳的數(shù)據(jù)流通過網(wǎng)關(guān)先傳輸至路由模塊;
步驟202,路由模塊根據(jù)實時數(shù)據(jù)流中的信息獲取智能設(shè)備的名稱信息,并根據(jù)此信息在服務(wù)發(fā)現(xiàn)模塊中查詢該智能設(shè)備對應(yīng)的實例地址,并將實時數(shù)據(jù)發(fā)送給其中一個數(shù)據(jù)流處理實例進行處理。當(dāng)后端對應(yīng)有有多個數(shù)據(jù)流處理實例時,根據(jù)負載均衡策略(如rr策略)選取其中一個實例進行處理。
步驟3,每個機器上部署的執(zhí)行模塊收集本機上所有的數(shù)據(jù)流處理程序?qū)嵗畔?,匯報給策略調(diào)度模塊,策略調(diào)度模塊根據(jù)這些信息來決定實例的擴縮容,單個數(shù)據(jù)流處理實例在收到上傳的實時數(shù)據(jù)流后,將處理的結(jié)果數(shù)據(jù)儲存在cache模塊里對應(yīng)的隊列中,隊列是根據(jù)智能設(shè)備的物理id創(chuàng)建的,每個智能設(shè)備對應(yīng)一個隊列,定期將各個隊列中的數(shù)據(jù)批量刷出到存儲模塊中進行存儲。
步驟4,日志收集模塊收集機器上所有實例的日志并提供一個日志查詢接口,前端模塊通過這個日志查詢接口展示實例的日志,具體包括:
步驟401,日志收集模塊收集機器上所有數(shù)據(jù)流處理實例的日志并存儲到es中,對外提供一個日志查詢接口;
步驟402,前端模塊通過所述日志查詢接口,根據(jù)內(nèi)容、時間進行相關(guān)日志的查找,同時,所述前端模塊通過所述日志查詢接口將實例的日志展示在web系統(tǒng)上。
實施例2,一種智能設(shè)備實時數(shù)據(jù)流式處理系統(tǒng),包括智能設(shè)備和服務(wù)器,智能設(shè)備上報需要處理的數(shù)據(jù)流至服務(wù)器,服務(wù)器用于處理接收到的實時數(shù)據(jù)流;
服務(wù)器包括:
前端模塊,用于上傳數(shù)據(jù)流處理程序包,并配置元數(shù)據(jù)信息,元數(shù)據(jù)信息包括實例個數(shù)、資源大小、語言類型,同時前端模塊將這些元數(shù)據(jù)信息存儲至存儲模塊中供后續(xù)調(diào)度使用;
路由模塊,用于將智能設(shè)備上報的數(shù)據(jù)流傳輸給對應(yīng)的數(shù)據(jù)流處理實例進行處理,在服務(wù)發(fā)現(xiàn)模塊中查詢數(shù)據(jù)流對應(yīng)的數(shù)據(jù)流處理實例地址信息來選擇一個實例,并將智能設(shè)備的數(shù)據(jù)流發(fā)送給選中的實例來處理;
執(zhí)行模塊,用于收集本機的內(nèi)存使用信息及所有實例信息,并將這些信息通過http協(xié)議發(fā)送給策略調(diào)度模塊,同時接收策略調(diào)度模塊的調(diào)度命令并執(zhí)行相應(yīng)的操作;
策略調(diào)度模塊,用于根據(jù)前端模塊配置的元數(shù)據(jù)信息和所有機器上的執(zhí)行模塊發(fā)送來的信息確定調(diào)度方案,并在執(zhí)行模塊發(fā)送過來的http請求連接上直接響應(yīng)返回調(diào)度信息下發(fā)調(diào)度命令;
服務(wù)發(fā)現(xiàn)模塊,用于存儲數(shù)據(jù)流處理實例地址信息,并定期更新的路由表中的實例信息;
cache模塊,用于存儲被數(shù)據(jù)流處理實例處理后的結(jié)果數(shù)據(jù),并將處理后結(jié)果數(shù)據(jù)批量傳輸至存儲模塊中進行存儲;
存儲模塊,用于存儲前端模塊中配置的元數(shù)據(jù)信息及cache模塊中的結(jié)果數(shù)據(jù);
日志收集模塊,用于收集機器上所有實例的日志并存儲到es中,提供一個日志查詢接口,前端模塊通過這個接口將實例的日志展示在web系統(tǒng)上。
本發(fā)明的智能設(shè)備實時數(shù)據(jù)流式處理系統(tǒng)支持不同語言寫的處理程序,只需要按照一定打包規(guī)范打包即可,降低接入成本,同時通過web系統(tǒng)長傳的方式降低了程序部署的復(fù)雜性??梢酝ㄟ^添加機器,部署執(zhí)行模塊達到系統(tǒng)擴容的目的。由于多個智能設(shè)備上傳的數(shù)據(jù)前后可能是有關(guān)聯(lián)的,如果后端處理實例存在多個的話,為了確保數(shù)據(jù)流處理的順序,本發(fā)明引入了cache模塊,根據(jù)智能設(shè)備的物理id創(chuàng)建一個隊列,然后將處理完的數(shù)據(jù)存入此隊列中,這樣每個處理實例本身不帶任何狀態(tài),任何實例在接收到上傳數(shù)據(jù)流后,均會根據(jù)上報的設(shè)備物理id去cache模塊中查找已經(jīng)處理過的信息,然后結(jié)合剛上報的數(shù)據(jù)進行處理,這樣就保證了每個智能設(shè)備數(shù)據(jù)流都能被順序的處理;后端實例在處理智能設(shè)備上傳的數(shù)據(jù)時會將中間結(jié)果實時的寫入cache系統(tǒng),由于同一個智能設(shè)備下的不同實例本身也是沒有狀態(tài)的,因此如果某種產(chǎn)品的智能設(shè)備數(shù)據(jù)過多、上傳的數(shù)據(jù)壓力過大、導(dǎo)致現(xiàn)有的實例個數(shù)處理不過來時,可以輕易的通過增加實例個數(shù)來解決。本發(fā)明通過路由模塊的引入,屏蔽了后端實例的細節(jié),使得設(shè)備端只需要知道路由模塊的地址即可;由于路由模塊也是無狀態(tài)的,因此當(dāng)接入智能設(shè)備過多導(dǎo)致性能問題時,也可以通過簡單的部署多個實例來解決,同時將路由模塊和服務(wù)發(fā)現(xiàn)模塊結(jié)合,可以將接入智能設(shè)備的數(shù)據(jù)流轉(zhuǎn)發(fā)給后端的某個實例,在路由過程中還能起到負載均衡和故障轉(zhuǎn)移的作用。日志收集模塊通過前端模塊可視化,可以幫助及時的發(fā)現(xiàn)實例應(yīng)用程序的問題,方便測試和問題排查,可運維性高。策略調(diào)度模塊在執(zhí)行模塊發(fā)送過來的http請求連接上直接響應(yīng)返回調(diào)度信息下發(fā)調(diào)度命令,使得執(zhí)行模塊的信息上傳和策略調(diào)度模塊的決策信息返回僅僅只需要一次網(wǎng)絡(luò)往返。
綜合看來,本發(fā)明智能設(shè)備實時數(shù)據(jù)流式處理系統(tǒng)的各個模塊均可以通過簡單的增加機器來解決瓶頸問題,魯棒性和可擴展性都很高,可以解決海量智能設(shè)備的數(shù)據(jù)上傳問題,上傳的數(shù)據(jù)不容易丟失。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。