基于天擎的容器应用
2023-03-14钟艳雯夏正龙朱亮吕冠儒朱宏武
钟艳雯,夏正龙,朱亮,吕冠儒,朱宏武
(湖南省气象信息中心,长沙 410118)
0 引言
随着气象业务的飞速发展,对气象系统的信息化、集约化、扁平化的要求越来越高,Docker容器凭借轻量级、启动快、资源占用少的优点[1],在气象领域中得到了广泛的应用。近年来多省气象部门开展了Docker技术在业务中的研究与应用,利用相关技术搭建气象云平台服务、部署相关算法等[2-4]。2021年湖南省气象大数据云平台,即“天擎·湖南”(以下简称天擎)正式上线,提供数算一体的平台化服务,实现了数据管理、加工处理、应用服务的高度集约。2022年天擎新增了镜像资源管理与容器资源管理功能,允许用户在天擎环境中制作镜像,并在加工处理算法的容器云计算框架中加载运行。本文拟对基于天擎的容器应用进行研究,将Docker体积小、部署快等优点与天擎环境结合,在充分保证运行环境独立的同时,减少环境部署时间,降低系统资源消耗。
1 相关技术
1.1 Docker技术
Docker是dotCloud公司于2013年发布的轻量级容器引擎,得益于开源、高效和标准化实现,Docker已成为容器云平台的事实标准[5]。Docker机制包括镜像(image)、容器(container)和仓库(repository)。Docker镜像类似于虚拟机镜像,为只读模板,包含了文件系统。容器是从镜像创建的运行实例,容器间相互隔离,独立运行。镜像是创建容器的基础,仓库是Docker集中存放镜像文件的场所。Docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,对硬件的需求远低于传统虚拟机。从资源占用上来说,更加轻量级;从应用上来说虚拟移植性更强,灵活性更高[6-9]。
1.2 天擎容器云
天擎提供镜像资源管理与容器资源管理功能,制作并管理Docker镜像和容器;在算法管理中提供容器云计算框架,将用户镜像加载后供加工流水线调度运行。天擎提供两类基础镜像:一类为操作系统基础镜像,只包含操作系统及常用的基础软件;另一类为语言包基础镜像,除操作系统外,包含基础的语言环境(如Java、Python、C++等)。算法基于容器有两种运行模式:①算法在容器外的宿主机上,运行时通过映射的方式在容器内运行;②算法装载到容器内,直接在容器内运行。模式①的优点是方便算法的调试,算法修改后无需重新打包镜像,缺点是不利于算法的管理,且需提供额外的存储空间。模式②可以实现对算法及资源的严格管理,但当算法更改时,需要重新打包镜像。天擎在算法开发测试阶段允许使用模式①,便于进行算法的调试。当算法完成测试后,在业务环境中需要将算法装载至容器内,以模式②运行。
2 容器应用
2.1 前期准备
首先需要申请天擎业务账户,激活数据存储、算法集成与运行权限;其次在资源申请页面中申请存储资源、算力资源、数据访问;最后按照天擎标准对算法输入输出、运行环境、监视告警信息等进行研发与改造,实现与天擎的适配。
2.2 镜像制作
用户通过在线和离线等方式,进行算法镜像的制作和上传提交申请,在管理员审核通过后,可以在天擎业务平台“算法注册”页面进行使用。镜像制作主要包含三种方式:
方法一:离线镜像制作。适用于用户本地无Docker环境且无Docker镜像制作基础,或算法环境依赖需要自定义制作时。使用该方式进行镜像制作时与虚拟机安装环境类似:用户申请容器资源;管理员审核通过后在指定服务器上创建容器并启动sshd服务;用户远程登录到容器内,进行算法依赖安装、算法测试;测试通过后,在离线制作镜像页面选择已调试后的容器,制作成镜像。
方法二:在线镜像制作。适用于用户有Docker镜像制作基础,并有算法包文件,依赖环境点单。用户在平台提供的基础镜像上,通过Docker指令在线制作镜像,包括添加算法指令包、指定执行目录、端口映射、挂载目录等。
方法三:镜像文件上传。用户将通过镜像下载页面保存镜像tar文件或者其他定制好的镜像tar文件,在镜像资源管理页面上传。
2.3 湖南省水文数据同步镜像制作
方法一、二制作的镜像简单、规范、安全,符合天擎审核要求。但是,在天擎提供的基础镜像无法满足算法运行环境需求时,方法一、二中用户无root权限,仅能以用户申请的天擎业务用户运行,且除家目录以外无写权限,在需要安装其它依赖及环境的情况下,建议采用方法三,在自建容器服务器中制作自定义镜像,打包后上传。下面以制作湖南省水文数据同步镜像为例,介绍离线镜像的制作方法。
(1)使用自建容器服务器制作镜像时,需要修改容器内用户最大线程数为65535。
修改方式为:vi/etc/security/limits.d/20-nproc.conf,如图1所示。
图1 修改容器内用户最大线程数
(2)编写Dockerfile。
天擎要求Docker容器中的进程以业务账户执行,在用户镜像上传后会校验是否需要包含业务账户名称、用户Uid,用户目录是否符合规范/space/cmadaas/dpl/{业务账户名称}等。因此,选择编写Dockerfile文件,基于DSL语法构建镜像,如图2所示。
图2 Dockerfile内容
其中,创建用户与设置工作目录关系到能否通过天擎的镜像校验,是必不可少的。业务账户名称与产品加工业务系统用户名称保持一致,用户Uid可以在镜像管理页面进行查看。
COPY命令复制当前目录下的算法及相关文件或者目录到容器指定目录。
“RUN pip install-r requirements.txt”命令安装requirements.txt中指定的Python软件包。requirements.txt文件内容为:
pymssql==2.2.5
requests==2.28.1
(3)生成Docker镜像。
docker build-t sqltoxg:v3-f./Dcokerfile.
(4)运行Docker容器。
docker run—name sqltoxugu3-it sqltoxg:v3/bin/bash
(5)调试成功后,将运行中的容器保存为docker镜像。
docker commit a346c822d116 sqltoxg:v3.1
(6)镜像打包为tar文件。
docker save-o docker_SqlToXugu_v3.tar sqltoxg:v3.1
(7)上传镜像并注册算法,将算法加载到加工流水线调度运行,算法运行界面如图3所示。
图3 算法运行界面
2.4 运行比较
湖南省水文数据同步算法主要任务是从ms-SQL数据库同步水文行业共享数据到天擎的虚谷数据库中。下面选取水文降水量数据,以相同的算法及参数运行在虚拟机环境、自建容器服务器(以下简称容器)、天擎算法容器云(以下简称算法)中,对虚拟机、容器、算法在同步效率方面进行测试。
(1)不同时间段对比。
选取2022年7月1日0时至1时、7月2日至3日,7月11日至20日的数据进行同步,分别进行小时、日、旬数据同步速度比较,结果见表1。
表1 同步速度测试结果
(2)不同步骤对比。
每次同步操作的主要步骤为:①查询SQL数据库;②去除虚谷数据库中重复记录;③更新虚谷数据库。选取2022年7月21日至30日逐日数据进行同步测试,比较3个步骤耗时情况,查询耗时、去重耗时和更新耗时结果依次如图4、图5和图6所示。
图4 逐日查询耗时
图5 逐日去重耗时
10天总记录数为219501条,每条在3个步骤中的平均耗时见表2。
表2 每条记录平均耗时 单位:毫秒
所有测试结果的不同时间段对比中,算法同步速度最快。不同步骤对比中,步骤1算法平均耗时、单日耗时稍长,虚拟机与容器耗时接近;步骤2算法平均耗时较短,容器耗时最长;步骤3算法单日和平均耗时最短,虚拟机与容器耗时接近。综上所述,虚拟机与容器同步效率接近,算法效率最高。
3 结语
天擎是目前气象部门的核心平台之一,各类算法融入气象大数据云平台是气象信息化、集约化发展的趋势与要求。Docker具有体积小、启动快,在保证运行环境独立的同时减少环境部署时间、降低系统资源消耗等优点,在天擎的算法接入方面有较大的优势。本文以湖南省水文数据同步算法为例,介绍了从镜像制作到算法调度运行的全流程,并对同步效率进行了测试。这对其他算法融入具有一定的参考、示范意义,对推进本省“云+端”的气象业务体系起着积极作用。