笔者亲身经历了BstarCenter网络视频监控平台初期的传统编码方式,体会过开发效率低、无法适应客户需求变更的痛苦;也享受了针对困难进行变革,转变思路,优化开发模式,整合开发资源的历练。回头总结的同时,撰写此文,意在总结蓝色星际BstarCenter网络视频监控平台软件在发展过程中的经验,同时从安防监控平台中间件开发的角度解析视频监控平台的特点。
中间件+分布式架构的技术实现是当今软件技术的主流方向。介于操作系统底层硬件和应用程序之前的中间件层可以最大程度地简化开发过程,提高开发效率,是软件市场细分、分工合作的必然结果。中间件技术的兴起,使得以业务为导向,快速构建软件应用平台成为可能。
从技术角度分析,安防监控平台发展的战略重点是将技术平台和产品平台分离,从而降低软件开发人员的流失风险和开发成本,优化资源配置。从通俗意义上讲,技术平台就是安防监控平台的基础部件,产品平台是在技术平台上搭建的行业应用。
用户需求的迅速响应,应用方案的快捷定位等等这些产品平台层面涉及的问题,除考验着安防厂商对行业的理解以及公司内部各部门间的运作模式外,在很大程度上取决于技术部门搭建技术平台的高度和灵活度。
同时,安防是一个立体性很强的行业,其中涉及了视频、语音、网络、存储等等多方面的技术,每一个技术环节在任何一个行业应用中都可能被深度挖掘或放大,这些是对安防厂商技术平台层面最大的考验。鉴于上述问题,综合开发成本的考虑和大型软件工程开发模式,安防监控平台中间件技术的引入迫在眉睫。
BstarCenter网络视频监控平台在开发过程中,充分认识到了上述可能遇到的问题,针对安防监控平台应用,对系统作以下分析同时保证在现有系统中实现。[nextpage]
分布式面向对象的系统结构特点
针对安防监控软件的发展特点,分布式和面向对象两大特点可以大幅提高方案灵活性、扩展性;降低开发过程消耗的时间、难度;同时,降低不必要的复杂性,使平台更易于学习和使用,降低开发成本。
分布各个对象间采用RPC的调用方式
由于中间件需要屏蔽分布环境中异步的操作系统和网络协议,必须能够提供一种分布环境下的通讯服务。RPC(远程过程调用协议)是一种广泛使用的分布式应用程序处理方法,实现人员在进行对象间通讯以完成某些功能时,就像调用本地实现的方法一样,通过RPC的方式调用目标模块的接口,目标接口通过返回值或抛出异常的方式反馈执行结果。BstarCenter使用的RPC调用方法底层支持TCP和UDP协议,保证实施的灵活性。除了支持普通同步调用的方式外,还支持异步调用(AMI)、异步分发(AMD)以及广播服务的功能,使平台的命令控制、报警转发、新功能发布等拥有灵活的应用空间。
抽象出文件读取模块、数据库访问模块、视频转发模块、认证模块、资源访问模块、设备控制模块等。
针对安防监控平台的应用,架构设计已经被多次讨论,很多同行已经对其进行过分析,并形成了比较成熟的方案。各个主流厂商虽有细微差别,但基本都具备以上几大模块,笔者在此就不做详述(具体如图1所示)。
模块划分结构图
[nextpage]
1.提供在网络带宽、内存使用和CPU开销方面都很高效地实现和应用
BstarCenter在网络底层、内存使用和CPU开销方面进行深层次的优化,因为随着系统性能的提高和负载的增大,以上三个环节将是限制安防监控平台性能的主要因素。同时,在带宽占用、内存及CPU的使用上,提供接口可以实时地进行跟踪输出,以便于调试和问题定位。
2.针对分布式特点提供灵活的防火墙解决方案
BstarCenter使用的通讯协议支持双向连接的建立方式,配合前端设备的支持,可以保证客户端与服务器或设备与服务器对防火墙的穿透方案。与此同时,BstarCenter对端口的使用可以支持动态、静态、区间范围分配三种方式,做到灵活配合客户网络环境防火墙设置。
3.提供一种内建安全性的实现,以适应不安全的网络环境
随着行业客户要求的提高,重点保密行业对安防涉足和以公网为媒介的监控要求,数据安全性已经成为安防监控平台下个阶段的重要环节。BstarCenter提供了针对SSL协议的支持。
4.系统实现与平台无关
由于客户要求的多样化,以及第三方设备厂商技术能力的差异性,跨平台的系统对其进行有效的保证。多平台的支持可以在以下几个方面获得较高收益:SDK接入便捷性、WEB形式应用软件的迅速发布、针对不同行业方案实施的保证、针对客户特殊要求而进行的平台整合等。
5.提供升级服务模块
针对安防行业用户需求变化快、设备更新快的特点,提供升级模块功能,保证升级包的检测和自动化执行。
为了保证BstarCenter网络视频监控平台技术的先进性,及时更新使用最新的底层技术(比如select模型到epoll/IOCP模型的转变),我们也选择性地使用了第三方底层架构中间件,并根据监控行业的特点进行定制和删减。在其上层完善出BstarCenter监控平台中间件基础模块。