張濤
(國能(北京)商務網絡有限公司 北京 100056)
國家能源e購網上商城(以下簡稱商城)是國家能源集團進行物資、工程、服務等項目非招標采購的電力產品專屬商城,是基于阿里云技術打造的,包含電力專區、電子超市、詢比價、競價等板塊的一體化電子采購平臺。國能(北京)商務網絡有限公司(以下簡稱商務網公司)作為商城建設運維單位,面對平臺型科技示范企業的創建要求,對標國內一流電商化企業,必須打造出一支過硬的開發和運維隊伍。
商城及相關系統的運維工作主要包括業務技術支持、IT基礎設施管理及集成、網絡安全管理等工作,必須高度重視信息系統運維管理工作,這就需要轉變傳統的信息系統運維模式,建立健全信息系統運維體系,提升信息系統運維水平[1]。運維工作極其重要且又紛繁混雜,運維和開發項目管理系統需要具備較高的安全性、實時性和動態分布等特性,建立一套高效、穩定的問題需求跟蹤工單系統,就成為急需解決的問題[2]。故障工單的流轉作為基礎維護工作的基礎,必須能夠實時反映故障和工單處理情況,為用戶提供優異感知,切實解決各類異常[3]。
在很長時間以來,商務網公司系統運維部使用的工單系統雖然功能全面,能夠滿足有序規劃和管理軟件研發全流程的要求,但是其全套工具價格成本很高,使用配置很復雜,有些功能并不實用且捆綁銷售,得不償失。
網站的開發一般可分為前端開發和后端開發。前端開發負責網站頁面的展示,是創建Web頁面或APP等前端界面呈現給用戶的過程,通過各種網頁開發技術、網站框架及前端解決方案,來實現方便實用的用戶界面交互;后端開發負責網站底層業務邏輯的實現、平臺的穩定性與性能等,通常是與前端進行數據交互及網站數據的保存和讀取。目前,PHP語言以免費、開源、插件豐富及跨平臺性等優點成為廣泛使用的網站后端開發語言[4]。
為進一步提升商城平臺工單處理能力,加強工單系統自主開發運維,系統運維部積極組織技術攻關,在開源平臺上查找相關資源,最終確立了前端基于reactjs+redux、后端基于php laravel-framework、數據庫采用MongoDB的技術路線,開發完成了一款問題需求跟蹤軟件,并投入了使用。
前端React在MVC架構中屬于V(視圖),構建隨著時間數據不斷變化的大規模應用程序。React利用虛擬DOM來減少對實際DOM的操作從而提升性能。通過React,開發技術人員唯一要做的事情就是構建組件,得益于其良好的封裝性,組件使代碼復用、測試和關注分離更加簡單[5]。
React只是DOM的一個抽象層,并不是Web應用的完整解決方案,而Redux就解決了這個問題。Redux是JavaScript狀態容器,提供可預測化的狀態管理,它可以促進構建一致化的應用,運行于不同的環境(客戶端、服務器、原生應用),并且易于測試。它將Facebook的Flux架構和函數式編程相結合,迅速地成為了當前最熱門的前端架構。
Redux的設計思想是:首先,Web應用是一個狀態機,視圖與狀態是一一對應的;其次,所有的狀態,保存在一個對象里面。二者的結合React-Redux是Redux的官方React綁定庫,其能夠使開發者的React組件從Redux store中讀取數據,并且向store分發actions以更新數據[6]。
后端采用的Laravel是一套簡潔、優雅的PHP Web開發框架(PHP Web Framework)。它將開發者從繁雜無章的代碼中解放出來,可以幫助開發者構建一個完美的網絡應用,并且每行源代碼都很簡潔、富于表達力。
在Laravel中,具有一套高級的PHP ActiveRecord實現——Eloquent ORM,它能迅捷地將“約束(constraints)”應用到該關系的雙方,這樣開發者就具有了對數據的完全控制,而且享受到ActiveRecord的所有便利。Eloquent本身就完全支持Fluent中查詢構造器的所有方法。
本系統的數據庫采用的是新興的非關系型數據庫MongoDB,是一款開源的面向集合的數據庫,它是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統,設計MongoDB的主要目的是為WEB應用提供擴展性好的高性能開源數據存儲解決方案,在負載很高的情況下,更多的節點可以保證服務器性能。“面向集合(Collection-Oriented)”的意思是將數據分組存儲在數據集合中,每個數據集合在數據庫中擁有一個唯一的標識名,并且可以包含無限數目的文檔,其特點是性能高、部署容易、使用方便,存儲數據非常迅捷[7]。
MongoDB的主要目標是在高性能和高度伸縮性的鍵/值存儲方式與傳統的RDBMS系統之間架起一座橋梁,它能夠集兩者的優勢于一身。首先,MongoDB非常適合實時的數據增刪查改,并具備網站實時數據存儲所需的可復制性以及高度伸縮性;其次,由于其高性能,MongoDB也非常適合作為關鍵信息基礎設施的持久化緩存層,在信息系統重啟之后,由MongoDB搭建的緩存層可以有效避免下層的數據源過載;最后,MongoDB的BSON數據格式非常適合文檔化格式的存儲及查詢[8]。
在方案配置方面,實現了支持用戶創建項目和定義屬于項目自己的配置方案,實現全局配置方案和本地配置方案的完美結合。在工作流方面,各項目不僅可引用系統工作流,同時,可自定義自己的工作流,工作流的每一步可進行精細控制,確保正確的人在正確的時間執行正確的操作。該設計有看板和甘特圖功能,支持Scrum敏捷開發和看板方法。通過看板,輕松實現任務、需求、Bug的管理跟蹤,Scrum是一個過程框架,它內置有一系列的實踐和預定義角色,它最大的好處是易于學習,而且應用Scrum的投入相對較低;甘特圖不僅能顯示每一個問題的時間長短和進展情況,還可以看到任意時間點在進行哪些問題,用戶針對問題發表評論,同時可“@”項目組其他成員,用戶可在問題上填寫工作日志,及時查看問題的完成情況,團隊成員可分享和查找工作所需的資料文檔。設計有統計報表功能,隨時掌握項目進度,快速調整項目作業狀況,支持各種維度的統計。設計有完備權限控制的模型,可自定義角色,不僅可給用戶授權,同時支持給用戶組授權。在版本控制方面,把不同階段的任務和里程碑確定成一個個的版本,以便對整個項目進行過程的管理和階段目標的控制。日歷管理則不僅可同步國家法定節假日,用戶還可以配置自己的日程,以便更加準確地跟蹤每個任務的進展。為了安全管理,日志文件詳盡記錄了哪些用戶在什么時間段通過什么終端訪問了哪些API,還支持Docker安裝,更加增強了可擴展性和兼容性。
作為商城平臺的開發運維單位,商務網公司必須規范公司產品、軟件設計開發和運維工單處理過程的管理和監督,滿足公司增強市場競爭能力的需求,最大限度地減少公司經營風險,結合質量管理體系和網絡安全等保體系規范公司研發管理及研發流程,有效提升開發品質,縮短開發時間。
以運維工單處理流程為例,工作流如圖1所示。

圖1 運維工單處理流程工作流圖
問題提報人首先進入運維工單項目,在問題中新創建自己的工單,在頁面中填寫必填項,點擊確認,即可將該工單推送到工單負責人處,同時工單狀態變為待處理,解決狀態為未解決。
分配到的運維工單,負責人接到新工單可以進行3個操作,分別是開始處理、轉產品分析確認和轉開發分析確認。如果該工單是系統運維部職能范圍內的業務,則點擊開始處理,否則根據該工單內容,判斷其應該歸屬的部門,分別轉產品或開發分析確認。這3個操作完成后,工單狀態都進入到問題處理中狀態,分別由系統運維部、產品設計部和研發中心確定下一步操作。下一步操作步驟有提交腳本和待驗證這兩個。如果涉及腳本執行,則在工單信息中輸入需要執行的腳本,然后提交給部門經理進行審批,該工單的狀態即變為腳本審批中,部門經理審核腳本,如果通過,則點擊腳本審批按鈕提交執行,工單狀態變為腳本執行中,否則,點擊腳本審批駁回按鈕,退回上一步,重新提交新的腳本,狀態回到問題處理中。腳本執行完后,即進入待驗證狀態,由問題提報人進行驗證,如驗證通過,則關閉該工單,工單狀態變為已完成并且解決狀態置為已解決;如驗證未通過,則點擊退回按鈕,將問題退回到問題負責人,重新處理,工單狀態置為待處理,解決狀態置為未解決。問題負責人如收到被退回的工單,則按上述步驟重新走一遍流程,直到驗證通過。如果該問題工單不涉及腳本執行,則處理完后直接點擊待驗證按鈕,直接將該工單推送到問題提報人處進行驗證,狀態置為待驗證,同樣,如果驗證通過,則關閉該工單,工單狀態變為已完成并且解決狀態置為已解決;如驗證未通過,則點擊退回按鈕,將問題退回到問題負責人,重新處理,工單狀態置為待處理,解決狀態置為未解決。
本系統是完全自主開發可控的問題需求跟蹤系統,可以根據不同單位的需求,進行適應性改造。從舊工單系統整體遷移到本系統以來,運維工單正常流轉零失誤,實現了對各個項目進行過程的精細管理和階段目標的精密控制,對運維工作做到了無縫鏈接,其他在研項目的工單遷移工作也在逐步順利開展。商務網公司規范了公司產品、軟件設計開發和運維工單處理過程的管理和監督,滿足了公司增強市場競爭能力的需求,最大限度地減少了公司經營風險,有效提升了開發品質,縮短了開發時間,每年還節省了相對可觀的購買系統軟件License的相關版權費用,而且由于掌握了全部系統源代碼,做到了全系統自主可控。但是同時,也發現由于工單系統沒有及時的通知提醒功能,導致部分工單沒有被相應負責人及時處理。下一步將設計開發一款工單提醒系統,以用來有效提高工單響應速度,解決工單實時響應的問題。