黄炜
(中国自然资源航空物探遥感中心,北京 100038)
我国的卫星遥感技术经过40多年的发展,取得了一系列成绩,成功研制了一系列传感器,发射了50多颗对地观测卫星,组成了风云、海洋、资源和环境减灾四大民用系列对地观测卫星体系;自主研制和发展了一批核心传感器,掌握了一批核心遥感技术,形成了系列化产品。如资源三号卫星3年积累的影像数据覆盖了我国930×104km2的地球表面,接近6×107km2的全球区域,原始数据量超过800 TB[1]。卫星遥感业务逐步建成,队伍不断壮大,航空遥感系统平台不断改进,技术稳步提高,航空遥感系统日趋完善。遥感卫星地面设施布局不断优化,效能比不断提高。国产化地球空间信息系统软件发展迅速,诞生一批空间信息企业,并研制成功大量软件产品。一支多学科交叉的研究队伍和160多家教育科研院所设置“3S”相关专业被组建。同时,适应于产业发展需要的地理空间信息管理制度、标准规范开始建立。应用领域不断扩展,应用效益与效率显著提高。
进入21世纪的第2个10年,我国的遥感卫星进入了快速发展的阶段,由实验型向应用型发展,由单星向多星发展,从零散应用到整装发展;建成了资源卫星系统、环境与减灾卫星星座、气象卫星系统和海洋卫星系统;初步形成了中国对地观测卫星体系,尤其是高分辨率对地观测系统重大专项的实施,使我国卫星对地观测进入亚米级时代。
这些“天眼”神探全天时、全天候不间断地向地面传送高分辨率、宽覆盖、多波段的卫星数据[2],涵盖不同空间分辨率、不同覆盖宽度、不同谱段、不同重访周期的遥感数据体系,全面应用于国民经济社会管理各领域。同时,卫星数据量爆发式增长。相关卫星中心每日要处理的数据增量均已经达到TB级,数据总量已经达到了PB级,并且还在不断快速地增长中[3]。
目前国内外业界普遍采用跨平台的NFS[4-6]协议的存储系统储存卫星数据,主流的卫星平台处理软件默认兼容NFS协议。昆腾的StorNext File System(缩写为SNFS)[7]兼容NFS协议,性能较NFS存储系统有着极大的提高,被美国国家航空航天局采用,作为其日益庞大的卫星数据存储系统。但是随着卫星数据的迅速增长,NFS存储系统以及SNFS因为元数据管理的瓶颈,不能支持超大规模数据,实时在线扩容支持很弱,不支持多种应用协议接口,并且逐渐不能满足超高并发下的读写性能。
卫星大数据对存储应用的需求集中表现在:高分辨率带来的爆炸性增长的超大存储容量和高性能需求,容量不断增长带来的频繁在线扩容需求,频繁小文件访问的优化需求,数据多样性带来的数据分布模式多样性需求,多样性应用引发的多种数据协议支持的需求以及多用户下细粒度的权限需求。
高分辨率引起文件大小和文件总量的巨幅增加,直接带动了对超大容量存储和高带宽的读写需求,高并发、极度繁重的作业量使得在线扩容成为必须。描述附加属性的小文件的大量存在要求系统不仅要满足高并发高带宽的大文件读写,也要对小文件的存储和读写进行优化。不同的应用造就了数据不同的优先级,有的数据是临时文件或可再生成,可靠性要求低,有的数据要求高可靠性,这就需要系统提供不同的数据分布模式满足不同可靠存储需求。同样地,不同的应用对数据的接口也存在多样性,需要系统提供文件接口、块接口和对象接口。数据的多样性同样要求系统提供多种细粒度权限机制保护数据安全。
基于以上需求,本文从卫星数据处理中实际的访问特点和应用模式出发,有针对性地实现了一个分布式存储系统,实现超高并发读写性能以及读写带宽线性扩展,面向多种不同应用协同工作,提供更加多样化的存储协议和权限支持,实现了带宽和吞吐率的极大提升,有效提高了卫星处理的实际工作效率,降低了服务器成本。
本文设计的分布式存储系统,提供统一镜像,整合多种存储设备,构建统一存储空间,实现存储硬件资源管理和调度、故障检测及自动修复,同时对卫星接收、生产、归档及其他应用系统提供共享、并发、高效、安全、可靠、多协议的存储接口。
1)节点设计。如图1所示,整个系统分为元数据节点、数据节点、管理节点和应用节点(客户端)。应用节点访问元数据节点和数据节点,以获取文件信息和读写文件。
图1 分布式存储系统节点
元数据节点存储文件数据属性、用户配额等文件描述信息,即元数据,实现文件、目录、索引、权限等元数据信息管理,实现文件快速检索。
数据节点存放文件数据,负责文件分段、分节点写入、并行读取、数据校验等数据实体管理,实现文件高速读写。
管理节点提供给管理员用以配置管理整个系统。用户通过管理节点增加删除元数据节点和数据节点,配置用户权限、配额等其他系统参数设置。
元数据节点采用集群方式,最大可扩展128台。文件采用大数据块存储,根据副本的不同模式,大数据块大小从32 MB、64 MB到256 MB不等,相对于传统文件系统4 KB文件块,极大减少了元数据的数量,并且将部分数据管理功能下放给数据节点,进一步降低元数据节点压力,极大扩展了对文件和目录数量的支持,系统最大可支撑单卷千亿级文件的快速检索需求。数据节点同样采用集群方式,最大可扩展10 000台,通过高速网络和元数据节点紧密配合,实现系统最大容量达到EB级。
集群化的元数据和数据节点以及后文介绍的自动负载均衡使得存储系统能以最小规模起步(单节点,既是元数据节点,同时兼任数据节点和管理节点),在线扩容和缩小规模,同时支持在线更换服务器,不仅满足了卫星数据平台必需的超大规模的文件数量和容量要求,而且能根据业务在容量和性能的需求在线扩容。
2)接口设计。存储接口根据目标用途分为面向管理的接口和面向数据的接口。管理接口主要提供给用户用以管理和计量的功能,方便卫星平台软件统计数据容量,分配配额以及权限管理。而数据接口则通过协议转换的方式,提供块(iSCSI[8-9])、文件以及对象(S3[10])等丰富的接口给外部应用,支持卫星平台软件多种应用场景下的各种功能支持。本文基于POSIX接口,不仅提供专用、高速、安全的分布式文件访问协议、分布式块访问协议以及对象访问协议,并且可同时提供标准的CIFS[11]、NFS、ISCSI、HTTP、FTP等传统协议访问数据,从而满足卫星遥感数据管理中多种应用类型的需求。
3)网络协议。本文通过一种自定义的网络通信协议,实现异构存储设备之间的互操作,同时也对第三方存储设备特有的访问接口提供支持以充分发挥其高级特性,实现更高的效率和灵活性。
自定义的网络协议虽然提升了系统复杂度,但是精巧的设计提高了每次通信的收益,降低了冗余的通信次数,从而提高了系统的吞吐率。
4)一致性。客户端采用会话一致性,客户端打开关闭文件时,检查数据有效性以及同步脏数据,并且周期性(30 s)访问元数据节点更新文件属性。
数据节点的副本一致性是弱化的副本一致性要求,主副本异步复制到从副本,从而在可用性和一致性中寻得平衡。
1)数据读写流程。数据读写流程见图2。在写入数据时,客户端首先在内存中切片,把数据直接发送到不同的数据节点上,形成一对多的访问形式。相比服务端切片,这种方式分散了对高速网络的压力,避免了NAS[12]头多对一的访问瓶颈,极大提高了聚合写带宽,有效提升集群写效率。在读取数据时,客户端首先根据元数据信息,直接从所有相关的存储上获取所需数据,然后在内存中组装成完整数据,提升了整体性能,避免服务端组装数据产生的性能瓶颈。
图2 存储系统读写数据并发处理流程
管理节点对多个数据节点统一管理,向前端客户端提供一个大的存储资源共享池进行数据访问,并控制、调配每台数据节点及硬盘。在应用系统读写过程中,客户端基于网络文件共享协议协调工作,在具体数据读写过程中,通过元数据协调多个数据节点并发响应,提升读写访问性能。
2)权限。系统提供多种权限机制,方便管理员根据工作需求和任务级别安排不同用户访问对应权限的数据。同时,系统实现了对用户访问权限的绝对控制,使得非法用户即使获取到操作系统的所有权限,也无法逾越存储系统的自带私有权限,加强了数据的安全性。
系统内置读、写、删除、重命名、链接、列出(list)和追加写(append)7种细粒度权限模式,基于用户和目录进行设置,用户对任意目录做细粒度的权限拆分。所有用户的数据创建、删除和重命名操作均被记录,并可以随时查询。
当客户端访问文件时,首先访问元数据节点获取文件权限信息,客户端首先校验操作系统权限模型,然后进行系统私有权限校验。为了降低元数据节点的压力,客户端会缓存该权限信息,并周期性(5 s)地查询获取。
3)负载均衡自动探测机制。本文设计了一种负载均衡自动探测机制,对存储系统中所有数据节点的容量进行均衡分配,确保数据优先写入负载较轻磁盘,并且可以动态地对现有数据进行迁移,使数据在集群内部均衡分布,提升空间利用率。迁移过程完全自动进行,无须人工参与,可根据业务需求,在线开启与停止,同时可根据业务压力负载情况,自动暂停,优先特定业务访问请求。
1)分布式元数据多副本模式。系统的元数据存储在不同的元数据节点上,构成一个元数据集群,管理数据节点并向应用客户端提供高速服务。元数据集群节点对外提供高并发读取服务,支持海量文件的大量并行查询,和客户端机器的海量并发查询请求。元数据在集群中的分布模式如图3所示。
图3 元数据多副本分布存储模式
为防止单节点故障,元数据节点两两配对,互相备份对方的元数据和服务,实时同步元数据更新,这样任何一个元数据节点损毁或宕机,另一个元数据节点都将自动接管其服务,不会中断前端应用服务。
2)数据高可靠设计。存储管理单元对所有节点的硬盘设备进行实时控制,通过硬盘探测机制,可以监控到硬盘的使用状态以及数据读写延迟大小,一旦出现硬盘坏道或访问不稳定的情况,自动迁移此磁盘上的所有数据到其他正常磁盘上。管理单元同时提供了禁止写入数据、禁止恢复数据等设置,方便系统化的维护,并且可以根据现有节点状况实现在线更换所有老旧设备,提升节点可靠性,增强整套存储系统的可维护性。
分段校验模式是将文件分段存储在数据节点集群中,其中每一个文件都会被切片为N个均等的数据段,并且由N个数据段生成一个校验数据段,与数据段大小一致,并把这N+1个数据段分别存放在N+1台不同的数据节点上。文件A的segment1、segment2、校验数据分别存放在3个数据节点的硬盘上,当存放segment1数据的硬盘或数据节点整体失效时,根据segment2与校验数据继续对数据进行读写,同时存储管理单元将自动对损失的数据进行恢复,由segment2数据与校验数据生成损失的数据,存放到正常的数据节点上,形成完整的冗余。数据分段存储校验及自动恢复模式如图4所示。
图4 分段校验模式
不同的应用对数据的可靠性有不同的需求。存储池中不同目录可以灵活设置不同的校验数,一般设置2+1校验模式与4+1校验模式。
为了能及时恢复失效数据,不影响数据的可靠性和一致性,本文设计了一套自动故障探测机制,多对多数据自动恢复模式,一旦探测到故障就自动启动数据恢复流程。为了实现无人工干预的自动恢复,恢复过程中无须加入新的硬件。在客户端节点往数据节点中写入数据时,所有的数据段与校验数据段同时写入;当有数据正在写入的磁盘或数据节点发生故障时,元数据节点会在正常的数据节点或磁盘中为此数据对象分配新的空间,并继续进行数据写入,而之前在失效磁盘上写入的数据,则会通过其他数据段恢复到相应的磁盘和数据节点上。
一个磁盘上的数据段对应的冗余数据是平均分布在其他所有的数据节点上的,损失的数据也将平均恢复到整个数据节点集群中。数据恢复过程由所有状态完好的数据节点并发进行,是一个多对多的数据恢复模式。由于数据恢复过程中所有数据节点都共同参与,所以数据节点集群的规模越大,参与恢复的数据节点数量就越多,恢复速度也就越快。
根据以上提出的设计方案,整个系统包括4部分:功能模块、应用接口、管理接口、公共模块。功能模块是整个分布式存储系统的核心,负责处理存储系统中数据分布、集群处理、负载均衡、一致性协议等核心功能。应用接口负责以文件接口、块接口、对象接口呈现给上层应用。管理接口负责全局节点的部署、删除等配置。公共模块处理共用的网络框架、内存池、任务队列、全局锁、压缩解压缩、纠删码。
1)缓存和预取。客户端访问数据时,首先访问元数据节点获取文件对应的位置信息,然后根据位置访问对应的数据节点获取文件数据。为了减少访问开销,客户端采用缓存(cache)和预取(prefetch),根据应用特定的访问模式,文件的位置信息被客户端缓存起来,并且根据访问顺序把接下来的位置信息预先读取,这样客户端再次寻址时,首先查询本地缓存,只有缓存不命中或缓存过期,才会真正访问元数据节点,这样就会大大降低对元数据节点的访问压力。
客户端不仅对于元数据进行缓存和预取,而且对连续访问的数据更是如此。高分辨率卫星决定了其数据的大文件存储,决定了其读取是大块连续的方式。客户端在处理当前读取的数据时,同时发送预取指令请求接下来的数据。数据节点也根据客户端的顺序访问模式以及卫星数据的访问特点预先读取以后位置的连续块。这样客户端和数据节点的同时预取大大降低了上层应用软件的访问延迟,平滑了数据节点的访问波峰。
2)纠删码。系统为了提供高可靠性,引入副本模式,在多个机架或服务器存储多个副本。但是额外的副本会大大浪费宝贵的磁盘空间,为了降低存储成本,本文设计了纠删码。支持的纠删码级别有:N+1、N+2、N+3和N+4,N值可设置为2、4、8、16,对于N+M数据类型,N代表节点或硬盘的数量,M代表在不发生数据丢失的前提下,系统所允许同时发生故障的节点数或磁盘数。例如8+4模式下,只需要额外50%的空间,就可以提供多达4个数据节点或出现故障磁盘数。纠删码编码时会带来额外的计算压力,本文采用SSE族指令集,调用CPU的协处理器进行物理计算,极大地解放了CPU,并且逐行代码分析调试,去除诸如memset等占用内存带宽的函数。
3)小文件优化。卫星数据文件不仅有连续存放的大文件,更有庞大的小文件。数据节点把小文件聚合成一块存储,不仅减轻了小文件存储负载,而且能加速小文件恢复重建。
小文件的读写使用额外的专用缓存,根据应用具体的访问模式,针对性地修改缓存算法的参数,以获取更高的缓存命中率。
针对小文件通信访问的频率高、数据量小的特点,系统的通信模块优化成由若干可调的线程集中处理通信,大大降低了系统上下文切换次数,降低CPU压力,提升系统IOPS,降低延时。
本实验采用8台数据节点,2台元数据节点,总存储容量400 TB,分别进行存储扩展、性能及安全测试,测试数据是4 TB的高分一号卫星影像数据。数据节点配置为2路4核CPU、64 GB内存、48 TB硬盘、双口万兆网卡。
对存储平台进行节点宕机、磁盘故障和数据恢复测试,以测试存储可靠性。详细测试内容及结论见表1。
表1 存储可靠性测试
对存储平台进行在线添加数据节点、在线删除和负载均衡测试,以测试存储可扩展性。详细测试内容及结论见表2。
表2 存储可扩展性测试
测试存储系统在不同节点数配置时的读写性能表现,测试总数据量为4 TB。随着节点数的增多,存储系统的读写性能也相应地线性增长,并且能比较稳定地保持线性关系。3个数据节点时的写性能为5.78 GB/s,读性能为3.5 GB/s;4个数据节点时的写性能为6.36 GB/s,读性能为4.56 GB/s;5个数据节点时的写性能为7.3 GB/s,读性能为5.61 GB/s;8个数据节点时的写性能为11.5 GB/s,读性能为9 GB/s。测试结果如图5所示。
图5 不同节点配置读写速度
以上测试结果表明,系统在数据节点宕机、磁盘出现故障后能够自动进行数据恢复,在线添加和删除设备后,能够自动检测并且正常读写数据。原有卫星影像存储系统聚合读写性能是5 GB/s,本文的分布式存储系统实际测试聚合读写性能超过10 GB/s,提升了1倍。业务生产中实现每轨数据SC处理流程写性能在10 min以内,读性能在20 min以内(如前端应用改进,可更快),极大地提高卫星影像大数据生产效率。
本文针对卫星数据访问模式和具体需求设计了一个分布式存储系统。元数据节点和数据节点采用集群方式,数据分布采用多副本和纠删码多种方式,并根据数据实际的访问特点进行了小文件聚合、小文件通信模块优化、大数据块存储、数据分片、客户端和数据节点的缓存预取等多种性能优化,提供了卓越的可扩展性和访问带宽、多种访问接口和7种细粒度权限的支持,满足了应用多样性的需求和用户权限的需求,最后开展了真实的卫星影像数据产品生产实验。实验表明,分布式存储系统在保证高可靠性的同时大大提高了数据读取性能。后续工作是进一步精细化分析卫星数据访问模式在数据分布、负载均衡、故障恢复、读写性能方面的优化。