趙德基+王力+狄軍峰
摘要:基于Dubbo與NoSQL的工業(yè)領(lǐng)域大數(shù)據(jù)平臺(tái),是在互聯(lián)網(wǎng)技術(shù)不斷發(fā)展的趨勢(shì)下,將傳統(tǒng)工業(yè)與大數(shù)據(jù)技術(shù)相結(jié)合的產(chǎn)物。隨著計(jì)算機(jī)硬件性能的不斷提升以及互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,以往在工業(yè)領(lǐng)域內(nèi)海量數(shù)據(jù)無(wú)法處理的局面得到了根本性的解決。大數(shù)據(jù)平臺(tái)充分結(jié)合了傳統(tǒng)工業(yè)領(lǐng)域,尤其包括電力行業(yè)、建筑行業(yè)、污水處理行業(yè)的各自特點(diǎn)。在不同場(chǎng)景的業(yè)務(wù)需求下,Dubbo+NoSQL的技術(shù)提供了對(duì)工業(yè)領(lǐng)域海量數(shù)據(jù)進(jìn)行接收、存儲(chǔ)、計(jì)算、分析及展示的解決方案。不僅改變了以往傳統(tǒng)行業(yè)技術(shù)落后的現(xiàn)狀,平臺(tái)更加注重對(duì)傳統(tǒng)行業(yè)的數(shù)據(jù)進(jìn)行專業(yè)化處理,對(duì)低價(jià)值密度的數(shù)據(jù)進(jìn)行加工,實(shí)現(xiàn)數(shù)據(jù)的增值。對(duì)行業(yè)安全、行業(yè)發(fā)展、行業(yè)數(shù)字化都具有十分重要的意義。
關(guān)鍵詞:Dubbo;NoSQL;MongoDB;工業(yè)領(lǐng)域
中圖分類(lèi)號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1007-9416(2017)07-0064-04
由于傳統(tǒng)工業(yè)領(lǐng)域?qū)A繑?shù)據(jù)的分析及存儲(chǔ)能力不足,各個(gè)領(lǐng)域?qū)ι纤偷臄?shù)據(jù)通常采取舍棄的處理方式。以電力行業(yè)新能源領(lǐng)域的集中式光伏電站為例,一個(gè)百兆瓦的集中式光伏電站有數(shù)以千計(jì)的設(shè)備,每個(gè)設(shè)備又有不同數(shù)量的遙測(cè)、遙信、遙控及遙調(diào)信息,大量的設(shè)備數(shù)據(jù)會(huì)以每分鐘甚至每秒鐘的頻率進(jìn)行上送。因此傳統(tǒng)行業(yè)管理系統(tǒng)面臨以下問(wèn)題。
(1)系統(tǒng)性能處理瓶頸。由于需要接收、處理的數(shù)據(jù)量過(guò)大,系統(tǒng)的負(fù)荷過(guò)高,無(wú)法對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)、可靠、深挖掘的處理,因此傳統(tǒng)領(lǐng)域的系統(tǒng)對(duì)海量數(shù)據(jù)往往只能采取不接收,或者接收不存儲(chǔ)、不分析的解決方案。
(2)系統(tǒng)存儲(chǔ)能力不足。由于大數(shù)據(jù)在高并發(fā)環(huán)境下的關(guān)系型數(shù)據(jù)庫(kù)應(yīng)用開(kāi)發(fā)越來(lái)越復(fù)雜,也越來(lái)越具有技術(shù)挑戰(zhàn)性。雖然關(guān)系型數(shù)據(jù)庫(kù)例如MySQL可以存儲(chǔ)一些大文本字段,但是會(huì)導(dǎo)致數(shù)據(jù)庫(kù)表非常的大,不利于快速恢復(fù)數(shù)據(jù)庫(kù)。關(guān)系型數(shù)據(jù)庫(kù)雖然功能強(qiáng)大,但是已經(jīng)不能很好的應(yīng)對(duì)所有的應(yīng)用場(chǎng)景。
(3)系統(tǒng)擴(kuò)展性差。當(dāng)需要有新的功能對(duì)原系統(tǒng)進(jìn)行補(bǔ)充時(shí),傳統(tǒng)管理系統(tǒng)的擴(kuò)展性較差。無(wú)法做到功能模塊可插拔,進(jìn)而無(wú)法快速適應(yīng)業(yè)務(wù)的不斷變化,增大了開(kāi)發(fā)難度和維護(hù)難度。
1 研究?jī)?nèi)容
針對(duì)工業(yè)領(lǐng)域傳統(tǒng)系統(tǒng)的不足,本系統(tǒng)采用Dubbo與NoSQL的分布式架構(gòu),對(duì)工業(yè)領(lǐng)域大數(shù)據(jù)進(jìn)行處理。系統(tǒng)以Dubbo為大數(shù)據(jù)處理核心,以NoSQL為大數(shù)據(jù)存儲(chǔ)核心,使以往工業(yè)領(lǐng)域中的海量數(shù)據(jù)的處理及存儲(chǔ)有了可能。
1.1 Dubbo技術(shù)
1.1.1 技術(shù)背景
隨著工業(yè)領(lǐng)域數(shù)據(jù)規(guī)模不斷擴(kuò)大,常規(guī)的架構(gòu)已無(wú)法應(yīng)對(duì),急需一個(gè)大數(shù)據(jù)平臺(tái)對(duì)工業(yè)領(lǐng)域數(shù)據(jù)進(jìn)行管理。
如圖1所示,當(dāng)工業(yè)領(lǐng)域的數(shù)據(jù)量很小時(shí),只需要一個(gè)應(yīng)用便可以將所有功能部署在一起,減少部署節(jié)點(diǎn)和成本。此時(shí),使用數(shù)據(jù)訪問(wèn)框架(ORM)對(duì)數(shù)據(jù)進(jìn)行增刪改查即可滿足工業(yè)領(lǐng)域需求。
隨著數(shù)據(jù)量越來(lái)越大,單一應(yīng)用通過(guò)增加機(jī)器的方式帶來(lái)的速度提升越來(lái)越小,針對(duì)此問(wèn)題的普遍做法是將應(yīng)用拆分成互不相干的幾個(gè)應(yīng)用,以提升效率。
但當(dāng)垂直應(yīng)用越來(lái)越多時(shí),應(yīng)用之間的交互不可避免,因此之后又發(fā)展出了用于提高業(yè)務(wù)復(fù)用及整合的分布式服務(wù)框架(RPC)。
最后,當(dāng)服務(wù)越來(lái)越多時(shí),容量的評(píng)估、小服務(wù)資源的浪費(fèi)問(wèn)題逐漸顯現(xiàn),此時(shí)資源調(diào)度和治理中心(SOA)出現(xiàn),對(duì)集群容量進(jìn)行調(diào)度提升集群利用率。
Dubbo便是一個(gè)分布式服務(wù)框架,致力于提供高性能和透明化的RPC遠(yuǎn)程服務(wù)調(diào)用方案以及SOA服務(wù)治理方案。通過(guò)使用Dubbo框架,便可以解決工業(yè)領(lǐng)域內(nèi)海量數(shù)據(jù)處理以及應(yīng)用越來(lái)越多的問(wèn)題。
1.1.2 架構(gòu)及特點(diǎn)
Dubbo架構(gòu)圖如圖2。
Dubbo有幾個(gè)關(guān)鍵節(jié)點(diǎn)的角色:
(1)Container:服務(wù)運(yùn)行容器。
服務(wù)調(diào)用時(shí),Container負(fù)責(zé)啟動(dòng)、加載,并運(yùn)行服務(wù)提供者。
(2)Provider:暴露服務(wù)的服務(wù)提供商。
服務(wù)提供者在啟動(dòng)時(shí),向注冊(cè)中心注冊(cè)自己提供的服務(wù);
(3)Consumer:調(diào)用遠(yuǎn)程服務(wù)的服務(wù)消費(fèi)方。
服務(wù)消費(fèi)者在啟動(dòng)時(shí),向注冊(cè)中心訂閱自己所需的服務(wù);
(4)Registry:服務(wù)注冊(cè)于發(fā)現(xiàn)的注冊(cè)中心。
注冊(cè)中心返回服務(wù)提供者地址列表給消費(fèi)者,如果有變更,將基于長(zhǎng)連接推送變更數(shù)據(jù)給消費(fèi)者;
(5)Monitor:監(jiān)控中心。
用于統(tǒng)計(jì)服務(wù)的調(diào)用次數(shù)和調(diào)用時(shí)間。
其中,服務(wù)消費(fèi)者基于軟負(fù)載均衡算法,從提供者地址列表中選一臺(tái)提供者進(jìn)行調(diào)用,如果調(diào)用失敗,再選另一臺(tái)調(diào)用。服務(wù)消費(fèi)者和提供者,在內(nèi)存中累計(jì)調(diào)用次數(shù)和調(diào)用時(shí)間,定時(shí)每分鐘發(fā)送一次統(tǒng)計(jì)數(shù)據(jù)到監(jiān)控中心。
Dubbo透明化的遠(yuǎn)程方法調(diào)用,就像調(diào)用本地方法一樣,只需簡(jiǎn)單配置,不需要任何API侵入;軟負(fù)載均衡及容錯(cuò)機(jī)制,可以內(nèi)網(wǎng)代替硬件負(fù)載均衡器,降低成本,減少單點(diǎn);服務(wù)自動(dòng)注冊(cè)與發(fā)現(xiàn),不需要寫(xiě)死服務(wù)提供方地址,注冊(cè)中心基于接口名查詢服務(wù)提供者的IP地址,并且能夠平滑添加或刪除服務(wù)提供者。需要添加新的應(yīng)用模塊時(shí),不用修改舊的系統(tǒng)代碼,只需簡(jiǎn)單修改配置文件即可實(shí)現(xiàn)。降低了工業(yè)領(lǐng)域內(nèi)系統(tǒng)升級(jí)或整合的難度。
以服務(wù)提供者為例,Sping配置如下:
<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi=http://Data.w3.org/2001/XMLSchema-instance xmlns:dubbo ="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://Data.springframework.org/schema/beans
http://Data.springframework.org/schema/beans/spring-beans.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方應(yīng)用信息,用于計(jì)算依賴關(guān)系 -->
<!--multicast廣播注冊(cè)中心暴露服務(wù)地址-->
<!-- 用dubbo協(xié)議在20880端口暴露服務(wù) -->
<!-- 聲明需要暴露的服務(wù)接口 -->
<!-- 和本地bean一樣實(shí)現(xiàn)服務(wù) -->
1.2 NoSQL技術(shù)
1.2.1 技術(shù)背景
傳統(tǒng)工業(yè)領(lǐng)域一般使用關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ)和管理。關(guān)系型數(shù)據(jù)庫(kù)性能可靠、使用簡(jiǎn)單、功能強(qiáng)大,當(dāng)數(shù)據(jù)量不大時(shí),關(guān)系型數(shù)據(jù)庫(kù)可以滿足存儲(chǔ)及增刪改查的需求。但當(dāng)數(shù)據(jù)量不斷增加,系統(tǒng)面臨數(shù)據(jù)處理的性能瓶頸。首先,數(shù)據(jù)的高并發(fā)寫(xiě)入,會(huì)使關(guān)系型數(shù)據(jù)庫(kù)寫(xiě)入壓力增加,甚至出現(xiàn)嚴(yán)重的鎖問(wèn)題,造成數(shù)據(jù)丟失。其次,當(dāng)關(guān)系型數(shù)據(jù)庫(kù)存儲(chǔ)的數(shù)據(jù)量越來(lái)越大時(shí),多表關(guān)聯(lián)進(jìn)行的查詢也會(huì)受到影響。同時(shí)當(dāng)存儲(chǔ)一些大文本字段時(shí),會(huì)導(dǎo)致數(shù)據(jù)庫(kù)表非常的大,不易快速恢復(fù)數(shù)據(jù)庫(kù)。
因此傳統(tǒng)工業(yè)領(lǐng)域亟待NoSQL的引入,對(duì)不斷增加的業(yè)務(wù)數(shù)據(jù)進(jìn)行存儲(chǔ)和管理。NoSQL指非關(guān)系型數(shù)據(jù)庫(kù),是對(duì)不同于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)的統(tǒng)稱,用于大規(guī)模數(shù)據(jù)的存儲(chǔ)。這些類(lèi)型的數(shù)據(jù)不需要固定的模式,無(wú)需多余操作就可以橫向擴(kuò)展。本系統(tǒng)采用NoSQL中MongoDB對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。
1.2.2 技術(shù)實(shí)現(xiàn)
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的開(kāi)源數(shù)據(jù)庫(kù)系統(tǒng)。在高負(fù)載的情況下,可以添加更多的節(jié)點(diǎn),保證服務(wù)器性能。當(dāng)工業(yè)數(shù)據(jù)不斷增加時(shí),MongoDB本身的特點(diǎn)決定了MongoDB可以很好的支持傳統(tǒng)工業(yè)領(lǐng)域的數(shù)據(jù)存儲(chǔ)要求。
(1)實(shí)用性。MongoDB是一個(gè)面向文檔的數(shù)據(jù)庫(kù),直接存取BSON,這意味著MongoDB更加靈活,因?yàn)樗梢栽谖臋n中直接插入數(shù)組之類(lèi)的復(fù)雜數(shù)據(jù)類(lèi)型。同時(shí)文檔的key和value不是固定的數(shù)據(jù)類(lèi)型和大小,所以使用MongoDB時(shí)無(wú)須預(yù)定義關(guān)系型數(shù)據(jù)庫(kù)中的”表”等數(shù)據(jù)庫(kù)對(duì)象,設(shè)計(jì)數(shù)據(jù)庫(kù)將變得非常方便,可以大大地提升系統(tǒng)開(kāi)發(fā)進(jìn)度;
(2)擴(kuò)展性。MongoDB可以非常有效的對(duì)數(shù)據(jù)庫(kù)進(jìn)行擴(kuò)展,通過(guò)自帶的MongoDB集群,只需要在適當(dāng)?shù)臅r(shí)候繼續(xù)添加Mongo分片,既可以實(shí)現(xiàn)程序段自動(dòng)水平擴(kuò)展和路由,不但緩解了單個(gè)節(jié)點(diǎn)的讀寫(xiě)壓力,并且可以有效地均衡磁盤(pán)容量的使用情況;
(3)負(fù)載均衡。MongoDB通過(guò)自帶副本集做到對(duì)數(shù)據(jù)的備份,同時(shí)通過(guò)設(shè)計(jì)適合自己業(yè)務(wù)的副本集驅(qū)動(dòng)程序,非常有效和方便的實(shí)現(xiàn)高可用及讀負(fù)載均衡。這一點(diǎn)其他的數(shù)據(jù)庫(kù)會(huì)比較難以實(shí)現(xiàn),往往需要額外的中間件,進(jìn)而造成了系統(tǒng)的復(fù)雜度;
(4)其他特性。MongoDB保留了一些SQL的友好特性,例如查詢和索引,因此可以支持任何屬性的索引來(lái)實(shí)現(xiàn)更快的排序,最終獲得用戶需要的數(shù)據(jù)。
因此,本系統(tǒng)使用MongoDB數(shù)據(jù)庫(kù)對(duì)工業(yè)領(lǐng)域內(nèi)不斷增加的海量數(shù)據(jù)進(jìn)行存儲(chǔ)管理,其完全滿足工業(yè)領(lǐng)域內(nèi)的各個(gè)場(chǎng)景。不同領(lǐng)域的數(shù)據(jù)都可以借助MongoDB以上的各種特性,實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ)、備份冗余、動(dòng)態(tài)查詢、故障轉(zhuǎn)移等功能。
以MongoDB分片為例:MongoDB集群示意圖如圖3所示。
本系統(tǒng)通過(guò)對(duì)MongoDB進(jìn)行分片,實(shí)現(xiàn)對(duì)工業(yè)領(lǐng)域內(nèi)海量數(shù)據(jù)的分布式存儲(chǔ)。系統(tǒng)部署四個(gè)分片,并部署配置服務(wù)器和路由服務(wù)器:
Shard Server 1:27000 #分片服務(wù)器1
…
Shard Server 4:27003 #分片服務(wù)器4
Config Server :27100 #配置服務(wù)器
Route Process:40000 #路由服務(wù)器
啟動(dòng)各個(gè)服務(wù)器后,便可將MongoDB與Dubbo框架進(jìn)行對(duì)接,或者通過(guò)第三方的MongoDB客戶端對(duì)MongoDB進(jìn)行操作:
[root@100 /]# mkdir -p /Data/mongoDB/shard/s0
…
[root@100 /]# mkdir -p /Data/mongoDB/shard/s3
[root@100 /]# mkdir -p /Data/mongoDB/shard/log
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27000 --dbpath=/Data/mongoDB/shard/s0 --logpath=/Data/mongoDB/shard/log/s0.log --logappend --fork
…
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27003 --dbpath=/Data/mongoDB/shard/s3 --logpath=/Data/mongoDB/shard/log/s3.log --logappend –fork
root@100 /]# mkdir -p /Data/mongoDB/shard/config
[root@100 /]# /usr/local/mongoDB/bin/mongod --port 27100 --dbpath=/Data/mongoDB/shard/config --logpath=/Data/mongoDB/shard/log/config.log --logappend --fork
/usr/local/mongoDB/bin/mongos --port 40000 --configdb localhost:27100 --fork --logpath=/Data/mongoDB/shard/log/route.log --chunkSize 500
2 結(jié)語(yǔ)
Dubbo+NoSQL工業(yè)領(lǐng)域大數(shù)據(jù)平臺(tái)可以解決傳統(tǒng)工業(yè)領(lǐng)域中存在的數(shù)據(jù)處理和存儲(chǔ)面臨的問(wèn)題。當(dāng)需要長(zhǎng)時(shí)間處理一些復(fù)雜算法時(shí),可以利用Dubbo進(jìn)行負(fù)載均衡,提高運(yùn)行速度并降低每個(gè)服務(wù)器節(jié)點(diǎn)的負(fù)載壓力。當(dāng)由于業(yè)務(wù)需要擴(kuò)展系統(tǒng)時(shí),也只需水平增加機(jī)器即可達(dá)到性能的提升,不需要購(gòu)置性能更強(qiáng)勁同時(shí)更昂貴的服務(wù)器,從而減少了企業(yè)的成本。另外MongoDB本身具備的彈性擴(kuò)容、備份管理、監(jiān)控告警及故障處理等功能,也很好的為工業(yè)領(lǐng)域不斷增長(zhǎng)的數(shù)據(jù)提供了解決方案。
綜上所述,Dubbo+NoSQL工業(yè)領(lǐng)域大數(shù)據(jù)平臺(tái)體現(xiàn)了互聯(lián)網(wǎng)技術(shù)與傳統(tǒng)工業(yè)領(lǐng)域業(yè)務(wù)的良好結(jié)合,為傳統(tǒng)工業(yè)挖掘了更多的數(shù)據(jù)價(jià)值并開(kāi)拓了更多應(yīng)用上的可能性。
由于業(yè)務(wù)場(chǎng)景在不斷發(fā)生變化,本系統(tǒng)架構(gòu)還會(huì)遇到新的挑戰(zhàn),需要不斷的優(yōu)化和改進(jìn)。
參考文獻(xiàn)
[1]霍多羅夫,迪洛爾夫.MongoDB權(quán)威指南[M].北京:人民郵電出版社,2011:50.
[2]任女爾,張慶余,林盛海.基于Dubbo+ZooKeeper的CAMDS協(xié)同業(yè)務(wù)改造[J].電腦知識(shí)與技術(shù),2016,11(2):35-38.
[3]陸操.阿里巴巴聯(lián)盟引流系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].南京大學(xué), 2015,5(1):10.
[4]劉嘉俊.基于SOA架構(gòu)的ERP與電子商務(wù)系統(tǒng)研究[J].企業(yè)經(jīng)濟(jì),2011(5):88-90.
[5]陳裕,林輝.基于SOA的ERP系統(tǒng)架構(gòu)模型研究[J].信息經(jīng)濟(jì)學(xué)與電子商務(wù):中國(guó)信息經(jīng)濟(jì)學(xué)會(huì)學(xué)術(shù)年會(huì),2008,11(1):20.
[6]汪清明.基于SOA的ERP系統(tǒng)體系結(jié)構(gòu)的研究[J].計(jì)算機(jī)應(yīng)用,2007,5(2):412-414.
[7]A Boicea,F(xiàn) Radulescu,LI Agapin. MongoDB vs Oracle -- Database Comparison[J]. International Conference on Emerging Intelligent Data & Web Technologies,2012,11(1):20.
[8]Z Parker,S Poe, SV Vrbsky. Comparing NoSQL MongoDB to an SQL DB[J]. Acm Southeast Conference, 2013.11(1):1-6.
[9]JR Loureno,B Cabral,P Carreiro,M Vieira,J Bernardino.Choosing the right NoSQL database for the job: a quality attribute evaluation[J].Journal of Big Data,2015,2(1):18.endprint
數(shù)字技術(shù)與應(yīng)用2017年7期