吕啟尤,陆庭辉,吴毅良
(江门供电局,广东 江门 529000)
无论是直升机巡检还是无人机巡检,在巡检过程中都会产生大量的视频图像等数据,这些非结构化数据不能以二进制格式存储在关系数据库中,因为这样的读写效率和性能极为低下。最初较为普遍的做法是直接以原始视频图片形式存于服务器磁盘,保存在文件系统中,但是随着时间的推移,数据文件变得越来越多后(随着智能化设备接入和无人机行业的发展,正由TB级向PB级转变),查找和浏览某个文件将会逐渐变得效率越来越低,不利于历史问题的追溯和查看。当一个文件目录下保存了大量的文件数据后,打开这个目录通常都会耗费一定时间,更不要说在这些文件中查找到想要访问和读取的文件。因此,设计一种合理的存储方式便成为了一个亟待解决的问题。
无人机使用吊舱或云台来搭载照相机和摄像机,一般有可见光照相机、可见光摄像机、红外摄像机等几种类型的设备。
(1)巡检产生的数据一般是大文件的视频和小文件的图片,传统的文件系统存储方式不适合保存海量的这种历史数据,会造成磁盘的碎片过多,累计导致空间利用率不高以及访问效率低下等问题。
(2)巡检产生的视频和图像数据都依照国际标准格式设计,因此巡检数据的数据通用性较好,能够为后续的数据分析和访问提供相对统一的处理方式。
(3)巡检数据更新相对不频繁。巡检数据的更新在巡检任务完成后才发生,巡检部门会定期定制巡检计划,周期性的开展无人机巡检作业任务。每次巡检结束后,及时将任务设备的巡检数据导出,汇总整理巡检结果并提交。
巡检数据需要有完善合理的存储方式,能够方便的进行历史记录追溯查看和版本管理等操作。
作者简介:吕啟尤(1979-),男,广东鹤山人,硕士,中级工程师,主要研究方向:数据分析,大数据,云计算,物联网技术。
分布式文件系统是实现非结构化数据存储的主要技术。分布式存储技术与传统的集中式存储技术不同,并不是将数据存储在某个特定的节点上,而是通过网络使用网络中多台机器上的磁盘空间,并将这些分散的存储资源构成一个虚拟的存储设备。具有可扩展性、高可用性、高可靠性、高性能、数据一致性等特点。
根据无人机巡检产生的海量非结构化数据的特点,可以选择采用Ceph分布式存储技术来解决在当前大量视频图像存储上带来的问题。
Ceph是一个开源的分布式存储系统,最早是一个致力于开发下一代高性能分布式文件系统的项目。近些年,云存储技术发展迅速,Open Stack做为云计算平台支持几乎所有类型的云环境,而Ceph对Open Stack的完美适应,使其在云时代的背景下快速更新迭代,发展迅速。
Ceph可供成千用户访问PB乃至EB级的数据。Ceph节点以普通硬件和智能守护进程作为支撑点,Ceph存储集群组织大量节点,节点之间靠相互通讯来复制数据、并动态地重分布数据。
Ceph的数据存储过程如图1所示。
图1 Ceph数据的存储过程
图1说明了在Ceph中,文件数据是如何被存储到系统中。观察图1上面的那张图,待存储的视频或图片文件(File)会被切分成一个或多个对象(Objects),每个对象的大小可以由管理员设定,通常为2M或4M,每个对象都会有一个自己的唯一对象ID(oid),oid由文件FileID(ino)和分片编号(ono)组成。可以看到,对象的oid不仅仅是可以唯一标示每个不同的对象,并且存储了对象与文件的从属关系。由于ceph的所有数据都虚拟成了整齐划一的对象集合,读写效率会比较高。
被分隔成的对象也是文件系统中的一个具体文件,他们被存储在对象存储设备上(OSD),如图1的下面那张图所示。然而,每个对象是不会直接存储进对象存储设备中,而是映射到归置组(PG)中,归置组是一个逻辑概念,我们可以在Ceph系统中直接看到被分隔成的对象,但是不会直接看到归置组。Ceph客户端要存对象时,CRUSH将把各对象映射到某个归置组。把对象映射到归置组在OSD和客户端间创建了一个间接层。由于Ceph集群必须能增大或缩小、并动态地重均衡。如果让客户端“知道”哪个OSD有哪个对象,就会导致客户端和OSD紧耦合;相反,CRUSH算法把对象映射到归置组、然后再把各归置组映射到一或多个OSD,这一间接层可以让Ceph在OSD守护进程和底层设备上线时动态地重均衡。
Ceph的OSD是强一致性的分布式存储。它的读写流程如下:
图2 OSD读写流程
客户端把对象写入目标归置组的主OSD,然后这个主OSD再用它的CRUSH图副本找出用于放对象副本的第二、第三个OSD,并把数据复制到适当的归置组所对应的第二、第三OSD(要多少副本就有多少OSD),最终,确认数据成功存储后反馈给客户端。
基于上面描述的存储过程,Ceph提供了一个可无线伸缩的Ceph存储集群,集群中的OSD节点可以随时轻松的添加或移除,一个OSD节点可以是一台服务器的整块磁盘,也可以是磁盘的某部分目录结构。
Ceph存储集群包含两种类型的守护进程:Ceph监视器(Monitors)和CephOSD守护进程(OSDs)。Ceph监视器维护着集群运行图的主副本。一个监视器集群确保了当某个监视器失效时的高可用性。存储集群客户端向Ceph监视器索取集群运行图的最新副本;CephOSD守护进程检查自身状态、以及其它OSD的状态,并报告给监视器们。存储集群的客户端和各个CephOSD守护进程使用CRUSH算法高效地计算数据位置,而不是依赖于一个中心化的查询表,因此避免了因查询中心出问题时导致的整个系统寻址不可用。
综上所述,无论是监视器节点还是对象存储节点,在系统中都是以集群形式存在的,因此整个系统的可靠性非常高;每个节点都可以非常方便的增加和移除,使得系统灵活性非常高;每个数据文件都会以对象以及对象副本形式存储在多个对象存储节点中,使得数据的安全性和系统的可用性高;取消了其他分布式系统中的中心查询节点,存储集群客户端直接和各个OSD守护进程通信,通过CRUSH算法获取数据位置,查找数据的效率更高。
常规的文件系统存储输电线路中的巡检数据方式,随着视频图像数据的累积会变得越来越不可用。基于这种需求场景,结合当前云存储技术的发展趋势,分析当前流行的Ceph开源分布式存储技术,从文件类型、文件大小和数量、系统稳定性、可扩展性、数据容灾性等多方面进行考虑和研究,从Ceph存储集群的存储过程、后台进程管理方式等方面进行阐述,最终定义了适用于输电线路巡检数据存储的应用模式,也对今后电力系统中类似海量非结构化数据的存储方案选择具有较高的参考价值。