任女爾 張慶余 林盛海
摘要:CAMDS中國(guó)汽車材料數(shù)據(jù)系統(tǒng),作為整車企業(yè)管理供應(yīng)商零件及其材料成分的重要依據(jù),為中國(guó)的汽車材料市場(chǎng)建立了一套完整的機(jī)制。但與CAMDS協(xié)同管理、面向整車企業(yè)內(nèi)部的環(huán)境合規(guī)系統(tǒng),通過Web Service接口與CAMDS進(jìn)行數(shù)據(jù)交互,無論在算法計(jì)算上還是數(shù)據(jù)響應(yīng)速度上都需要進(jìn)一步改善。本研究設(shè)計(jì)了通過Dubbo+ZooKeeper協(xié)同調(diào)度進(jìn)行系統(tǒng)改造,從而改進(jìn)了企業(yè)內(nèi)部環(huán)境合規(guī)系統(tǒng)的架構(gòu),也大幅度提升了CAMDS響應(yīng)速度。
關(guān)鍵詞:CAMDS;Dubbo;ZooKeeper;并發(fā)擴(kuò)展
中圖分類號(hào):TP311 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2016)29-0103-03
隨著國(guó)家在汽車材料的可回收利用及有害物質(zhì)方面的引導(dǎo)管控,中國(guó)汽車技術(shù)研究中心數(shù)據(jù)資源中心推出了國(guó)內(nèi)唯一的支撐平臺(tái):CAMDS(China Automotive Material Data System)生態(tài)體系。它圍繞管理企業(yè)零部件供應(yīng)鏈的各級(jí)材料數(shù)據(jù)、提高汽車產(chǎn)品回收利用率而設(shè)計(jì)的材料數(shù)據(jù)管理體系,其中包括各種輔助填報(bào)工具及企業(yè)應(yīng)用產(chǎn)品,從而輔助企業(yè)進(jìn)行材料數(shù)據(jù)的管理,提高汽車生產(chǎn)階段的可指導(dǎo)性。
1CAMDS生態(tài)體系
CAMDS生態(tài)體系是以平臺(tái)為核心填報(bào)平臺(tái),集成各個(gè)整車、供應(yīng)商零部件數(shù)據(jù),以此作為基礎(chǔ)支撐,輔助企業(yè)進(jìn)行整車零部件、材料、物質(zhì)分析的綜合服務(wù)平臺(tái)。
1.1業(yè)務(wù)介紹
CAMDS生態(tài)體系包含如下產(chǎn)品:
1)CAMDS中國(guó)汽車材料數(shù)據(jù)系統(tǒng),為B/S架構(gòu),主要管理各級(jí)供應(yīng)商及其對(duì)應(yīng)的材料、半成品、零部件及總成等游離的材料數(shù)據(jù)。
2)輔助填報(bào)工具:
CAMDS離線,支持離線填報(bào)材料數(shù)據(jù)等;
CIE(CAMDS Interface Excel)輔助錄入工具,支持通過excel進(jìn)行數(shù)據(jù)填報(bào);
3)CAI(CAMDS Advanced Interface)高級(jí)接口,通過webservice提供企業(yè)進(jìn)行數(shù)據(jù)填報(bào)、同步、審核等功能。
在高級(jí)接口基礎(chǔ)上,支持企業(yè)級(jí)產(chǎn)品:第一,ELV(End-of-Life Vehicle)環(huán)境合規(guī)系統(tǒng),支持通過接口進(jìn)行數(shù)據(jù)結(jié)構(gòu)同步、審核,包括材料、半成品、零部件等,并整合企業(yè)整車BOM數(shù)據(jù),進(jìn)行整車可回收及可再利用率的計(jì)算;第二,VOC(volatileorganic compounds)環(huán)境合規(guī)系統(tǒng),支持通過接口同步VOC數(shù)據(jù),從而進(jìn)行進(jìn)一步模擬汽車揮發(fā)性氣體的檢測(cè)與指導(dǎo)生產(chǎn)。
在企業(yè)應(yīng)用過程中,通過平臺(tái)收集、創(chuàng)建游離的零部件和材料等數(shù)據(jù),然后利用ELV、VOC等系統(tǒng)進(jìn)行進(jìn)一步的分析,包括分析基礎(chǔ)材料是否環(huán)保合規(guī)、整車的有害物質(zhì)含量是否超標(biāo)、整車可回收利用率等。
在其核心業(yè)務(wù)中,伴隨著整車BOM(Bill of Material)的構(gòu)成設(shè)計(jì)、分析,以及審核溝通業(yè)務(wù),其總體上劃分為MDS創(chuàng)建、MDS檢索、請(qǐng)求管理、分類管理、系統(tǒng)管理模塊。
1.2當(dāng)前技術(shù)及問題
核心平臺(tái)采用了基于SSH的java技術(shù)作為基礎(chǔ)實(shí)現(xiàn),并在部署中采用了雙機(jī)熱備等輔助手段進(jìn)行了性能調(diào)優(yōu)和安全備份;在接口支撐中,采用了Web Service的WSDL技術(shù)提供服務(wù)滿足各企業(yè)的訪問需求。但在實(shí)際的運(yùn)營(yíng)過程進(jìn)行集中訪問和培訓(xùn)的期間,其并發(fā)訪問量急劇上升,訪問隔離性降低,導(dǎo)致部分請(qǐng)求不能及時(shí)響應(yīng)或出現(xiàn)錯(cuò)誤。本文設(shè)計(jì)基于Dubbo和ZooKeeper進(jìn)行協(xié)同,從而大幅度提升系統(tǒng)運(yùn)行效率,提高系統(tǒng)穩(wěn)定性和安全性。
2Dubbo+ZooKeeDer技術(shù)
2.1Dubbo技術(shù)
Dubbo是阿里巴巴開發(fā)的一款高性能分布式服務(wù)框架,通過提供者和消費(fèi)者模式管理運(yùn)維服務(wù)。如下圖所示,
Dubbo運(yùn)行原理為:首先,啟動(dòng)服務(wù)容器Container,加載提供者Provider;此時(shí)向注冊(cè)中心注冊(cè)服務(wù),生成服務(wù)列表;當(dāng)有消費(fèi)者Consumer需要調(diào)用服務(wù)時(shí),向注冊(cè)中心訂閱服務(wù),注冊(cè)中心讀取服務(wù)列表講服務(wù)地址傳給消費(fèi)者進(jìn)行調(diào)用;消費(fèi)者在調(diào)用服務(wù)時(shí),采用軟件算法進(jìn)行負(fù)載均衡,選擇合適的服務(wù)提供出來;在整個(gè)消費(fèi)提供的過程中,消費(fèi)、提供服務(wù)將被監(jiān)控中心進(jìn)行統(tǒng)計(jì)。
Dubbo在進(jìn)行服務(wù)注冊(cè)時(shí),可以通過存儲(chǔ)到DB數(shù)據(jù)庫、Re-dis緩存、ZooKeeper中進(jìn)行服務(wù)的調(diào)控。在DB和Redis中,需要重新進(jìn)行維護(hù)數(shù)據(jù),在穩(wěn)定性和同步策略方面不夠成熟,因此官方推薦使用ZooKeeper進(jìn)行集成。
在傳統(tǒng)的遠(yuǎn)程過程調(diào)用技術(shù)中,Web Service模式的WSDL技術(shù)廣泛應(yīng)用于各種系統(tǒng)中,其基于XML方式起源,逐步發(fā)展和優(yōu)化,在性能方面有了較大的改進(jìn)。但是其數(shù)據(jù)交換過程中支持XML各種元素,相比較Dubbo以二進(jìn)制流進(jìn)行傳輸,其以文本方式進(jìn)行傳輸則較為笨重、速度較慢。此外,Dubbo對(duì)原有接口的支持性較好,基于原有接口進(jìn)行改造簡(jiǎn)單便捷;Dubbo作為分布式服務(wù)框架,對(duì)分布式支持實(shí)現(xiàn)簡(jiǎn)單,也是作為其擴(kuò)展位SOA微服務(wù)框架的重要優(yōu)勢(shì)。綜合Dubbo在各個(gè)系統(tǒng)中的表現(xiàn),本文采用Dubbo對(duì)WSDL接口進(jìn)行改造設(shè)計(jì)。
2.2ZooKeeper技術(shù)
ZooKeeper作為Dubbo官方推薦的分布式過程協(xié)同技術(shù),基于對(duì)樹形數(shù)據(jù)的簡(jiǎn)單維護(hù),短小精悍,因此在長(zhǎng)期的項(xiàng)目實(shí)踐中展示了較強(qiáng)的穩(wěn)定性、一致性和有序性等特性,是進(jìn)行分布式協(xié)同的利器。例如Hbase、Kafka、solr、Fetching Service等的基礎(chǔ)運(yùn)行就需要依賴ZooKeeper。它通過簡(jiǎn)單的并發(fā)處理機(jī)制一原子廣播保持?jǐn)?shù)據(jù)同步,確保其在并發(fā)中的穩(wěn)定性。
ZooKeeper設(shè)計(jì)通過維護(hù)不同的ZooKeeper server數(shù)據(jù)同步,從而提供給各個(gè)客戶端相同的數(shù)據(jù),而提供的數(shù)據(jù)以樹形結(jié)構(gòu)類似于UNIX文件的模式進(jìn)行存儲(chǔ);通過選舉模式,始終保持服務(wù)集群中存在一個(gè)主節(jié)點(diǎn)Leader,Leader在進(jìn)行廣播時(shí)保證原子性和順序性,保證同步的一致性;通過建立心跳模式也維持了ZooKeeper集群的穩(wěn)定性。
在和Dubbo的整合中,通過將Dubbo的服務(wù)注冊(cè)到Zoo-Keeper中,來維持分布式服務(wù)的穩(wěn)定性,如下為Dubbo在Zoo-Keeper中維護(hù)的數(shù)據(jù)結(jié)構(gòu):
如圖所示,將服務(wù)注冊(cè)到ZooKeeper的Provider里面,消費(fèi)時(shí)也先注冊(cè),然后提供者將服務(wù)訪問地址提供給對(duì)應(yīng)的消費(fèi)者。
2.3改造問題分析
針對(duì)CAMDS平臺(tái)對(duì)支撐系統(tǒng)并發(fā)訪問不足的問題,本文設(shè)計(jì)通過將接口基于Dubbo和ZooKeeper進(jìn)行改造,并柔性的支撐CAMDS進(jìn)一步改造為接口支撐平臺(tái),從而提升CAMDS在訪問效率和高并發(fā)穩(wěn)定性方面的表現(xiàn)。其中關(guān)鍵解決的問題,一是最大限度利用原有開發(fā)的接口進(jìn)行改造,二是設(shè)計(jì)實(shí)現(xiàn)ZooKeeper服務(wù)的高并發(fā)注冊(cè)調(diào)配。
3協(xié)同業(yè)務(wù)設(shè)計(jì)
3.1架構(gòu)改造設(shè)計(jì)
在CAMDS當(dāng)前的業(yè)務(wù)邏輯中,以CAMDS和Web Service接口為核心的協(xié)同業(yè)務(wù)形成了單點(diǎn)核心的趨勢(shì),使得在業(yè)務(wù)邏輯運(yùn)行時(shí),接口和平臺(tái)負(fù)載較重,并發(fā)性能低,如下所示,
基于ZooKeeper和Dubbo的架構(gòu)改造設(shè)計(jì)打破了這一趨勢(shì),形成了以ZooKeeper注冊(cè)為整體核心的微服務(wù)模式,可以根據(jù)服務(wù)的負(fù)載情況配置Dubbo進(jìn)行負(fù)載均衡。比如,當(dāng)MDS表單下載服務(wù)訪問并發(fā)性要求較高,則啟動(dòng)較多的MDS表單下載服務(wù)進(jìn)行注冊(cè),配置Dubbo進(jìn)行選擇。
3.2業(yè)務(wù)歸類整理
在CAMDS協(xié)同業(yè)務(wù)體系中,首先將業(yè)務(wù)體系的服務(wù)層進(jìn)行分類整理,根據(jù)之前的使用經(jīng)驗(yàn),劃分具體的Dubbo服務(wù)業(yè)務(wù),如公用服務(wù)、VOC專用服務(wù)、ELV服務(wù)、平臺(tái)服務(wù)等,同時(shí)將并發(fā)性要求較高的服務(wù)抽離出來,以便進(jìn)行并發(fā)性配置。
1)公用服務(wù),是指各個(gè)系統(tǒng)中均需進(jìn)行調(diào)用的公用服務(wù)模塊,如權(quán)限驗(yàn)證、MDS查詢、下載基本物質(zhì)、下載禁限用物質(zhì)應(yīng)用選項(xiàng)及代碼、下載材料分類、聚合物材料標(biāo)示、發(fā)送郵件等。在CAMDS平臺(tái)及VOC、ELV進(jìn)行底層實(shí)現(xiàn)調(diào)用時(shí),可以直接調(diào)用該服務(wù)執(zhí)行數(shù)據(jù)操作。該類公用操作支持系統(tǒng)較多,如下載材料等服務(wù)單獨(dú)歸納,設(shè)置高并發(fā)性。
2)VOC專用服務(wù),是指下載VOC數(shù)據(jù)及其檢測(cè)報(bào)告等VOC環(huán)境合規(guī)系統(tǒng)專用業(yè)務(wù),可以根據(jù)企業(yè)應(yīng)用VOC環(huán)境合規(guī)系統(tǒng)產(chǎn)品情況酌情配置高并發(fā)性。
3)ELV專用服務(wù),指ELV環(huán)境合規(guī)系統(tǒng)中專用的服務(wù),如有害物質(zhì)分析、發(fā)送請(qǐng)求、MDS審核等。
4)平臺(tái)服務(wù),如注冊(cè)供應(yīng)商、企業(yè)合并等服務(wù)。
此外,對(duì)于下載MDS占用資源大、使用頻度高,則直接單獨(dú)啟用服務(wù)進(jìn)行注冊(cè)。
3.3Dubbo+ZooKeeper設(shè)計(jì)與實(shí)現(xiàn)
首先,將Dubbo與現(xiàn)有接口進(jìn)行整合,整合過程需要先安裝ZooKeeper,然后把基于WSDL的接口進(jìn)行Dubbo改造。然后通過生成不同的服務(wù)進(jìn)行ZooKeeper注冊(cè),提供給各個(gè)協(xié)同業(yè)務(wù)系統(tǒng)公用或?qū)S械姆?wù),從而提升系統(tǒng)的并發(fā)性可穩(wěn)定性。
3.3.1dubbo與ZooKeeper和spring整合
第一步,安裝ZooKeeper。下載安裝包后,在Linux中解壓,復(fù)制zoo_sample.cfg為ZOO.cfg文件,在文件中配置監(jiān)聽端口cli-entPort、心跳頻率tickTime、數(shù)據(jù)目錄dataDir。安裝zoolnspec-tor可以查看ZooKeeper樹形結(jié)構(gòu)數(shù)據(jù)信息。
第二步,配置Dubbo管理界面。下載對(duì)應(yīng)Dubbo的war包,解壓到linux下的Tomcat中,配置dubbo.properties中的注冊(cè)中心信息,指向ZooKeeper服務(wù),如下圖所示:
啟動(dòng)tomcm,能夠正常登錄驗(yàn)證界面配置成功。
第三步,Spring整合Dubbo。CAMDS的Web Service接口開發(fā)基于Spring,因此需要進(jìn)行整合。在接口工程中加入Dub—bo和ZooKeeper的jar包,以下載MDS為例,定義下載接口,實(shí)現(xiàn)注冊(cè)服務(wù)測(cè)試:
將服務(wù)注冊(cè)到ZooKeeper,配置Spring文件:
其中,ZooKeeper配置為多個(gè)集群節(jié)點(diǎn)時(shí),設(shè)置address為逗號(hào)隔開的多個(gè)地址。此時(shí)完成了一個(gè)注冊(cè)服務(wù)的設(shè)置,啟動(dòng)Dubbo生成的程序,則服務(wù)啟動(dòng),注冊(cè)到ZooKeeper中。完成了接口整合Dubbo和ZooKeeper之后,通過業(yè)務(wù)歸類對(duì)業(yè)務(wù)進(jìn)行抽離,然后將接口分別進(jìn)行服務(wù)改造。
3.3.2服務(wù)訂閱與調(diào)用
服務(wù)注冊(cè)到ZooKeeper之后,開發(fā)服務(wù)消費(fèi)者,進(jìn)行服務(wù)調(diào)用。在客戶端應(yīng)用中引入Dubbo和ZooKeeper的jar包,加入Dubbo服務(wù)的API接口的jar包。然后定義調(diào)用代碼:
如上圖所示,可以直接像調(diào)用本地方法一樣調(diào)用接口方法,需注意的是,引用服務(wù)iar時(shí)需引用接口iar,而非實(shí)現(xiàn)。
最后,需要將在客戶端配置對(duì)應(yīng)的ZooKeeper進(jìn)行管理引用服務(wù):
如圖所示,interface屬性指明調(diào)用的服務(wù)地址信息。其中可以用loadbalance屬性設(shè)置為隨機(jī)random,輪循roundrobin,最少活躍leastactive調(diào)用,從而能夠用不同的算法獲取不同服務(wù)進(jìn)行計(jì)算,進(jìn)行負(fù)載均衡。比如,啟動(dòng)三個(gè)下載服務(wù)注冊(cè)到ZooKeeper中,然后設(shè)置loadbalance為輪循,則在并發(fā)過程中,將按照順序分別輪循調(diào)用三個(gè)服務(wù),從而減輕每個(gè)服務(wù)器的工作負(fù)載。
4測(cè)試分析
相比于直接將Web Service服務(wù)進(jìn)行高并發(fā)部署,當(dāng)前方案對(duì)業(yè)務(wù)的結(jié)合更加緊密,并且對(duì)不同的業(yè)務(wù)區(qū)別處理,適配性更高。測(cè)試將相同配置的服務(wù)器進(jìn)行部署,設(shè)置下載mds服務(wù)為五個(gè)服務(wù)并發(fā),其并發(fā)響應(yīng)如下對(duì)比所示:
當(dāng)并發(fā)量在個(gè)位數(shù)據(jù),其響應(yīng)速度差距不大,但是隨著并發(fā)量的提升,其普通的接口模式響應(yīng)速度變化迅速提升,而設(shè)置了5個(gè)下載服務(wù)的ZooKeeper方便響應(yīng)速度變化較慢。并且,在改造方案中,其擴(kuò)展性非常強(qiáng),很容易實(shí)現(xiàn)到更高的并發(fā)支撐。在改造過程中,可以實(shí)際根據(jù)需求自由的進(jìn)行調(diào)整,從而提高硬件資源的利用率。
5結(jié)束語
本文針對(duì)CAMDS協(xié)同業(yè)務(wù)的底層支撐并發(fā)性的問題進(jìn)行改造設(shè)計(jì),通過Dubbo將當(dāng)前的Web Service進(jìn)行改造,以Zoo-Keeper作為注冊(cè)中心,形成微服務(wù)模式的軟件架構(gòu),支持靈活擴(kuò)展服務(wù)數(shù)量,從而大幅度提升了CAMDS底層支撐的并發(fā)性和穩(wěn)定性。