基于 DUBBO + ZOOKEEPER地磅 計(jì)量服務(wù)平臺(tái)研究
基于 DUBBO + ZOOKEEPER地磅 計(jì)量服務(wù)平臺(tái)研究
基于 DUBBO + ZOOKEEPER 的地磅計(jì)量服務(wù)平臺(tái)是互聯(lián)網(wǎng)與傳統(tǒng)計(jì)量檢測服務(wù)業(yè)相結(jié)合的產(chǎn)物,平臺(tái)系統(tǒng)設(shè)計(jì)充分考慮了計(jì)量行業(yè)特點(diǎn),在此基礎(chǔ)上確定系統(tǒng)的建設(shè)目標(biāo),重點(diǎn)解決分布式系統(tǒng)集群中數(shù)據(jù)共享、數(shù)據(jù)一致性與服務(wù)水平擴(kuò)展等問題。系統(tǒng)遵循 JF1069 - 2012、JJF1033 - 2014、GB /T19022. 1、 ISO10012 - 1、ISO9000 和 ISO /IEC17025 等規(guī)范,使用 JAVA 語言和眾多開源框架,融入先進(jìn)的管理理念,對(duì)涉及涵蓋政府、計(jì)量技術(shù)機(jī)構(gòu)、企事業(yè)單位、高校各個(gè)部門計(jì)量行業(yè)的工作程序進(jìn)行全面的規(guī)范和整合,實(shí)現(xiàn)以服務(wù)為中心,對(duì)計(jì)量資源人、才、物( 標(biāo)準(zhǔn)、規(guī)范、檢測業(yè)務(wù)、器具證書) 等方面的科學(xué)管理,同時(shí)輔以決策支持和實(shí)時(shí)的智能化預(yù)警機(jī)制。構(gòu)建計(jì)量管理知識(shí)資源化、數(shù)字化具有十分重要的現(xiàn)實(shí)意義和應(yīng)用價(jià)值。
1.研究意義
基于 DUBBO + ZOOKEEPER 的地磅計(jì)量服務(wù)平臺(tái)是一個(gè)規(guī)模龐大、結(jié)構(gòu)復(fù)雜、信息量大的綜合在線計(jì)量支撐系統(tǒng),系統(tǒng)涵蓋計(jì)量監(jiān)管子系統(tǒng)、計(jì)量業(yè)務(wù)子系統(tǒng)、計(jì)量在線服務(wù)子系統(tǒng)、計(jì)量數(shù)據(jù)共享子系統(tǒng)。隨著業(yè)務(wù)的發(fā)展,應(yīng)用需求的不斷擴(kuò)充,如何有效的解決各子系統(tǒng)間共享數(shù)據(jù)一致性問題、各應(yīng)用服務(wù)間復(fù)雜度問題、各異構(gòu)子系統(tǒng)間數(shù)據(jù)共享問題以及分布式集群服務(wù)問題是本項(xiàng)目研究的重點(diǎn)和難點(diǎn)。
( 1) 共享數(shù)據(jù)的一致性各子系統(tǒng)間存在許多高度共享的數(shù)據(jù),包括用戶信息、企業(yè)信息、儀器信息,同時(shí)這些數(shù)據(jù)不可避免的在各系統(tǒng)間存在業(yè)務(wù)處理的出入口,從而導(dǎo)致各系統(tǒng)間的用戶數(shù)據(jù)、業(yè)務(wù)局部數(shù)據(jù)產(chǎn)生不一致性。 ( 2) 應(yīng)用服務(wù)復(fù)雜度計(jì)量服務(wù)平臺(tái)是一個(gè)涵蓋多個(gè)子系統(tǒng)的大型服務(wù)平臺(tái),隨著今后系統(tǒng)服務(wù)的增多,服務(wù)間的聯(lián)系會(huì)變得異常復(fù)雜,復(fù)雜度為: N 平方。
( 3) 異構(gòu)系統(tǒng)數(shù)據(jù)共享計(jì)量檢測公共服務(wù)平臺(tái)匯聚政府、企業(yè)、技術(shù)機(jī)構(gòu)和高校等眾多數(shù)據(jù)資源,如何實(shí)現(xiàn)異構(gòu)系統(tǒng)間的數(shù)據(jù)共享問題。
2.研究內(nèi)容
針對(duì)上訴問題,系統(tǒng)在設(shè)計(jì)之初采用 DUBBO + ZO-OKEEPER 面向服務(wù)的分布式體系架構(gòu)。Dubbo 是一項(xiàng)被國內(nèi)外高度認(rèn)可,同時(shí)被眾多國內(nèi)互聯(lián)網(wǎng)公司廣泛使用的開源分布式 SOA 服務(wù)框架,致力于提供高性能和透明化得RPC 遠(yuǎn)程服務(wù)調(diào)用方案以及 SOA 服務(wù)治理方案。其核心內(nèi)容包含遠(yuǎn)程通訊機(jī)制、集群容錯(cuò)機(jī)制、自動(dòng)發(fā)現(xiàn)機(jī)制、SPRING 配置機(jī)制。基于 DUBBO 的應(yīng)用服務(wù)實(shí)現(xiàn)了一系列的具體的業(yè)務(wù)功能封裝,研發(fā)基于計(jì)量業(yè)務(wù)的各種服務(wù),包括證書防偽驗(yàn)證、計(jì)量器具狀態(tài)追蹤、計(jì)量收費(fèi)標(biāo)準(zhǔn)查詢等,服務(wù)對(duì)象不需要關(guān)心底層業(yè)務(wù)處理細(xì)節(jié),只需要通過 REST 接口使用相應(yīng)的服務(wù)即可。軟件架構(gòu)如圖 1 所示:
Zookeeper 運(yùn)用高可用的分布式管理與協(xié)調(diào)服務(wù)框架,具有順序一致性、原子性、單一視圖、可靠性、實(shí)時(shí)性等特點(diǎn)。其采用 ZAB 算法( 原子消息廣播協(xié)議) 提供如命名、配置管理、同步控制、群組服務(wù)等一些公用服務(wù)。通過 Zookeeper 來實(shí)現(xiàn)數(shù)據(jù)共享、集群管理與 Leader 選舉等應(yīng)用,保證分布式系統(tǒng)環(huán)境中數(shù)據(jù)共享的一致性。
Dubbo + Zookeeper 是實(shí)現(xiàn)異構(gòu)系統(tǒng)間服務(wù)智能化集成和管理技術(shù),并解決如下問題。
( 1) zookeeper 實(shí)現(xiàn)了各系統(tǒng)間的數(shù)據(jù)同步,共享數(shù)據(jù)事務(wù)一致性問題。
( 2) zookeeper 能夠集成眾多異構(gòu)系統(tǒng)的應(yīng)用和數(shù)據(jù),實(shí)現(xiàn)多方資源的數(shù)據(jù)共享和智能對(duì)接。
( 3) Dubbo 可以使服務(wù)復(fù)雜度由 N 平方降低為 N,減少集成復(fù)雜性,增加業(yè)務(wù)靈活性,實(shí)現(xiàn)業(yè)務(wù)服務(wù)的水平擴(kuò)展。
( 4) Dubbo 能夠?qū)崿F(xiàn)服務(wù)注冊(cè)訪問機(jī)制,達(dá)到對(duì)服務(wù)的透明訪問,訪問者無需關(guān)心服務(wù)的提供者。
Dubbo + Zookeeper 應(yīng)用架構(gòu)如圖 2 所示:
Dubbo 與 zookeeper 應(yīng)用系統(tǒng)集成,其中服務(wù)提供者示例代碼如下:
< ? xml version = ″1. 0″ encoding = ″UTF - 8″? >
beans >
! - - 引入配置文件 - - >
context: property - placeholder location = ″classpath:
config. properties″ / >
< ! - - | 提供方應(yīng)用信息 - - > |
< dubbo: | application name = ″provider″ owner = ″ pro- |
grammer″ organization = ″dubbox″ / > | |
< ! - - | zookeeper 注冊(cè)中心服務(wù)地址 - - > |
< dubbo: | registry address = ″ zookeeper: / /192. 168. 1. 1: |
2181? backup =192. 168. 1. 2: 2181,192. 168. 1. 3: 2181″/ > | |
< ! - - | kryo 實(shí)現(xiàn)序列化 - - > |
< dubbo: | protocol name = ″dubbo″ serialization = ″kryo″ |
optimizer = ″tjjl. sys. serial. SerializationOptimizerImpl″ / >
< ! - - 掃描 dubbox 注解位置 - - >
dubbo: annotation package = ″tjjl. service″ / >
! - - 用 dubbo 協(xié)議在 8888 端口提供服務(wù) - -
>
< dubbo: protocol name = ″rest″ server = ″tomcat″
port = ″8888″ contextpath = ″provider″ accepts = ″500″ / >
< ! - - 具體的實(shí)現(xiàn) bean - - >
< bean id = ″ userService″ class = ″
tjjl. service. impl. UserServiceImpl″ / >
< ! - - 聲明需要暴露的服務(wù)接口,同時(shí)提供本地
dubbo 方法調(diào)用和 rest 方法調(diào)用 - - >
dubbo: service interface = ″ tjjl. service. UserService″ ref = ″userService″ protocol = ″rest,dubbo″ / >
/beans >
Dubbo 與 zookeeper 應(yīng)用系統(tǒng)集成,其中服務(wù)消費(fèi)者示例代碼如下:
< ? xml version = ″1. 0″ encoding = ″UTF - 8″? >
beans >
! - - 引入配置文件 - - >
context: property - placeholder location = ″classpath:
config. properties″ / >
< ! - - | 消費(fèi)方服務(wù)名稱 - - > | ||||||
< dubbo: application name = ″consumer″ owner = ″ | |||||||
programmer″ organization = ″dubbox″ / > | |||||||
< ! - - | zookeeper 注冊(cè)中心服務(wù)地址 - - > | ||||||
< | dubbo: | registry | address = ″ zookeeper: / / | ||||
192. | 168. | 1. | 1 | : | 2181? | backup | = 192. 168. 1. 2: 2181, |
192. | 168. | 1. | 3 | : 2181″ / > | |||
< ! - - | 生成遠(yuǎn)程服務(wù)接口配置 - - > | ||||||
< dubbo: | reference | interface | = ″ tjjl. service. UserService″ |
id = ″userService″ / >
< /beans >