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