張文兵
(神華和利時信息技術(shù)有限公司 北京市 100001)
為實現(xiàn)煤炭、電力、化工等各大產(chǎn)業(yè)板塊報表及各層級單位報表的多級應(yīng)用,落實上級的統(tǒng)一數(shù)據(jù)報送要求,滿足數(shù)據(jù)采集報送、分類統(tǒng)計、共享協(xié)同、數(shù)據(jù)展示、分析預(yù)測等數(shù)據(jù)資源管理系統(tǒng)建設(shè)的業(yè)務(wù)需求,以及加強各單位之間的數(shù)據(jù)融合,實現(xiàn)集團全口徑統(tǒng)計數(shù)據(jù)管理,并且滿足不同單位可以實現(xiàn)自定義報表功能的實際需要,完成全過程、全口徑業(yè)務(wù)統(tǒng)計分析,整合生產(chǎn)歷史數(shù)據(jù),提高數(shù)據(jù)整合和經(jīng)營統(tǒng)計分析能力、加強數(shù)據(jù)校驗水平。智能報表平臺通過大數(shù)據(jù)、容器化、微服務(wù)、多租戶和分布式服務(wù)等技術(shù)的應(yīng)用為集團高層決策提供了可靠的數(shù)據(jù)支撐。
智能報表平臺按照集團指標(biāo)標(biāo)準(zhǔn)體系和管控平臺要求實現(xiàn)指標(biāo)統(tǒng)一分類、統(tǒng)一定義,確保指標(biāo)分類科學(xué)、定義準(zhǔn)確、來源清晰、接入規(guī)范、質(zhì)量可控、數(shù)據(jù)可用。面向集團報表的整體需求,平臺分三個組成部分:統(tǒng)計平臺、采集平臺、報表平臺。提供了數(shù)據(jù)從采集、填報、校驗、計算、匯總統(tǒng)計、報表、搜索、共享發(fā)布及服務(wù)的一體化解決方案。
平臺采用大數(shù)據(jù)平臺的數(shù)據(jù)支撐和標(biāo)準(zhǔn)支撐為基礎(chǔ)。統(tǒng)計平臺作為整個平臺的支撐,提供了統(tǒng)一認證、多租戶、授權(quán)、監(jiān)控、報表引擎等服務(wù)。采集平臺主要在數(shù)據(jù)填報、數(shù)據(jù)采集、數(shù)據(jù)校驗、報送流程管理等功能方面進行技術(shù)實現(xiàn)與擴展。報表平臺主要在集群部署、參數(shù)可視化配置、報表打印、報表閾值管理等工作內(nèi)容進行建設(shè)實施。
采集平臺通過從PC 端、移動端批量或者定時采集的方式采集并校驗從而完成數(shù)據(jù)上報。通過采集平臺配置Oracle 等關(guān)系型數(shù)據(jù)庫、Web Service 接口等形式的數(shù)據(jù)源作為數(shù)據(jù)接入層,并通過TCP 協(xié)議將加密數(shù)據(jù)傳輸至采集平臺,通過全文檢索引擎完成數(shù)據(jù)的索引和格式化存儲。報表平臺負責(zé)對數(shù)據(jù)解析、制定計算規(guī)則、設(shè)置報表參數(shù)、閾值等完成報表的初始化配置與展現(xiàn)。平臺具有高兼容性、高吞吐、高并發(fā)、可視化分析、大數(shù)據(jù)分析等特點。
報表平臺設(shè)計遵循可用性高、可擴展性強、響應(yīng)迅速的要求。選擇基于開源的大數(shù)據(jù)及其相關(guān)組件作為選型標(biāo)準(zhǔn),要求系統(tǒng)7×24 小時持續(xù)可用,可在每日特定時間段內(nèi)對系統(tǒng)進行維護。要求數(shù)據(jù)存取服務(wù)準(zhǔn)確,不能丟失數(shù)據(jù)。擴展性方面要求系統(tǒng)功能擴展或用戶量增加時應(yīng)不影響現(xiàn)有系統(tǒng)功能和結(jié)構(gòu),能夠方便后續(xù)其他系統(tǒng)模塊的擴展,能夠當(dāng)系統(tǒng)數(shù)據(jù)量和訪問量增大而導(dǎo)致系統(tǒng)配置不能滿足要求時,可以通過僅增加服務(wù)器等硬件進行解決。在系統(tǒng)響應(yīng)方面,要求支持數(shù)10 萬客戶同時在線填報和執(zhí)行數(shù)據(jù)校驗規(guī)則時,頁面響應(yīng)時間在3 秒以內(nèi)。
數(shù)據(jù)采集包括批量采集技術(shù)ETL-Data Services,它通過ETL技術(shù)將數(shù)據(jù)從數(shù)據(jù)資源層采集至報表平臺;非結(jié)構(gòu)化數(shù)據(jù)采集技術(shù)Flume,提供一個模塊分明,易于開發(fā)的高可用,高可靠,分布式的海量日志采集、聚合和傳輸系統(tǒng);Java 采集接口,通過接口采用統(tǒng)一數(shù)據(jù)交換格式由第三方系統(tǒng)采集數(shù)據(jù);BW-OpenHub 數(shù)據(jù)推送接口,從數(shù)倉采集數(shù)據(jù)到報表平臺。
存儲方面平臺采用分布式存儲策略,存儲技術(shù)采用關(guān)系型數(shù)據(jù)庫MySQL、分布式數(shù)據(jù)庫MongoDB 和分布式全文搜索引擎ElasticSearch、內(nèi)存數(shù)據(jù)庫Redis 以及離線緩存服務(wù)IndexedDB。
數(shù)據(jù)分析處理方面平臺使用包括腳本語言、分布式消息隊列KafKa、分布式計算引擎Spark、算法應(yīng)用Python、機器學(xué)習(xí)MLlib、深度學(xué)習(xí)TensorFlow 等開源技術(shù)中先進的分布式計算引擎和豐富的數(shù)據(jù)模型及算法。
針對高可用、高性能、擴展性強的業(yè)務(wù)特點,平臺選擇基于容器化的應(yīng)用部署方式。Docker 作為一種新興的虛擬化方式,比傳統(tǒng)虛擬化方式有更多優(yōu)勢:
(1)Docker 實現(xiàn)了更快地應(yīng)用交付和部署,可以解決傳統(tǒng)方式下應(yīng)用部署的步驟繁瑣問題,
(2)使用Kubernetes 的容器管理功能,實現(xiàn)了更輕松地應(yīng)用遷移和擴展,能在系統(tǒng)擴展上發(fā)揮獨特優(yōu)勢,借助kubernetes 強大的容器管理和編排功能,可以實現(xiàn)在占用較少服務(wù)器資源的情況下,更方便地進行應(yīng)用的遷移與擴展,解決了隨著用戶量不斷增加而導(dǎo)致的傳統(tǒng)方式下服務(wù)器資源調(diào)度效率低下的問題。同時提高了應(yīng)用迭代更新的效率,容器啟動也能秒級響應(yīng),大量節(jié)約了開發(fā)、部署的時間。
(3)Docker 實現(xiàn)了更簡單地應(yīng)用管理,應(yīng)用修改以增量方式分發(fā)和更新,實現(xiàn)了高效地自動化應(yīng)用管理。
2.2.1 數(shù)據(jù)采集
平臺數(shù)據(jù)采集層使用采集工具和基于Node.js、Java 自主開發(fā)的數(shù)據(jù)采集模塊完成數(shù)據(jù)采集工作。平臺數(shù)據(jù)采集層支持數(shù)據(jù)自動采集,減少了人工填報的工作量,并可實現(xiàn)同一張報表或腳本支持多個不同的數(shù)據(jù)源,如關(guān)系型數(shù)據(jù)庫、文本數(shù)據(jù)源、多維數(shù)據(jù)庫、NoSQL 數(shù)據(jù)庫、分布式文件存儲系統(tǒng)、時序數(shù)據(jù)庫等。采集工具包括批量采集技術(shù)ETL-Data Services 以及開源的非結(jié)構(gòu)化數(shù)據(jù)采集工具Flume。ETL-Data Services 通過ETL 技術(shù),將數(shù)據(jù)從第三方平臺的數(shù)據(jù)資源層加載到報表平臺,F(xiàn)lume 提供一個高可用、高可靠、分布式的海量數(shù)據(jù)采集、聚合和傳輸系統(tǒng),F(xiàn)lume 將需要同步數(shù)據(jù)的第三方平臺信息通過配置文件配置到工具采集端,通過對報表數(shù)據(jù)的解析、轉(zhuǎn)換將數(shù)據(jù)格式轉(zhuǎn)換成報表平臺的數(shù)據(jù)規(guī)范,從而完成數(shù)據(jù)的采集工作。
Java 接口數(shù)據(jù)采集的模式是根據(jù)第三方平臺的數(shù)據(jù)規(guī)范和要求,通過統(tǒng)一數(shù)據(jù)交換格式,定制開發(fā)專屬數(shù)據(jù)采集程序從而完成從第三方系統(tǒng)的數(shù)據(jù)采集需求。此外平臺從數(shù)據(jù)倉庫BW 采集數(shù)據(jù)時,可以通過BW 提供的OpenHub 接口技術(shù),把數(shù)據(jù)推送到報表平臺。
通過以上采集手段豐富了平臺采集模塊的功能,使采集模塊可從不同的數(shù)據(jù)源中抽取、傳輸、轉(zhuǎn)換和加載數(shù)據(jù)到統(tǒng)計分析庫中,完成ETL 過程,實現(xiàn)從各種數(shù)據(jù)源到報表平臺的格式化存儲過程。
2.2.2 數(shù)據(jù)存儲
平臺采用分布式存儲策略,存儲技術(shù)包括關(guān)系型數(shù)據(jù)庫MySQL、分布式數(shù)據(jù)庫MongoDB 和全文檢索引擎ElasticSearch、內(nèi)存數(shù)據(jù)庫Redis 以及離線緩存IndexedDB。
基于傳統(tǒng)報表系統(tǒng)存在數(shù)據(jù)存取效率低的現(xiàn)狀,平臺存儲采用分布式部署架構(gòu),選擇開源分布式文件存儲數(shù)據(jù)庫MongoDB做存儲集群為Web 應(yīng)用提供可擴展的高性能數(shù)據(jù)存儲解決方案。MongoDB 支持格式化以及非格式化的數(shù)據(jù)結(jié)構(gòu),功能豐富,可以存儲比較復(fù)雜的數(shù)據(jù)類型,同時還支持數(shù)據(jù)建立索引以增強數(shù)據(jù)查詢的性能。MongoDB 集群在保證擴展能力的同時實現(xiàn)了數(shù)據(jù)讀寫均衡、高吞吐量,有效的提高了數(shù)據(jù)存取的效率,同時運用分片技術(shù),智能拆分數(shù)據(jù),分片執(zhí)行任務(wù),實現(xiàn)數(shù)據(jù)關(guān)聯(lián)查詢的高性能。數(shù)據(jù)存儲服務(wù)提供負載均衡能力,保證短任務(wù)的快速響應(yīng)、實現(xiàn)報表數(shù)據(jù)的快速讀寫。
分布式全文檢索引擎ElasticSearch 實現(xiàn)了報表數(shù)據(jù)的高速檢索、聚合以及高性能關(guān)聯(lián)匯總查詢,利用查詢緩存技術(shù)提高查詢體驗。針對報表的多任務(wù)處理,采用智能隊列技術(shù),合并相似任務(wù),提高磁盤讀寫數(shù)據(jù)的利用率。報表平臺利用ElasticSearch 高擴展、高實時性的搜索與數(shù)據(jù)分析引擎完成了多報表的索引和關(guān)聯(lián)查詢,解決了傳統(tǒng)關(guān)系型數(shù)據(jù)庫多表關(guān)聯(lián)查詢效率低的問題,大大提升了報表數(shù)據(jù)的分析能力。
2.2.3 容器化
平臺采用微服務(wù)架構(gòu)來承載高并發(fā)的需求。基于分布式微服務(wù)協(xié)同架構(gòu)的計算引擎、匯總引擎、審核引擎、搜索引擎等支持海量數(shù)據(jù)運算,支持容錯能力,每個數(shù)據(jù)節(jié)點都有備份,有節(jié)點失效仍能保證系統(tǒng)運行。集群中的微服務(wù)節(jié)點都是對等的,多機可同時服務(wù)。大量的高并發(fā)高耗時任務(wù)可在微服務(wù)架構(gòu)下協(xié)同進行,并能夠智能合并任務(wù),完成多級并發(fā)操作。
平臺基于微服務(wù)的架構(gòu)設(shè)計,讓系統(tǒng)整體變得復(fù)雜,提升了測試和運維部署的成本,針對微服務(wù)場景下進程多、迭代快的實際需求,平臺采用基于開源的Kubernetes 和Docker 實現(xiàn)了微服務(wù)的容器化。容器化技術(shù)有效的減輕了微服務(wù)模塊的測試、部署以及運維的負擔(dān)。同時Docker 解決了各微服務(wù)運行時的隔離問題,并且通過打包應(yīng)用本身及其所有依賴,實現(xiàn)了良好的可移植性以及各環(huán)境部署的一致性,打通了開發(fā)測試發(fā)布的整個流程?;谳p量級、易擴展的Docker 服務(wù),各微服務(wù)模塊很容易實現(xiàn)持續(xù)集成、持續(xù)部署以及計算性能的線性擴展。各模塊如匯總引擎微服務(wù)的容器化,通過構(gòu)建Dockerfile 描述文件把微服務(wù)制作成鏡像,并上傳到鏡像私有倉庫。通過基于Kubernetes 的容器編排管理框架,實現(xiàn)各個微服務(wù)的快速部署和迭代,并且可以實現(xiàn)各微服務(wù)之間的組合編排形成應(yīng)用。同時Kubernetes 簡化了部署復(fù)雜度并且實現(xiàn)了低成本的應(yīng)用秒級回滾,也提供了應(yīng)用的可伸縮、高可用、高容錯特性。
2.2.4 多租戶
報表平臺中數(shù)據(jù)源來自于各第三方系統(tǒng),數(shù)據(jù)敏感度高,用戶之間權(quán)限隔離度要求高,平臺內(nèi)各系統(tǒng)數(shù)據(jù)要求相互隔離存儲,避免造成數(shù)據(jù)權(quán)限混亂從而導(dǎo)致的數(shù)據(jù)資源濫用,因此數(shù)據(jù)安全在報表平臺中顯得尤為重要。
報表平臺提供安全訪問控制功能,包括:身份識別、訪問授權(quán)、功能訪問鑒權(quán)和數(shù)據(jù)訪問鑒權(quán)。訪問授權(quán)分為功能授權(quán)和數(shù)據(jù)授權(quán),功能授權(quán)決定用戶能訪問的功能,即用戶能看見的功能菜單、按鈕等;數(shù)據(jù)授權(quán)決定用戶訪問某功能時能讀取的數(shù)據(jù)范圍。平臺支持數(shù)據(jù)訪問鑒權(quán),在后臺程序處理用戶提交請求時,系統(tǒng)必須根據(jù)當(dāng)前用戶擁有的權(quán)限決定此用戶是否具有訪問此功能的權(quán)限,防止用戶更改請求URL 跨功能訪問。平臺還提供數(shù)據(jù)分級管理功能,建立數(shù)據(jù)分級訪問制度,確定用戶對業(yè)務(wù)數(shù)據(jù)特別是敏感的業(yè)務(wù)數(shù)據(jù)的訪問范圍,訪問時效等。
報表平臺采用多租戶架構(gòu),有獨立的租戶管理模塊,通過系統(tǒng)管理員分配租戶,租戶可自行定制自身的業(yè)務(wù)。平臺支持租戶間資源隔離及共享,包括CPU、內(nèi)存、存儲、網(wǎng)絡(luò)、數(shù)據(jù)庫集群等。租戶間數(shù)據(jù)隔離,采用類“數(shù)據(jù)庫實例”概念隔離,隔離級別最高,安全性最好,保障了數(shù)據(jù)安全性,且故障恢復(fù)互不影響。租戶間的數(shù)據(jù)共享由平臺的數(shù)據(jù)共享模塊統(tǒng)一管理,通過數(shù)據(jù)共享提高了數(shù)據(jù)利用率。平臺采用獨立數(shù)據(jù)架構(gòu),底層通過Node.js 實現(xiàn)不同租戶綁定不同的數(shù)據(jù)庫,保證安全性的同時提高數(shù)據(jù)隔離和數(shù)據(jù)擴展級別,簡化了數(shù)據(jù)模型的擴展設(shè)計,滿足了不同租戶的獨特需求,針對故障情況,恢復(fù)數(shù)據(jù)也更簡單。多租戶表單定制具有良好的跨平臺性、易用性以及即配即用特點。租戶通過數(shù)據(jù)定制選擇和配置數(shù)據(jù)存儲模式,精準(zhǔn)地配置所需要呈現(xiàn)在界面上的業(yè)務(wù)屬性元素、頁面的樣式及應(yīng)用操作,滿足了不同租戶的業(yè)務(wù)需求。
智能報表平臺已在集團多個業(yè)務(wù)系統(tǒng)中成功應(yīng)用,為全集團各級單位提供報表服務(wù),平臺各功能都實現(xiàn)了既定目標(biāo)?;陂_源框架實現(xiàn)的智能報表平臺滿足了全集團多層級、多業(yè)務(wù)的應(yīng)用需求,實現(xiàn)了集團各級數(shù)據(jù)的采集、存儲、處理、分析、展現(xiàn)全過程以及指標(biāo)數(shù)據(jù)的標(biāo)準(zhǔn)化、模型化管理,實現(xiàn)了各種對上、對外報送任務(wù)的自動化解決,數(shù)據(jù)就源輸入以及一次填報多處應(yīng)用的功能。平臺整體提升了集團數(shù)據(jù)資源統(tǒng)一管理和利用水平,同時共享業(yè)務(wù)能力和基礎(chǔ)技術(shù)能力,提高了數(shù)據(jù)質(zhì)量并增強了集中管控,整體降低了集團總部及各層級單位重復(fù)建設(shè)的資金成本、時間成本和試錯成本。