陶小菘  王俊修  杨 珍

引  言

随着信息化和大数据技术的快速发展,数据的重要性不言而喻,我们通过对数据进行汇总和分析使得数据的价值得以体现。然而多数情况下,存在着数据多源性、类型多样性等特点,为使数据分析结果准确,就需要数据采集交换的完备性和及时性作为保证。因此,数据采集交换的稳定性和可靠性显得尤为重要。本文利用大数据技术解决警用装备管理中业务数据采集和交换过程中的可靠性问题,保障警用装备管理工作的顺利开展和平稳运行。

一、警用装备管理单点数据交换模式及问题

(一)当前警用装备管理数据交换的模式

近年来由于警用装备管理规模不断扩大,业务模式和需求不断升级,管理手段存在多样性等特点,因此公安部第一研究所结合一线实际管理需求开发了兼容各类管理模式的警用装备物联网系统以满足不同业务的需要,但系统存在着分布式部署以及不同业务场景下数据类型多样等特点,给警用装备信息数据的集中化管理带来了一定难度。

因此,我们基于现有系统架构模式开发了业务数据集中采集和交换服务系统,以单点部署的方式实现了所有管理信息的汇总和业务系统间数据的同步,服务框架如图1所示。

但是,由于采集数据的来源多样性,部分类型数据更新频率较快且需要同步的数据量庞大。因此,这对数据同步服务性能和稳定性提出了更高的要求,一旦出现服务器单点故障且故障解决不够及时,就会因数据同步延时影响业务系统对数据处理和分析结果的准确性和实时性。

(二)解决方案

针对上述问题,在架构设计上采用了分布式设计思想,总体架构如图2所示。

利用5台数据交换服务器作为集群替代之前单点式的设计架构,通过用户配置使每台服务器上的服务分别采集不同系统上的交换任务数据,形成5台服务器同时采集数据的并发模式,大大提高了数据的交换效率,同时减轻了单台交换服务器的负载压力。若分布式集群中出现单台故障,就临时由其它服务器进行接管继续提供交换服务,从而保障服务的可靠性。目前利用Zookeeper组件可以很好地实现上述功能。

ZooKeeper是一个开源的分布式协调服务组件,实现自动化集群管理、分布式协调、配置维护、域名服务等功能,保证分布式集群的一致性。可以记录服务节点的元数据和状态信息,建立针对某服务节点工作状态的事件监听,提供统一命名、分布式锁等基础服务。另外通过自有的ZAB协议来保证分布式应用之间存储数据的一致性。ZooKeeper采用了服务端/客户端架构设计,系统中ZooKeeper架构系统如图3所示。

客户端主动与服务端建立Session会话连接,通过心跳检测与服务端保持有效的会话,同时ZooKeeper支持发布/订阅模式客户端可以建立服务端的监听事件,对服务端的状态进行监听。另外客户端在建立会话连接后需要向ZooKeeper 的Recipes注册服务节点信息。这样ZooKeeper能够监控客户端与服务端的活动行为,在异常情况下对服务进行协调管理,保障无间断交换服务。ZooKeeper服务端内的各个节点相互进行通信,实时掌握各节点的工作状态,保证分布式服务的一致性。

ZooKeeper具有主从架构即存在主节点和从节点,主节点负责跟踪从节点的状态,并分配任务到从节点。对于主从节点的确定,ZooKeeper采用选举投票机制,选举原则是Quorum(过半机器数),即n/2+1,其中n代表集群中机器的数量。为保证交换服务的绝对稳定,综合考虑后本系统将使用5台机器作为集群。

Leader选举过程示例如图4所示。

在服务第一次启动时,ZooKeeper服务端的每台机器会自动发出一个投票,并推选自己作为Leader,每次投票包含的信息包括自己的myid和ZXID。在接收到来自其它服务器的投票后,针对每一个投票,服务器需要与接收到的其它投票进行比较,ZXID数值大优先作为Leader,在ZXID相同的情况下,继续比较myid的数值,数值较大的一方作为Leader,并将投票结果广播给其它服务器,进行下一次投票。当服务器统计已有过半机器接收到相同的投票结果,即该结果对应的服务器作为Leader。一旦确定Leader,每个服务器就会更新自己的状态:如果是Follower,就变更为FOLLOWING;如果是Leader,那么永久变更为LEADING。

综上所述,本文的核心是如何实现ZooKeeper的功能。下面对具体实现过程进行介绍。

二、ZooKeeper在本文中的实现

ZooKeeper在运行时主要关注三种状态:服务启动时、服务运行中、服务故障时。在服务器的不同状态下,它的任务和功能不尽相同,但主要都是通过调用API来实现。

(一)服务启动时

1. 建立各部署系统/交换服务之间的会话

在ZooKeeper服务建立时,客户端通过创建一个Session会话与服务端建立连接,客户端的同步任务从图3可知,本文中我们将各部署系统作为ZooKeeper客户端,而交换服务作为服务端。其中创建会话必需的三个参数如表1所示。

实现核心代码如图5所示。

2. 注册节点

在会话创建后下一步就需要向ZooKeeper注册节点信息。注册节点的目的是使ZooKeeper了解每个交换服务的基本信息和任务信息,以便某个交换服务发生异常情况时,通知其它交换服务进行接管操作。ZooKeeper的视图结构使用的数据节点方式称为ZNode,文件系统层级树状结构,用来存储交换服务各节点的地址信息以及数据交换任务的执行位置和状态。ZNode数据结构如图6所示。

从图4可以看到ZooKeeper的数据结构中的ZNode节点有4种:Leader、Follower、Task、Assign,分别指主节点、从节点、任务和任务的分派情况等信息,其中Task和Assign节点是在生成任务时才进行写入的。通过集中管理主从成员的任务执行情况,实现了分布式集群服务一致性的可靠保障。创建节点的方法如表2所示。

以注册从节点为例具体实现代码如图7所示。

3. 建立监听事件

在ZooKeeper中,Watcher机制实现了订阅发布模式的分布式通知功能,即ZooKeeper客户端向服务端进行通知订阅,服务端会根据客户端订阅的内容在更新时进行通知。本文中一旦服务端某个交换服务中断,在Session超时后,会向客户端发送Watcher事件,告知由哪个交换服务来进行接管。

当ZooKeeper服务端向客户端发送一个watchers事件通知时,客户端就会对相应的process方法进行回调,从而实现对事件的处理。process的定义如表3所示。

WatchedEvent 包含了每一个时间的三个基本属性:通知状态(keeperState),事件类型(eventType)和节点路径(path),如图8所示。ZooKeeper使用WatchEvent对象来封装服务端事件并传递给Watcher,从而方便回调方法process对服务端事件进行处理。

部署系统接收Watcher响应事件代码如图9所示。

(二)服务运行中

如果有新交换任务需要交换服务来进行同步,客户端调用数据更新API向ZooKeeper Recipes更新任务信息。这样作为Leader的交换服务,通过查询Recipes会调度指定的Follower来执行同步操作。

节点数据更新方法如表4所示。

节点数据更新方法如图10所示。

其中,mission代表每次数据交换任务的结构体信息。

(三)服务故障时

1. 超时重新进行选举

当Leader交换服务在Session超时时间内未能重新建立与客户端的连接,该Leader便失去了服务的控制权,其它的Follower交换服务将Session状态变为LOOKING,然后开始进入选举。选举过程与服务第一次启动时的选举过程一致。

2. 重新建立会话

当客户端与交换服务网络中断时,客户端会自动向其它节点进行重连,如果在有效时间重连成功,则继续由该节点提供交换服务;如果出现重连异常,会出现两种情况:CONNECTION_LOSS(连接断开)和 SESSION_EXPIRED(会话过期),如果连接断开则客户端会向其它节点进行重连,若所有节点都无法连接成功,则当前无可用交换服务;如果在有效时间之外重新连接成功虽然连接建立,但会话已失效,这时需要客户端重新实例化ZooKeeper对象并恢复临时数据。

三、系统运行监控及系统分布式与单点式对比

(一)系统运行监控

系统部署启动后,利用Zookeeper的相关命令可以了解各服务端的运行情况,包括数据的发送与接收、服务节点的身份情况(比如Leader或者Follower)、当前活动的节点数据量等信息。图11、图12分别是查看Leader服务器与Follower服务器的运行情况。

(二)本系统分布式架构与单点式架构对比

通过对比可以看到,分布式数据交换系统的最大优势就是服务的可靠性和稳定性得到很好保障;另外分布式数据交换方式使得集群中各服务按照不同分工并行进行数据采集和传输,较单点式系统大大降低了单个服务器的负载,使得数据交换服务的运行压力得以分担;最后分布式数据交换系统将集群中任务执行位置和状态等信息存储在Zookeeper各服务端,相互之间通过广播通信保证上述信息的同步,保证了即使当前服务器网络中断,上次任务的执行信息也不会丢失,这样在被服务器托管或者本服务器恢复后,仍然可以继续执行数据交换任务。

四、结  语

分布式的数据交换系统极大提高了数据交换的效率,减轻了负载压力。同时,利用ZooKeeper实现分布式集群之间的协调管理保障了服务的可靠性和稳定性,其优势显而易见。目前ZooKeeper技术已广泛应用在各类大数据开源系统中,用来解决诸如配置管理、分布式通知/协调、集群管理和主从选举等一系列分布式问题,保障系统的稳定运行。

在大数据技术逐渐渗透到警用装备管理的今天,通过对历史数据的有效分析进行灾难预判和环境感知的监控,可防止危险的发生,而这一切都需要数据资源的准确性、及时性、完备性作为保障。我们相信随着警用装备业务管理的不断丰富,采集和交换的数据量会不断增长,数据交换服务的稳定性和可靠性作为非常重要的业务要求将会持续受到管理部门的高度关注。

参考文献:

[1] 倪超. 从Paxos到ZooKeeper分布式一致性原理与实践. 电子工业出版社,2015.

[2] Flavio Junqueira Benjamin Reed著,谢超,周贵卿译. ZooKeeper 分布式过程协同技术详解. 机械工业出版社,2016.

[3] 李林锋. 分布式服务框架原理与实践. 电子工业出版社,2016.

声明:本文来自警察技术杂志,版权归作者所有。文章内容仅代表作者独立观点,不代表安全内参立场,转载目的在于传递更多信息。如有侵权,请联系 anquanneican@163.com。