APP下载

容器化的遥感信息服务平台技术研究与实验*

2022-11-15闫磊刘巍刘士彬段建波夏玮

中国科学院大学学报 2022年6期
关键词:服务平台容器集群

闫磊,刘巍,刘士彬,段建波,夏玮

(1 中国科学院空天信息创新研究院, 北京 100049; 2 中国科学院大学资源与环境学院, 北京 100094)

遥感技术是20世纪60年代发展起来的一种探测技术,是一种集地球表面观测信息和动态变化的信息技术[1]。截至2013年的统计显示,仅美国宇航局地球科学档案数据和信息系统就拥有大概7 000种不同种类的数据集,总量约7.5 PB,使用用户有大约150万[2]。截至2018年,中国遥感卫星地面站存有1986年以来的历史存档编目数据超过360余万景,在线存档标准产品数据超过25万景,数据规模超过230 TB[3]。随着传感器技术、时间分辨率、空间分辨率的不断提高,民用军用卫星以及小卫星的发展,遥感影像数据量呈现几何式的增长,对海量遥感数据存储管理和处理应用的需求越来越高[4]。对于海量的遥感数据其数据价值密度却是很低的,原始影像中所包含的信息具有一定的模糊不确定性,往往需要通过影像处理才能得到我们想要的信息。在如今以数据模型为驱动、大数据智能分析为特征的遥感大数据时代背景下[5],单一的影像数据服务已远远不能满足日常需求,更多地是希望在应用导向的集成通用处理方法基础上,通过定制化处理需求来满足专属信息挖掘和应用。

中国遥感卫星地面站拥有自己的影像数据仓库,为充分利用现有的数据资源,产生更多信息增值,本文在此基础上,调研大数据和云计算技术在遥感数据处理上的应用,针对传统系统平台在部署方式上存在的问题,提出采用容器化技术,构建集影像“查询获取—计算处理—结果展示”于一体的遥感数据信息服务平台,并通过具体的遥感数据处理应用对平台进行分析和验证。容器化的遥感信息服务平台通过将整个平台拆解成一个个容器服务,平台的各个模块拆分之后运行在容器中,彼此之间的技术不受限制,稳定性高,充分体现了软件设计中高内聚低耦合的思想。

1 相关工作

1.1 大数据与云计算技术在遥感领域的应用

近年来,随着大数据技术以及云计算技术在IT界的日趋成熟与完善,为遥感信息处理带来了新的技术手段。利用大数据和云计算的技术对遥感数据进行处理在科研以及商业中均得到很好的应用。

在科研中,部分学者通过在云平台的基础上,使用大数据分析技术,如MapReduce编程模型、Spark计算框架等处理大规模遥感影像数据,在效率上得到较大的提高[6-8];Sun等[9]提出针对遥感大数据处理Spark框架的一种优化框架,该框架先通过将遥感处理任务转化成有向无环图,而后采用一种经济高效的基于量子启发进化算法的元启发式调度算法来解决在有限资源下的最佳分布式处理,包括可分区任务的分区数以及执行所有任务的worker的分配,该框架在执行时间和加速方面均取得了可喜的成果,并且可扩展到大规模遥感数据集;Xu等[10]利用Hadoop分布式文件系统HDFS以及Hbase实现对遥感数据的存储和管理,将四叉树与Hibert curve结合提高遥感数据的查询检索速度,使用GeoSpark实现对大规模遥感数据的处理,构建了一个基于云环境下集遥感数据存储管理、查询检索以及处理于一体的遥感数据集群处理的框架ScienceEarth;金九平等[11]利用Kubernetes容器编排管理平台在保证系统具备高度可扩展性和灵活性的基础上,有效降低开发复杂度,设计和实现了对于海洋多源卫星数据从数据获取、预处理、产品自动生产、展示发布到应用服务于一体的海洋遥感数据产品生产和应用服务平台;韦二龙等[12]利用Docker容器技术提出基于微服务架构的遥感数据处理与共享平台设计方案,以满足对高可用、易扩展服务的需求;张丽等[13]以天空地一体化的空间科技为切入点,基于遥感、导航、GIS等天空地一体化技术手段,建设以海南遥感大数据云为代表的大数据基础设施和智能化共享服务平台,实现海南省典型行业的空间技术应用示范,满足面向新时期海南省社会经济发展中对空间信息产品的快捷、准确、个性化共享服务需求。

在商业中,传统的遥感数据处理系统软件供应商也都针对当前云计算的技术推出了云端的平台服务产品。ENVI推出了ENVI Service Engine,可以部署在云计算环境中以构建遥感图像处理系统云平台;ERDAS推出了ERDAS EPOLLO,与传统的数据管理系统相比,其管理和发布的数据量更大、速度更快;Google也对全球历史存档的长序列多源遥感数据进行整合,提供了一个在线可视化计算和分析处理的云平台Google Earth Engine(GEE),得到很广泛的使用。在国内,航天宏图在其自主开发的遥感数据处理系统软件的基础上推出了云端的数据处理平台服务PIE Engine,该平台封装了常用的遥感数据处理算法和数据集以供用户使用;阿里云联合四维、长光和Digital Global等一线数据源公司,基于阿里云核心数据库能力(Ganos)和达摩院AI能力构建的“一站式遥感数据获取和智能增值平台”——“数字星球引擎”,目前已进入上线测试阶段。

1.2 传统应用部署方式存在的问题

传统的应用平台大都建设部署在物理服务器或是虚拟机中。基于物理服务器的应用无法为应用程序定义资源边界,这会导致资源分配问题,造成资源不能得到充分利用,而且组织维护许多物理服务器的成本很高。虚拟机技术是将多个虚拟机运行在同一台物理主机上,每个虚拟机内运行自己的应用程序,虚拟机之间相互隔离互不干扰。虚拟机技术解决了传统应用程序直接运行在物理服务器上相互干扰的问题,同时也能充分利用物理服务器上的资源。

容器化技术是在虚拟机技术的基础上发展而来,相比于虚拟机在创建的时候会虚拟出独立的系统内核来说,容器共用主机的系统内核,从而节约了虚拟环境系统部署的资源,可以将更好的性能和更快的响应提供给应用。因而容器化技术具有占用资源小,比虚拟机开启更快、更方便的特点。此外,容器化技术可以提供除内核外完整的运行时环境,确保应用运行环境一致性;并且对于开发和运维,容器可以通过定制应用镜像来实现持续集成、持续交付以及部署[14];在应用迁移方面,由于确保执行环境的一致性以及容器所使用的分层存储和镜像技术都使得容器化技术在应用的迁移、维护和扩展方面比虚拟机更加容易、方便。

1.3 Docker容器化技术

Docker是一个开源的应用容器引擎,其核心是利用LXC(Linux container)技术让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后可以将容器镜像运行在任何操作系统的宿主机上,用更加节省的硬件资源给用户提供更多的计算资源,具有标准化、轻量级、易迁移和易扩展等显著特点。

基于Docker容器化技术,构建基于容器化的遥感数据信息服务平台,在很大程度上简化了平台的安装部署流程,并且增强了平台的可移植性、可靠性和弹性扩缩容。平台的各个模块拆分之后以服务的形式运行在容器中,然后通过服务编排和技术集成构建完整遥感信息服务应用,利用kubernetes(简称k8s)容器编排管理的技术特性,对平台中所用到的分布式计算引擎的资源调度做优化,以减少任务执行时间的损耗,同时k8s集群的高可用性特性也可以很好地满足对平台的高可用、易扩展、易管理的要求。

2 基于容器化的遥感信息服务平台技术架构设计

一个基于云计算的遥感影像处理平台主要包括基础云计算环境、数据存储管理模块、数据分析处理模块以及一个面向用户的用户服务模块4个主要部分[15]。本文构建的基于容器化的遥感信息服务平台是在私有云环境下搭建的,因而本文也是围绕这几个模块展开。

2.1 基础云计算环境

为方便容器化部署的各个软件程序之间的集中统一管理,在本文中采用的是在私有云下部署,k8s集群作为平台的基础环境。Kubernetes集群由master和node两类节点组成。客户端通过各种controller(控制器)创建各种资源对象,如pod、service等资源。Pod是k8s集群中的最小调度资源,里面运行着1个或多个容器(container)。在整个集群中,master节点负责集群环境内各种资源的监控与调度,node节点负责具体的资源实现与任务,集群的各个组件之间经由APIServer来交换信息,通过网络的方式进行通信,相互连结起作用。通过k8s,可以很方便地实现软件应用在云环境下的容器化部署和管理,同时,利用k8s集群的高可用性,通过创建一个或多个副本,来防止因为某一个功能模块的不可用而导致整个平台的功能无法使用,以此提高平台的高可用性。

2.2 影像数据集成

地面站数据管理部目前有着存储遥感影像数据的数据仓库,本文在已有的数据库基础之上,基于微服务的架构设计一套restful API以实现在该平台中对现有数据的查询获取。为避免客户端的需求与每个微服务暴露的细粒度的 API 不匹配的问题以及将来对API的扩充需求,采用API网关作为客户端与微服务之间的通信连接。API 网关负责请求路由、组合和协议转换。所有客户端请求首先要通过 API 网关,之后请求被路由到适当的服务。API网关再经过k8s的endpoints将restful API转成可以访问的SVC,形成一个完整的对接现有数据库进行查询以及获取数据等相关操作,其主要实现如图1所示。

图1 影像数据查询获取API接口设计

2.3 影像计算处理

Python在遥感影像数据的图像处理上有着很广泛的使用,因而在本平台中的计算引擎选择了Python生态圈中的Dask分布式计算引擎。在对遥感影像数据进行数据读取时,使用Xarray作为基本库对影像数据进行读取。Xarray是一种带有标签的用于读取多维矩阵的数据结构,而遥感数据本身就带有多维特征信息,在使用Xarray读取遥感数据时,通过Xarray数据结构的维度、坐标等信息可以与遥感影像数据中的波段、坐标等信息对应起来,从而可以很方便地对影像数据进行操作,同时通过设置chunksize的大小将遥感数据切分成多个chunk,实现分块读取。Dask-kubernetes是dask在k8s环境下的部署应用,通过在客户端调用dask-kubernetes的KubeCluster()方法,可以在k8s集群中动态创建一个包含一个scheduler以及多个dask-worker的dask集群,每一个dask-worker对应着k8s集群中的一个pod,dask-scheduler根据dask-worker当前状态以及任务需求调用满足要求的dask-worker进行多个任务的分布式并行计算,最后将结果聚合返回给客户端。图2是一个分块读取数据的流程图,说明dask的工作模式。

图2 Dask+Xarray对影像数据做分块读取

2.4 用户服务模式

传统的浏览下载的遥感信息服务模式存在被动性、同一性等缺点[16],因而在本平台中采用的用户服务模式是以web浏览器作为客户端,提供了支持用户在线编写程序代码对数据进行处理操作,以满足用户针对不同数据的不同处理需求。所采用的技术设计是开源项目Jupyter中的“jupyterhub——jupyter lab”的实现模式。使用Jupyterhub作为多用户服务的集中管理,进行用户账户数据的存储以及权限认证。用户通过认证后,jupyterhub的spawner产生单用户lab服务器,然后web浏览器客户端跳转到产生的lab服务器,进入用户的个人工作空间。不同用户有着属于自己特定的单一lab服务器,相互隔离,有效避免了不同用户之间的干扰。在k8s集群中,每个lab服务器都存在于一个pod中,为保证每次用户登录后,之前工作数据的一致性与完整性,利用k8s的pv与pvc技术实现lab服务器的数据持久化存储。用户根据k8s暴露的jupyterhub外部访问端口,在客户端浏览器访问hub认证登录界面,输入用户名密码进行认证后,直接访问自己的工作空间——lab服务器,通过调用数据存储管理的API接口查询获取数据,在代码编辑区编写图像处理程序代码,并提交任务到dask集群调用计算资源以实现特定功能,同时还可以将处理的结果在线返回到浏览器提供给用户。

2.5 平台的工作流

对于一个遥感数据信息处理平台,首先是要获取用户所需要的数据,然后根据用户的处理命令对目标数据做相应的处理,最后将处理结果通过在线地图的方式或是文件的形式返回给用户。在本平台中对于遥感数据从获取到处理再到结果返回的工作流如图3所示。

图3 容器化的遥感信息服务平台工作流

基于容器化的遥感信息服务平台,充分利用容器化微服务架构的设计理念,对平台中各个模块均以容器的方式部署在k8s的pod中,方便对各个模块的统一管理和更新修改;在平台的容错性方面,通过多个pod的副本机制以及重启机制使得容错性得到了很大的提升,不会因为1个pod死掉而导致整个平台的使用功能受到影响。同时,随着用户数量的不断增加,只需要对k8s集群增加其node节点数,扩充k8s集群资源,并不需要对平台本身的结构做更改便可以实现对平台的横向扩展,以满足更多用户的使用需求。此外,基于容器化的部署方式便于整个平台的开发和维护,平台的各个模块拆分之后运行在容器中,彼此之间的技术不受限制,稳定性高,具备很强的可伸缩性,而且可以平滑地将整个平台框架进行迁移,使得该平台在可用性以及迁移性上得到了很大的提高。本文所构建的平台其整体架构设计如图4所示。

图4 容器化的遥感信息服务平台整体架构设计

3 平台原型及实验

针对上述方法及架构设计,进行平台的构建实现,并使用LandSat8遥感数据针对常用的遥感数据指数NDVI计算以及机器学习算法Kmeans聚类分别进行了实验。

3.1 平台部署及工作流程

本文在实验室自有的私有云环境下搭建3节点的k8s集群(1个master节点,2个node节点)来构建平台的初步实验环境,其中master节点配置了8CPU、16 G内存,2个node 节点均配置了16CPU、64 G内存,通过“master-node”这种主从结构设计,对整个集群中的资源使用情况进行监控和调度。通过docker构建jupyter lab镜像,添加conda基础软件包环境及一些常用的地学包库,如rasterio、gdal、opencv、geopandas等,并将dask-kubernetes的worker配置文件dask-worker.yml写入镜像中,实现用户在客户端动态创建dask-worker,调用计算资源。使用Helm在k8s集群的node节点上部署jupyterhub以及dask-kubernetes,并在配置文件中指定使用的jupyter lab镜像。最后采用k8s的loadbalance服务暴露方式,经过Ingress/DNS域名解析,用户便可以通过IP的端口映射或域名在浏览器中打开jupyter lab服务。

3.2 实验验证

本文所采用的实验数据是LandSat8卫星遥感数据。

在NDVI指数计算的实验中,影像区域位置为天津渤海湾区域(path、row分别为122、033),时间跨度为2015—2018年共4 a,总计90景Landsat8 T1级别的卫星影像,每景影像的数据量大小约为1 G,实验中每次递增10景影像的数据量,分别在dask集群以及dask单机中做了对比实验。其中dask集群固定使用6个worker,每个worker的CPU为2,内存为4 G,dask单机的实验资源为12个CPU,内存24 G。两个实验环境的总的资源保持一致。其实验结果如图5(a)和5(b)所示。在Kmeans聚类实验中,选择2018年5月3号拍摄的该区域(天津渤海湾区域)LandSat8影像,影像大小为7 811×7 681,总计59 996 291个像素点,实验中dask-worker的数量从2个以每次增加2个dask-worker逐步增加到12个,每个worker的资源情况为2个CPU,7 G内存,Kmeans算法采用Kmeans II算法,该算法是在Kmeans++算法的基础上做了并行设计,以达到并行计算的效果,实验结果如图5(c)和5(d)所示。

图5 NDVI与Kmeans的计算结果及时间对比

3.3 实验结果分析

通过上述NDVI实验结果可以看出,随着数据量的增加,其计算处理时间也随着增加,增加幅度基本符合线性增长的趋势,并且在本平台的dask集群环境中处理效率要明显高于dask在单机环境下的处理效率,通过对比可发现,在分布式集群中平均处理10景影像数据大概为70~80 s,而在单机环境下平均处理10景影像数据大概为100~120 s,在处理速度上大约提升了30%,在效率上得到了显著提升。

在Kmeans分类实验中,在worker数量从2增加到8的区间内,随着worker数量的增加,计算时间有着显著的缩短,表明分布式的Kmeans II聚类算法在分布式集群环境下随着worker数量的增加,其运行效率有着明显提高。但是,随着worker数量继续增加,在10个worker的情况下,其运行时间逐渐趋于稳定,针对此情况,经过调研发现随着worker数量的增加,多个worker之间在处理过程中相互交换、聚合数据的时间损耗增加。在综合考虑dask集群中的通信与传输方式以及k8s集群中不同pod之间的通信方式后,利用k8s的pod软亲和性对dask-worker的部署做优化。K8s的pod软亲和性是将同一类型的pod尽可能地放在一起,在本平台中则对应地将同一个用户所创建的worker尽可能多地部署在同一个node节点上,以此来减少不同node节点间的worker之间的通信时间损耗。图6是利用k8s的pod亲和性对worker部署做优化后的Kmeans聚类处理与未做优化前的时间对比图。通过对比发现,通过pod软亲和性的设置,有效地减少了数据处理时间,表明该方法可以有效地降低dask集群中worker之间的通信所带来的时间损耗。

图6 不同worker位置下的Kmeans处理时间对比

本文所构建的遥感信息服务平台相比于传统的被动式服务,加入代码编辑区,从而实现通过代码编辑来满足用户的定制化数据处理需求。在提供服务方面,相比于单一的遥感数据服务或信息服务,通过API调用的方式实现对现有数据服务的接入,有效避免遥感数据服务与信息服务相互分离的问题构建集影像数据查询获取、计算处理与结果展示于一体的容器化遥感信息服务平台。在平台功能方面,相比于ScienceEarth的数据处理性能以及功能的完备性上,本平台仍然存在着较大差距,但基于容器化的部署方式,使得本平台在迁移性、伸缩性、开发维护上均有了很大程度的提高。

4 结束语

本文对当前遥感大数据时代下所采用的主流技术进行研究分析,通过搭建k8s集群构建容器化的遥感信息服务平台,将云计算与大数据处理技术结合应用到遥感影像数据处理,以应对大规模遥感影像数据的处理。这种基于容器化的部署方式充分体现了高内聚、低耦合的软件设计理念,使得该平台具有很高的可移植性,同时也在一定程度上降低整个平台的后期维护,结合k8s的高可用性的技术特性,在很大程度上提高了整个平台的容错性以及可扩展性。同时,将中国卫星遥感地面站目前现有的遥感数据仓库对接到该信息服务平台中,为该平台提供数据支持,让用户能够自主可控地通过平台来发现和调用其想要的数据产品,避免了数据来源与信息获取之间相互隔绝的问题,逐步开启中国遥感卫星地面站由单一的遥感数据服务向遥感信息服务转变的过程。

本文所构建的容器化遥感信息服务平台目前还处在初步实现阶段,未来还需要做进一步的完善。包括对基于web浏览器的用户服务模式进行改进设计,实现与用户工作步骤关联耦合在线地图的交互式显示和操作功能,将遥感影像处理中常用的一些处理方法和算法进行封装和可视化集成设计,让用户通过可视化操作即可实现方便的功能调用和工作空间内的集成,以提高该平台在提供遥感信息服务上的整体水平和质量。此外,在利用dask分布式集群来解决大规模遥感数据处理的过程中,对于用户在客户端调用的worker集群的分配策略以及scheduler对任务的调度还需做进一步的分析研究,以期为该平台找到更大的优化空间。

猜你喜欢

服务平台容器集群
密码服务平台
打造一体化汽车服务平台
Different Containers不同的容器
论基于云的电子政务服务平台构建
难以置信的事情
海上小型无人机集群的反制装备需求与应对之策研究
一种无人机集群发射回收装置的控制系统设计
基于云计算的民航公共信息服务平台
Python与Spark集群在收费数据分析中的应用
勤快又呆萌的集群机器人