王旭
(中國鐵路設(shè)計集團有限公司 土建院,天津 300308)
隨著云計算、物聯(lián)網(wǎng)等技術(shù)的發(fā)展,大數(shù)據(jù)對各個行業(yè)的影響越來越深[1-3]。數(shù)據(jù)的深入發(fā)掘利用給企業(yè)帶來了新的機遇。同時,海量數(shù)據(jù)處理也給企業(yè)帶來了一定的挑戰(zhàn)。數(shù)據(jù)可視化是大數(shù)據(jù)分析的重要手段[4],數(shù)據(jù)可視化技術(shù)綜合運用計算機圖形學(xué)、數(shù)據(jù)挖掘、可視化、人機交互等技術(shù),將海量、高維復(fù)雜數(shù)據(jù)變換為容易區(qū)分和理解的圖形符號、圖像、視頻或動畫,并以此挖掘?qū)τ脩粲袃r值的信息,洞察數(shù)據(jù)內(nèi)部的規(guī)律[5]。
管理駕駛艙利用了數(shù)據(jù)可視化技術(shù),直觀地顯示各類數(shù)據(jù),支持下鉆查詢方式,可實現(xiàn)對各類指標(biāo)的精細(xì)化管理和深層次分析,以形象化、直觀化、具體化的數(shù)據(jù)展現(xiàn)形式反映企業(yè)核心業(yè)務(wù)的運行狀態(tài),是一個為企業(yè)或部門領(lǐng)導(dǎo)層提供一站式?jīng)Q策支持的系統(tǒng)[6],已在各行業(yè)得到了廣泛的應(yīng)用。如電力企業(yè)使用管理駕駛艙結(jié)合數(shù)據(jù)挖掘技術(shù)將業(yè)務(wù)數(shù)據(jù)和績效管理指標(biāo)進(jìn)行直觀的圖形化展示[7-8];高等院校通過將戰(zhàn)略管理指標(biāo)體系引入管理駕駛艙實現(xiàn)了高校戰(zhàn)略管理的信息化[9];資產(chǎn)管理公司利用管理駕駛艙理念搭建了管理會計信息化系統(tǒng)[10];醫(yī)療機構(gòu)利用管理駕駛艙實現(xiàn)了門診的實時監(jiān)控管理[11]。而勘察設(shè)計企業(yè)對駕駛艙的應(yīng)用還不夠深入。
中國鐵路設(shè)計集團有限公司既有的設(shè)計資源管理信息系統(tǒng)(簡稱:既有系統(tǒng))是用于生產(chǎn)組織安排和人力資源規(guī)劃的工具,經(jīng)過幾年的運行,該系統(tǒng)積累了大量的數(shù)據(jù)。為了使這些數(shù)據(jù)更好地應(yīng)用于管理決策,發(fā)揮更好的支撐作用,本文設(shè)計并實現(xiàn)了一個資源管理駕駛艙,將既有系統(tǒng)中的數(shù)據(jù)經(jīng)過一系列統(tǒng)計分析,形成不同維度的管理指標(biāo)并呈現(xiàn)給各級管理者,為科學(xué)決策提供依據(jù)。
既有系統(tǒng)是參考企業(yè)資源計劃(ERP,Enterprise Resource Planning)和制造執(zhí)行系統(tǒng)(MES,Manufacturing Execution System)的理念,結(jié)合鐵路勘察設(shè)計的業(yè)務(wù)特點和自身管理習(xí)慣而研發(fā)的。該系統(tǒng)將土建專業(yè)勘察設(shè)計的作業(yè)流程進(jìn)行了標(biāo)準(zhǔn)化,制定了標(biāo)準(zhǔn)的作業(yè)單元。在實際應(yīng)用中,將項目各個階段的勘察設(shè)計任務(wù)用這些標(biāo)準(zhǔn)作業(yè)單元進(jìn)行工作分解結(jié)構(gòu)(WBS,Work Breakdown Structure)分解,一直分解到一系列可由一個人完成的工作,然后將每項工作以工單的形式下發(fā)給設(shè)計者,通過工單在流轉(zhuǎn)過程中產(chǎn)生的各種數(shù)據(jù)來統(tǒng)計項目的進(jìn)展和人力資源分布情況。該系統(tǒng)的應(yīng)用提高了生產(chǎn)組織的效率和信息化水平,上線2 年多來積累了大量的生產(chǎn)活動數(shù)據(jù)。
既有系統(tǒng)是一款B/S 架構(gòu)的應(yīng)用,采用了前后端分離的模式,后臺服務(wù)提供數(shù)據(jù)層狀態(tài)轉(zhuǎn)化(REST,Representational State Transfer)數(shù)據(jù)接口,前端網(wǎng)頁通過HTTP 協(xié)議調(diào)用接口獲取數(shù)據(jù)后渲染頁面。這種基于“請求–響應(yīng)”模型的方式給數(shù)據(jù)分析和展現(xiàn)帶來了一定的限制,主要有以下2 點。
(1)前端展示的數(shù)據(jù)是靜態(tài)的,除非用戶主動刷新頁面,否則數(shù)據(jù)不會自動更新。如果采用自動定時刷新方案,對于更新頻率低的指標(biāo)會造成大量無用的刷新,給前臺渲染和后臺服務(wù)帶來負(fù)擔(dān);而對于頻繁更新的指標(biāo),定時刷新往往無法滿足時效性的要求。
(2)很多指標(biāo)都是在請求到達(dá)服務(wù)器之后才開始計算并返回給前端,受制于請求響應(yīng)時間的限制,計算必須足夠快,因此復(fù)雜度不能太高,導(dǎo)致很多耗時的數(shù)據(jù)分析只能離線進(jìn)行,無法隨時查看。
為了解決這些限制,需要引入資源管理駕駛艙的理念對既有系統(tǒng)進(jìn)行改造升級。
資源管理駕駛艙的開發(fā)目標(biāo)是提升數(shù)據(jù)分析和數(shù)據(jù)呈現(xiàn)能力。具體為:
(1)對于數(shù)據(jù)分析,在保證計算時效性的前提下增加指標(biāo)的深度和廣度,即對數(shù)據(jù)進(jìn)行深入挖掘的同時開發(fā)出更多對管理決策有參考意義的指標(biāo);
(2)對于數(shù)據(jù)呈現(xiàn),針對不同管理角色和場景將所需指標(biāo)用直觀的圖表展示在一塊屏幕上,當(dāng)某個指標(biāo)有更新,前端相關(guān)圖表會及時刷新,而與此指標(biāo)無關(guān)的圖表不會觸發(fā)更新。
資源管理駕駛艙使用了事件驅(qū)動模型來實現(xiàn)更新的實效性和經(jīng)濟性。為了盡量避免對既有系統(tǒng)進(jìn)行侵入式修改,在數(shù)據(jù)庫和接口調(diào)用的地方增加了消息埋點,并用Kafka 消息隊列將資源管理駕駛艙和既有系統(tǒng)橋接起來。資源管理駕駛艙的總體架構(gòu)如圖1 所示。
圖1 資源管理駕駛艙總體架構(gòu)
(1)既有系統(tǒng)。通過在線填報的方式進(jìn)行數(shù)據(jù)采集,前端有瀏覽器、桌面客戶端和手機客戶端3種形式,后臺服務(wù)通過HTTP 協(xié)議為3 種客戶端提供統(tǒng)一的編程接口。在后臺服務(wù)的相關(guān)接口中進(jìn)行了消息埋點,當(dāng)接口被調(diào)用時,調(diào)用參數(shù)和接口的名稱就會被投遞到橋接層的消息中間件,從而實現(xiàn)了對既有系統(tǒng)的最小化改動。
(2)橋接層。核心是一個Kafka 消息隊列,為既有系統(tǒng)上傳的每一類數(shù)據(jù)建立一個主題(Topic)。該層采用“發(fā)布–訂閱”的模式將這些數(shù)據(jù)與資源管理駕駛艙的指標(biāo)計算服務(wù)連接起來,降低了開發(fā)耦合性的同時也充分利用了消息隊列的異步處理優(yōu)勢,提高了數(shù)據(jù)處理性能。
(3)駕駛艙。分為指標(biāo)計算服務(wù)、指標(biāo)持久化服務(wù)、前端消息訂閱服務(wù)和前端數(shù)據(jù)展示4 個模塊。每一個指標(biāo)計算服務(wù)都監(jiān)聽消息隊列里相關(guān)的一個或多個Topic,每當(dāng)收到新的消息,就會觸發(fā)指標(biāo)的增量更新計算,計算過程結(jié)束后,結(jié)果會保存到指標(biāo)持久化服務(wù)的Redis 數(shù)據(jù)庫中,并通過前端消息訂閱服務(wù)通知相關(guān)圖表刷新數(shù)據(jù)。在前端數(shù)據(jù)展示模塊,每一個圖表只對應(yīng)一類指標(biāo),針對不同的管理角色和場景將圖表組合起來形成面板,即最終展示給用戶的資源管理駕駛艙頁面。
人員狀態(tài)概覽功能以圖形的方式動態(tài)展示了每一名員工多個維度的信息。該功能可使管理者快速了解職工當(dāng)前的狀態(tài),降低溝通成本。每個員工的信息都用一個圖標(biāo)來集成展示,如圖2 所示。
圖2 人員狀態(tài)概覽示例
每個圖標(biāo)展示了3 個維度的信息:圖標(biāo)的明暗用來表示用戶當(dāng)前是否在線;圖標(biāo)右下角的位置用正方形和三角形來表示用戶當(dāng)前是否有正在執(zhí)行的工作;下方的矩形標(biāo)簽里注明了用戶當(dāng)前的狀態(tài),如“出差”“休假”等。
工作安排熱力通過圖表的形式展示所有員工未來30 天內(nèi)每天的工作量。該功能可使管理人員直觀地看到每個人的工作量,以便合理地調(diào)配工作負(fù)載。工作安排熱力圖的樣式如圖3 所示。
圖3 工作安排熱力圖示例
圖的橫軸為未來30 天的日期,縱軸是每位職工的姓名,每一個格子即表示該名職工在這一天工作數(shù)量的多少,工作越多格子的顏色就越深,反之格子的顏色就越淺。
項目人力分布概覽以南丁格爾玫瑰圖的形式展示了當(dāng)前投入人力最多的10 個項目。管理者通過該功能可實時掌握人力資源在各項目的分布情況,優(yōu)化資源配置。項目人力分布圖示例,如圖4 所示。
圖4 項目人力分布圖示例
圖4 中,每一塊區(qū)域表示一個項目,半徑方向的高度表示項目投入的人員數(shù)量,由于半徑和面積是平方的關(guān)系,所以南丁格爾玫瑰圖會使數(shù)據(jù)之間的差異更加突顯,適合用于對比大小相差不大的數(shù)值。圖上始終顯示10 個投入人力最多的項目,隨著工作的啟動和完成,這10 個項目和人員投入數(shù)量是動態(tài)變化的。
項目進(jìn)展追蹤功能以進(jìn)度條的形式實時展示了項目當(dāng)前的進(jìn)度與計劃之間的關(guān)系。管理者通過該功能可關(guān)注項目的實時進(jìn)展情況,及時調(diào)整項目進(jìn)度。項目進(jìn)展跟蹤圖的樣式如圖5所示。
圖5 項目進(jìn)展跟蹤圖示例
項目進(jìn)度條組成:水平的一道橫線表示按照計劃當(dāng)前應(yīng)該達(dá)到的進(jìn)度;填充顏色的區(qū)域表示當(dāng)前實際完成的進(jìn)度,如果當(dāng)前進(jìn)度比計劃超前則填充綠色,落后于計劃則填充紅色;進(jìn)度條中間的2 個數(shù)字表示當(dāng)前完成的工作量和此項目的總工作量,這些工作量都是從既有系統(tǒng)中提取出的量化數(shù)據(jù)。
管資源理駕駛艙的各類指標(biāo)采用了事件驅(qū)動的更新方式,從事件發(fā)生到駕駛艙前端頁面更新的整個流程如圖6 所示。
圖6 事件驅(qū)動的數(shù)據(jù)指標(biāo)更新流程
事件源來自于既有系統(tǒng)中的消息埋點,當(dāng)用戶在操作中調(diào)用了某個埋點的接口,就會產(chǎn)生一個事件消息,消息產(chǎn)生后,會持久化到關(guān)系型數(shù)據(jù)庫中,然后被投遞到消息隊列。每條消息都會被分配一個自增的ID,標(biāo)記事件產(chǎn)生的先后順序。
4.1.1 指標(biāo)計算器啟動時的更新
服務(wù)在冷啟動時,會根據(jù)消息的ID 判斷是否要運行全量更新,其過程如圖7 所示。
圖7 指標(biāo)計算器啟動時的更新流程
假設(shè)有一個指標(biāo),其代碼為MetricX,只有工單的提交事件(category="tk";action="submit")會影響這個指標(biāo)的數(shù)值。當(dāng)計算服務(wù)冷啟動時,數(shù)據(jù)更新的過程如下。
(1)從關(guān)系型數(shù)據(jù)庫的消息記錄表中查詢category="tk"并且action="submit"的消息最大的ID;
(2)從Redis緩存中查詢MetricX指標(biāo)的maxId 即已處理過的最大的消息ID;
(3)將這2 個ID 進(jìn)行比較,若兩個ID 一致證明Redis 緩存的指標(biāo)無需更新,如果不一致則說明在計算服務(wù)停止的這段時間里,系統(tǒng)又發(fā)生了和這個指標(biāo)相關(guān)的事件,此時MetricX 的指標(biāo)計算器會運行一次全量的更新,并將更新之后的maxId 和指標(biāo)數(shù)值寫入到Redis 中。
4.1.2 指標(biāo)計算器在運行過程中的增量更新
在指標(biāo)計算服務(wù)啟動成功后,指標(biāo)計算器會進(jìn)行增量更新,其過程如圖8 所示。
圖8 指標(biāo)計算器在運行過程中增量更新流程
(1)指標(biāo)計算器監(jiān)聽消息隊列,根據(jù)新事件的category 和action 判斷是否和自身相關(guān);
(2)當(dāng)相關(guān)事件發(fā)生時,指標(biāo)計算器從Redis中取到maxId 和value 值,如果新事件的ID 小于當(dāng)前maxId 說明事件已被處理過,消息被丟棄;
(3)如果新事件的ID 大于maxid,指標(biāo)計算器會根據(jù)事件消息中攜帶的參數(shù)計算出指標(biāo)的增量疊加到之前的value 值之后回寫到Redis 緩存中;
(4)指標(biāo)計算器通知Stomp 消息代理MetricX指標(biāo)已經(jīng)發(fā)生了變化;
(5)駕駛艙前端頁面通過Stomp 消息代理獲知MetricX 發(fā)生了更新;
(6)駕駛艙前端頁面通過ajax 請求向數(shù)據(jù)接口查詢MetricX 的最新數(shù)值;
(7)數(shù)據(jù)接口服務(wù)從Redis 緩存中獲取MetricX的最新值并返回給駕駛艙前端頁面;
(8)駕駛艙前端頁面使用MetricX 指標(biāo)的最新值更新相關(guān)圖表。
組件化是目前Web 前端領(lǐng)域一種流行的開發(fā)方式,它的核心思想是按照單一功能原則將應(yīng)用劃分為若干獨立、可復(fù)用的模塊。組件內(nèi)部利用數(shù)據(jù)模型驅(qū)動視圖的渲染,對外則提供了函數(shù)和配置項供使用者來控制組件的行為和樣式。通過組件的嵌套和組合可以很大程度上提高模塊的復(fù)用性和擴展性。
在資源管理駕駛艙前端展示頁面中,有2 個重要組成部分,即數(shù)據(jù)和圖表。圖表的形式往往是有限的,一般常用的有折線圖、餅圖和柱狀圖等10 余種,而數(shù)據(jù)指標(biāo)類型卻是多種多樣的,而且在使用過程中還會不斷有新的指標(biāo)出現(xiàn)。如果在開發(fā)中將數(shù)據(jù)處理的邏輯與圖表展示的邏輯耦合在一起,會造成視圖部分的代碼出現(xiàn)大量的重復(fù)冗余,而且數(shù)據(jù)格式或圖表樣式任何一方發(fā)生變化,整個頁面的代碼都需要重寫。本文提供一種組件化思路,可以將數(shù)據(jù)處理與數(shù)據(jù)展示功能正交化,以克服上述耦合開發(fā)帶來的弊端,如圖9 所示。
圖9 前端組件化示意
資源管理駕駛艙將數(shù)據(jù)可視化過程分為數(shù)據(jù)處理和數(shù)據(jù)展示2 個維度。在數(shù)據(jù)處理維度上,各個組件只負(fù)責(zé)監(jiān)聽指標(biāo)的變化及獲取指標(biāo)的最新數(shù)值;在數(shù)據(jù)展示維度上,組件負(fù)責(zé)頁面的整體布局及每一個顯示區(qū)域尺寸和位置的計算。通過參數(shù)注入,2個維度的組件不斷將參數(shù)傳遞到下一層組件,最終在圖表內(nèi)核組件中將2 個維度參數(shù)結(jié)合起來完成圖表的繪制。圖9 中5 個組件的具體功能如下。
(1)布局(Layout):將整個頁面分隔成不同的區(qū)域,每個區(qū)域顯示一個圖表。
(2)視圖容器(View Container):根據(jù)其在布局組件中的位置,計算顯示區(qū)域的尺寸和其他顯示參數(shù),并將這些參數(shù)注入到子組件中。
(3)全局?jǐn)?shù)據(jù)分發(fā)(Global Data Dispatcher):統(tǒng)一訂閱Stomp 消息代理,當(dāng)收到指標(biāo)變更的通知時重新獲取數(shù)據(jù)并分發(fā)給相關(guān)的圖表,其作用相當(dāng)于整個前端頁面的數(shù)據(jù)總線。采用這種消息分發(fā)機制,可以讓所有圖表組件都復(fù)用一個網(wǎng)絡(luò)連接,減小了服務(wù)器資源開銷,也提高了客戶端的性能。
(4)數(shù)據(jù)容器(Data Container):向Global Data Dispatcher 注冊指標(biāo)類型,當(dāng)該類指標(biāo)發(fā)生更新時,Data Container 會收到Global Data Dispatcher 的數(shù)據(jù)推送,并將這些數(shù)據(jù)轉(zhuǎn)換為圖表顯示所需的格式。
(5)圖表內(nèi)核(Chart Core):根據(jù)View Container提供的顯示參數(shù)和Data Container 提供的數(shù)據(jù)模型將可視化圖表渲染出來。頁面尺寸的變化和指標(biāo)數(shù)據(jù)的變化都會觸發(fā)圖表的重新渲染,實現(xiàn)了數(shù)據(jù)的即時刷新和自適應(yīng)顯示。
資源管理駕駛艙的上線應(yīng)用解決了企業(yè)管理指標(biāo)的實時計算和展示的難題,不但提升了管理效率,也為管理者的科學(xué)決策提供了數(shù)據(jù)支持。各類反映不同管理指標(biāo)的圖表可以根據(jù)用戶的管理角色和管理場景組合成不同的面板,用戶也可以根據(jù)實際需求,靈活設(shè)置面板的參數(shù),實現(xiàn)個性化的展示。資源管理駕駛艙實際展示效果如圖10 所示。
圖10 資源管理駕駛艙應(yīng)用實例
本文在既有的設(shè)計資源管理信息系統(tǒng)基礎(chǔ)上,研發(fā)了一個資源管理駕駛艙,實現(xiàn)了人員狀態(tài)概覽、工作安排熱力圖顯示、項目人力分布概覽、項目進(jìn)展跟蹤等多種功能。該駕駛艙用關(guān)鍵指標(biāo)實時反映了企業(yè)運行的狀態(tài),為企業(yè)各層級管理人員科學(xué)決策提供了有力的支撐。