赵春燕 王彬* 孙婧 常飚 胡江凯 周斌
(1 国家气象信息中心,北京 100081; 2 国家气象中心,北京 100081)
气象数值模式是气象科技创新的核心组成部分,已成为气象部门技术进步与业务发展的重要标志之一。气象数值模式不同于一般意义的软件产品,其研发是一个科学探索性较强的过程,同时需要规范严格的技术手段保障业务运行。由于兼具科研试验、业务管理以及科研-业务转化的多重需求,持续改进的过程管理和代码版本控制对气象数值模式的可持续发展至关重要。代码管理是软件配置管理中的基础管理过程[1],是软件能力成熟度评估标准中的关键过程域。近几年,软件开发规模越来越大,开发团队也随之扩大,分布式开发成为常态,团队开发质量和协作效率问题也越来越突出,而优秀的代码管理平台能够支撑开发人员更高效地协同开发,同时保证软件资产的完整性和可跟踪性。
代码管理软件技术的发展经历了本地版本控制、集中式的版本控制和分布式版本控制3个阶段[2]。在20世纪中叶,计算机得到初步应用,软件系统开发周期较长,出现了如RCS的基于计算机系统本地的代码管理工具[3]。随着计算机的发展和软件规模的扩大,20世纪70、80年代,出现了C/S架构的集中式代码管理工具如CVS、SVN、Perforce等[3],由服务端提供合并、版本记录集中式的管理。20世纪90年代到21世纪初,随着互联网的蓬勃发展、软件规模日益扩大,分布式开发团队广泛出现,分布式版本控制系统应运而生,如Git[4]、Mercurial。随着互联网开放程度的提高与云计算技术的发展成熟,代码托管及共享服务平台、项目协作生态社区成为代码管理的主要形式,如全球最大的开源社交编程及代码托管网站的GitHub[5]、国内的码云Gitee和CODING[6],其分布式、高效协同共享的特点,使其成为现代代码管理的主要手段。国际上,欧洲中期天气预报中心、美国国家环境预报中心、美国国家大气研究中心均已采用Git分布式技术支撑模式协同研发,解决了国际合作研究的研发协同问题,提升了模式研发的协同效率。
气象数值模式[7]是实现数值天气预报的核心技术手段,气象数值模式具有持续性、科学性、分布性、广泛交叉应用衍生等特性,对代码管理提出了新的挑战。以GRAPES[8](Global/Regional Assimilation PrEdiction System)模式为例,从2001年起至今,经历了近20年的持续改进升级,如何保持研发历史脉络的清晰和可持续性成为关键问题之一。GRAPES模式包括资料同化[9]、模式动力框架、物理过程等模块,基于Fortran采用模块化的设计[10]组合调用,采用并行框架调试运行在气象高性能计算机系统[11],融合了气象科学、计算科学,尤其在众核异构计算发展趋势下,支持众核加速计算架构下模式移植优化研发[12]、跨学科跨部门的交叉协同合作成为迫切需求。GRAPES模式已发展了GRAPES_GFS[13](全球中期预报模式)和GRAPES_MESO(区域中尺度模式),各区域气象业务中心根据业务的特点发展了特色的应用模式,如集合预报[14]、沙尘暴预报、台风预报[15]、水文洪水预警预报等,拥有众多的分布式开发团队,研发力量地理上分散,涉及大量的分布式协同共享、集成合并管理需求。综上,需要建立支撑模式分布式协同众创研发的代码管理平台,支持大规模协作共享研发、科学规范代码集成管理和脉络清晰可追踪的研发成果管理。
本文围绕气象数值预报模式的研发特点和发展需求,通过技术选型分析,设计建立了一个基于Git的分布式代码协作共享管理平台METCODE,保存模式研发历史,支撑气象数值模式的持续发展和国省合作研发应用的协作共享,建立了模式代码管理标准,规范化研发、集成合作和业务化各个环节。
2010年,中国气象局引进了商业版本管理软件应用于GRAPES研发[16],建立了气象数值模式代码管理系统,首次实现了GRAPES模式研发的代码管理,运行至今建立了956个用户终端,更新次数21260次,系统集成2059次,支撑发布版本21套。随着模式研发历史的累积,系统访问性能开始出现下降。同时,由于服务端软件版本没有升级,一定程度上限制了客户端软件版本的兼容性,在新的高性能计算平台上应用存在困难。
发展我国自主可控的气象数值模式,是一个持续发展的科学工程。气象科学发展迈入了地球系统时代,天气和气候模式呈现一体化发展融合的趋势。天气、环境、水文等学科呈现更广泛交叉应用衍生的趋势,模式研发的生态逐渐建立,模式研究更加开放共享,分布式协作的需求更加突出。因此,亟待建立一套安全、分布、支持协作共享的代码管理系统。同时,随着地球系统模式发展、数值模式预报的精度与预报时效的不断提高,科学计算规模呈指数级增加,异构众核、低耗高效超算架构体系[17]成为高性能计算的发展趋势,多态、异构[12]的研发计算平台需要代码管理工具具备较高的兼容性,广泛的支持混合计算架构[13]下的研发交互以及结合代码编辑工具的集成使用。
气象数值模式代码管理平台METCODE在Git、Docker、Spring、React.js、MySQL、Redis等开源软件基础上,进行了自主定制开发形成了国产代码管理和共享协作平台,部署于中国气象局私有云[18-19],是以B/S为主、C/S为辅的整套应用级软件,支持DevOps[20]研发运维一体化的过程管理。
METCODE平台由云端代码管理共享协作平台和云端集成开发工具组成(图1)。云端代码管理共享协作平台以Web方式,围绕研发流程提供项目管理、分布式代码管理、文件管理、知识管理及DevOps等功能,以项目为组织单元建立代码库,实现对项目的代码管理和协作共享,支持对项目人员及权限管理、集成共享管理、项目文件、项目任务、版本发布等进行管理。云端集成开发环境支撑协同编辑的Web在线开发终端环境,定制了气象主要编程语言Fortran语法提示功能。
图1 METCODE功能结构
METCODE代码管理共享协作平台支持实现项目生命周期的DevOps一体化全过程管理,可用于气象各类项目建设的过程管理和成果管理,包含项目管理、任务管理、代码管理、持续集成、测试管理、部署管理和构建管理等功能,实现了结合云端开发环境提供代码的在线开发、编译、部署。
METCODE基于中国气象局私有云部署,根据用户分布式的特点,设计支持气象部门内部用户、区域中心的用户和外部用户的合作研发管理。设立了备份系统,对关键数据进行定时备份以保证应用数据的安全完整。METCODE提供统一域名访问Web页面,支持项目管理和代码管理、集成交互和共享,发挥代码托管和共享的主要功能(B/S方式),研发人员可在个人电脑、笔记本电脑上通过浏览器访问Web网页界面或通过可视化客户端来访问METCODE代码库。 气象数值模式一般基于高性能计算机系统研发和业务运行,在中国气象局“派-曙光”高性能计算机上部署Git客户端,通过命令行操作可与METCODE代码库交互,开展模式研发、模式异构众核移植优化的代码管理(C/S方式)。用户也可通过Git可视化客户端、集成IDE结合METCODE域名,实现代码管理。为了支持内外部用户合作研发成果的集成共享,平台实现了代码库分支级别的数据同步功能(图2)。
图2 气象数值模式研发应用示意
模式研发用户在“派-曙光”高性能计算机上通过命令行访问METCODE代码仓库的工作流程如图3所示,首先从远程代码库克隆到高性能计算机本地工作目录,或者从远程代码库拉取代码到本地代码库,并与本地代码库进行合并。用户在本地用户工作目录下进行研发(增、删、改),将修改的版本提交到本地代码库,文件先被添加到缓存区,再被提交到本地代码库,通过推送到METCODE远程代码库统一管理。
图3 “派-曙光”访问流程
METCODE是B/S架构的系统,基于国产CODING软件系统定制开发,采用Linux、容器技术,基于微服务[21]、服务发现方式进行架构,具有去中心管理、粒度小、耦合度低、易扩展、易维护等优点。系统从上至下分为应用层、微服务层、数据库层和基础架构层(图4)。基础架构层采用容器技术编排维护系统,数据库层采用MySQL关系型数据库存储项目等通用信息,采用Redis缓存技术实现数据的高效访问。微服务层采用了Git-Server 和Repo Manager实现代码仓库的传输服务和管理,将代码库的管理、维护、备份等功能通过微服务组件管理,以精细粒度管理应用,耦合了Git本身可独立应用的特点。基于SSO技术实现了用户统一认证和单点登录集成,应用层采用Nginx实现服务请求管理,并实现了分布式架构的负载均衡,基于云架构可有效支持高并发访问,集成了集成开发环境插件及第三方的Jenkins、Sonar等插件。
图4 METCODE技术架构
“派-曙光”高性能计算机系统设计有一套规范的高性能计算机用户管理机制,并建有北京高性能计算机应用中心门户网站,实现了用户的统一管理和单点登录。为了便捷支撑研发人员在“派-曙光”上基于METCODE开展模式研发协同,实现了METCODE与北京高性能计算机应用中心的用户统一认证管理和单点登录[22],采用SSO 认证机制,与北京高性能计算机应用中心 SSO 认证中心的接口通信以交换令牌、校验令牌及发起登录、注销请求。认证流程如图5所示,用户通过向门户网站发送登录请求,门户网站将该请求转发到统一认证中心进行认证请求,认证中心认证通过后,返回认证唯一令牌到门户网站,门户网站携带认证中心提供的令牌信息,向被保护资源发送访问请求响应。
图5 METCODE用户统一认证流程
国家级气象数值模式研发主要基于中国气象局骨干网进行,解决了国省合作、外部单位的合作研发协同,保障模式代码库的安全性,实现了骨干网代码库和互联网DMZ区代码库分支级别的同步功能,支持内外网研发成果交互共享。分支同步由内网项目管理员发起,支持双向分支同步,基于SSH协议和接口技术实现。通过Git获取访问分支的公钥,读取分支内容,基于SSH协议传输至目标系统,再通过Git操作提交到目标项目中,实现分支信息的同步(图6)。
图6 METCODE分支同步示意
METCODE在气象部门内得到成功应用,支撑了GRAPES全球/区域模式、GRAPES大气化学耦合模式(GRAPES_CUACE)联合研发,为气候海洋模式(MOM5)、模式后处理[23]、模式GPU移植开发、模式支撑软件、气象信息软件等项目建立了协同开发和代码管理功能。
为了保障模式研发历史的延续性,实现新旧系统的无缝过渡迁移,在METCODE建立了GRAPES模式的历史代码库,用于迁移在原有代码库中的模式研发历史。在不同技术架构的代码库中,完整的迁移研发历史信息,需从原系统迁出历史记录,导入到新的系统保存。基于Git-p4迁移工具进行了二次开发,调用原有代码库命令行工具读取原代码库的内容,包括用户信息、路径信息、文件类型信息、变更信息等,通过METCODE的命令行工具将读取出的内容推送到METCODE的代码库中。对原有代码库中的路径信息、文件名、作者信息、代码正文中的中文进行过滤(路径、文件名、作者信息、文件内容),对.docx, .doc, .pdf等二进制文件进行过滤、正文非转码处理,实现了中文UTF8转码,解决了GRAPES模式研发历史迁移中文乱码的关键问题,完成了GRAPES历史库近10年超过10 GB 研发历史数据的迁移(图7)。
图7 模式研发历史迁移原理
原有模式代码管理系统为C/S架构,模式的研发历史均存储于服务端元数据库,而基于需求分析中的统计数字,集成更新次数只占总更新次数的10%左右,而约90%的研发历史记录是团队内部及个人的研发记录,大量的元数据必然导致系统性能降低,同时也不利于保持模式研发历史脉络的清晰。基于METCODE代码管理平台,利用Git的分布式概念,将个人研发记录保存在本地库,METCODE远程库仅保存团队以上的研发成果和历史,能够减少大量个人研发记录,优化了代码库的管理,更好地支撑模式持续发展。
基于生产环境采用压力测试工具模拟200并发数对METCODE的任务列表访问、任务创建、代码库访问、代码目录浏览、代码源文件获取等关键应用场景的指令执行、响应时间、网络吞吐和网络收发速度进行了压力测试。表1测试结果显示各类操作响应时间平均小于5 s,性能满足了模式分布式研发的需求。
表1 METCODE性能测试
在气象数值模式发展的需求驱动下,设计建立了基于Git的国有自主知识产权METCODE代码管理协作共享平台。METCODE采用高可靠的架构设计、分布式的部署,能够安全、灵活地支撑内部、外部及合作研发的需求。METCODE现已支持了100多个项目的管理,应用单位覆盖国家气象中心、国家气候中心、中国气象科学研究院、国家气象信息中心等业务科研单位,以及部分合作单位。
目前系统在企业级管理方面还需加强,如对多层级单位组织架构的支持和分级管理,将能更好地支撑中国气象局各类大型、中型和小型等各类项目的灵活管理。METCODE随着Git的深入发展具有更加广泛的应用前景,未来将进一步完善,支撑全部气象数值模式的研发管理,并推广应用到气象软件系统项目的代码与过程管理。