基于 DUBBO + ZOOKEEPER地磅 计量服务平台研究
基于 DUBBO + ZOOKEEPER地磅 计量服务平台研究
基于 DUBBO + ZOOKEEPER 的地磅计量服务平台是互联网与传统计量检测服务业相结合的产物,平台系统设计充分考虑了计量行业特点,在此基础上确定系统的建设目标,重点解决分布式系统集群中数据共享、数据一致性与服务水平扩展等问题。系统遵循 JF1069 - 2012、JJF1033 - 2014、GB /T19022. 1、 ISO10012 - 1、ISO9000 和 ISO /IEC17025 等规范,使用 JAVA 语言和众多开源框架,融入先进的管理理念,对涉及涵盖政府、计量技术机构、企事业单位、高校各个部门计量行业的工作程序进行全面的规范和整合,实现以服务为中心,对计量资源人、才、物( 标准、规范、检测业务、器具证书) 等方面的科学管理,同时辅以决策支持和实时的智能化预警机制。构建计量管理知识资源化、数字化具有十分重要的现实意义和应用价值。
1.研究意义
基于 DUBBO + ZOOKEEPER 的地磅计量服务平台是一个规模庞大、结构复杂、信息量大的综合在线计量支撑系统,系统涵盖计量监管子系统、计量业务子系统、计量在线服务子系统、计量数据共享子系统。随着业务的发展,应用需求的不断扩充,如何有效的解决各子系统间共享数据一致性问题、各应用服务间复杂度问题、各异构子系统间数据共享问题以及分布式集群服务问题是本项目研究的重点和难点。
( 1) 共享数据的一致性各子系统间存在许多高度共享的数据,包括用户信息、企业信息、仪器信息,同时这些数据不可避免的在各系统间存在业务处理的出入口,从而导致各系统间的用户数据、业务局部数据产生不一致性。 ( 2) 应用服务复杂度计量服务平台是一个涵盖多个子系统的大型服务平台,随着今后系统服务的增多,服务间的联系会变得异常复杂,复杂度为: N 平方。
( 3) 异构系统数据共享计量检测公共服务平台汇聚政府、企业、技术机构和高校等众多数据资源,如何实现异构系统间的数据共享问题。
2.研究内容
针对上诉问题,系统在设计之初采用 DUBBO + ZO-OKEEPER 面向服务的分布式体系架构。Dubbo 是一项被国内外高度认可,同时被众多国内互联网公司广泛使用的开源分布式 SOA 服务框架,致力于提供高性能和透明化得RPC 远程服务调用方案以及 SOA 服务治理方案。其核心内容包含远程通讯机制、集群容错机制、自动发现机制、SPRING 配置机制。基于 DUBBO 的应用服务实现了一系列的具体的业务功能封装,研发基于计量业务的各种服务,包括证书防伪验证、计量器具状态追踪、计量收费标准查询等,服务对象不需要关心底层业务处理细节,只需要通过 REST 接口使用相应的服务即可。软件架构如图 1 所示:
Zookeeper 运用高可用的分布式管理与协调服务框架,具有顺序一致性、原子性、单一视图、可靠性、实时性等特点。其采用 ZAB 算法( 原子消息广播协议) 提供如命名、配置管理、同步控制、群组服务等一些公用服务。通过 Zookeeper 来实现数据共享、集群管理与 Leader 选举等应用,保证分布式系统环境中数据共享的一致性。
Dubbo + Zookeeper 是实现异构系统间服务智能化集成和管理技术,并解决如下问题。
( 1) zookeeper 实现了各系统间的数据同步,共享数据事务一致性问题。
( 2) zookeeper 能够集成众多异构系统的应用和数据,实现多方资源的数据共享和智能对接。
( 3) Dubbo 可以使服务复杂度由 N 平方降低为 N,减少集成复杂性,增加业务灵活性,实现业务服务的水平扩展。
( 4) Dubbo 能够实现服务注册访问机制,达到对服务的透明访问,访问者无需关心服务的提供者。
Dubbo + Zookeeper 应用架构如图 2 所示:
Dubbo 与 zookeeper 应用系统集成,其中服务提供者示例代码如下:
< ? xml version = ″1. 0″ encoding = ″UTF - 8″? >
beans >
! - - 引入配置文件 - - >
context: property - placeholder location = ″classpath:
config. properties″ / >
< ! - - | 提供方应用信息 - - > |
< dubbo: | application name = ″provider″ owner = ″ pro- |
grammer″ organization = ″dubbox″ / > | |
< ! - - | zookeeper 注册中心服务地址 - - > |
< dubbo: | registry address = ″ zookeeper: / /192. 168. 1. 1: |
2181? backup =192. 168. 1. 2: 2181,192. 168. 1. 3: 2181″/ > | |
< ! - - | kryo 实现序列化 - - > |
< dubbo: | protocol name = ″dubbo″ serialization = ″kryo″ |
optimizer = ″tjjl. sys. serial. SerializationOptimizerImpl″ / >
< ! - - 扫描 dubbox 注解位置 - - >
dubbo: annotation package = ″tjjl. service″ / >
! - - 用 dubbo 协议在 8888 端口提供服务 - -
>
< dubbo: protocol name = ″rest″ server = ″tomcat″
port = ″8888″ contextpath = ″provider″ accepts = ″500″ / >
< ! - - 具体的实现 bean - - >
< bean id = ″ userService″ class = ″
tjjl. service. impl. UserServiceImpl″ / >
< ! - - 声明需要暴露的服务接口,同时提供本地
dubbo 方法调用和 rest 方法调用 - - >
dubbo: service interface = ″ tjjl. service. UserService″ ref = ″userService″ protocol = ″rest,dubbo″ / >
/beans >
Dubbo 与 zookeeper 应用系统集成,其中服务消费者示例代码如下:
< ? xml version = ″1. 0″ encoding = ″UTF - 8″? >
beans >
! - - 引入配置文件 - - >
context: property - placeholder location = ″classpath:
config. properties″ / >
< ! - - | 消费方服务名称 - - > | ||||||
< dubbo: application name = ″consumer″ owner = ″ | |||||||
programmer″ organization = ″dubbox″ / > | |||||||
< ! - - | zookeeper 注册中心服务地址 - - > | ||||||
< | dubbo: | registry | address = ″ zookeeper: / / | ||||
192. | 168. | 1. | 1 | : | 2181? | backup | = 192. 168. 1. 2: 2181, |
192. | 168. | 1. | 3 | : 2181″ / > | |||
< ! - - | 生成远程服务接口配置 - - > | ||||||
< dubbo: | reference | interface | = ″ tjjl. service. UserService″ |
id = ″userService″ / >
< /beans >