2020年第一季度工作总结

目录

没想到2020年的第一个季度如此特殊,只能感叹我还是太年轻了。

特殊时期也让第一季度的工作显得与之前完全不同。参加工作之后很少单独总结某个季度的工作,最近看到单位不少部门都开了三月或者第一季度工作总结会,过去的三个月刚好可以用来总结一下。 多总结才能吸取经验教训,才能认清当前现状,才能看清前进方向。

本文从不同的方面介绍我在2020年第一季度做的一些工作,争取在总结的过程中获得我想要的收获。

业务系统

我负责的业务系统建设工作主要集中在业务流程构建和程序集成,几乎不涉及具体的产品程序和绘图脚本开发。

第一季度负责的业务系统基本没有大型更新,今年的更新任务预计会集中在第二季度。

增加产品

MESO 3km 替换 MESO 10km 图形产品

NMC新版网站已于2020年3月正式上线,新版网站上 MESO 10km 的部分图形产品由 MESO 3km 替换。 因为 MESO 3km 的预报时次和预报时效均短于 MESO 10km,所以需要保留 MESO 10km 中 MESO 3km 没有预报数据对应的图片产品。

为此,我重新设计了 MESO 10km 的图片制作系统,采用遍历算法查找并处理空的容器节点,并将其默认状态设置为 complete,保证系统可以正常滚动循环。

详细内容请查看文章《ecFlow笔记:处理空的容器节点》。

另外一篇文章《NWPC业务系统笔记:构建图片产品制作系统》总结了如何使用 ecFlow 构建图形产品制作系统。

增加冬奥产品

为 GRAPES GFS 和 GRAPES MESO 3km 两个模式增加冬奥数据产品制作任务。

增加新图片

为 GRAPES TYM 增加雷达反射率图片产品。

产品更新

更新大部分后处理系统的产品库,替换标准底图。

更新 GRAPES MESO 3km 和 GRAPES MESO 10km 两个区域模式的卫星云图产品,从 FY2G 升级为 FY4A。

模式更新

为满足00时次的预报要求,将 GRAPES TYM 模式积分由 64 节点增加到 128 节点,提交命令由 srun 改为 mpirun。 更新后模式积分运行耗时在 50 分钟左右,基本满足 14:00 前提供产品的需求。 不过因为目前不是台风季,还需要后续进一步验证。

维护手段

为确定性模式的产品后处理系统增加检查时次是否完成的任务,防止任务卡住影响下一天的预报循环。 不过添加检查任务后,很少发出报警,任务卡住基本会被及时发现。

详细内容请查看文章《NWPC业务系统笔记:检查单个时次是否运行完成》。

为进一步确保卡住的作业会被及时发现,为图形制作任务添加late属性,利用 ecflow_ui 提供的超时报警功能。

详细内容请查看文章《ecFlow学习笔记:使用late设置超时报警》。

为了保障登陆节点上运行的服务程序具有高可用性,使用 ecFlow 构建服务检查系统,定时检查各个服务进程是否存在,如果不存在会自动重启。

详细内容请查看文章《ecFlow学习笔记:服务检查系统》。

消息系统

GRAPES MESO 3km 和 GRAPES MESO 10km 开始向 NMC统一监控平台实时发送消息。

GRAPES 系列所有确定性模式系统开始向评估中的 NWPC 消息平台实时发送 GRIB 2 产品完成上传的消息。

下一章节会详细介绍。

消息平台

消息平台是今年的核心工作内容之一,工作内容已包括在如下项目中:

NMC统一监控平台

去年已为数值预报业务系统定义符合 NMC 统一监控平台规范的产品消息格式,开发消息发送命令行程序,并应用在 GRAPES GFS 系统中。

今年第一季度,开始向监控平台实时发送 GRAPES MESO 3km 和 GRAPES MESO 10km 的产品生成消息。

消息格式请查看文章《适用于NMC监控平台的数值预报产品消息》。

NWPC消息平台

重新设计了 NWPC 消息平台的产品消息格式,支持后续添加其他种类的产品消息。 重构消息发送命令行程序,提供动态命令行参数解析功能。 为 GRAPES 系列所有确定性模式系统创建单独的消息发送任务,开始向评估中的 NWPC 消息平台实时发送 GRIB 2 产品完成上传二级存储的消息。

详细内容请查看下列文章:

消息存储

为 NMC 监控平台和 NWPC 消息平台开发消息接收和存储程序,分别从 Kafka 和 RabbitMQ 中读取消息并保存到 ElasticSearch 库中。 为保证消息存储的效率,批量上传消息到 ElasticSearch 库。

详细内容请查看文章《使用Bulk API向ElasticSearch发送数据

统计分析

今年第一季度开始,气象中心每天在运维公众号上发布各系统运行情况,几乎每天模式产品都有延迟情况发生。

为了统计产品生成情况,我开发了针对上述两个平台的统计分析工具:

nwpc-oper/nwpc-message-tool

该工具支持绘制逐时效产品生成时间网格图和产品生成时间段条形图。

应用示例请查看文章《统计数值天气预报模式产品生成时间》。

日志分析

ecFlow 日志分析一直是我关注的方向,今年终于有时间着手对之前的项目进行大规模重构。 此项工作正在进行当中,工作内容包含在以下项目中:

模型

之前设计的模型类面向关系型数据库,导致部分工具只能从数据库中读取消息,不是良好的程序结构。

今年第一季度开始将模型类与具体的存储方式解耦,已设计独立的ecFlow日志条目对象和日志解析器,与具体的存储方式无关。

同样设计了用于分析节点运行状态的数据对象,独立于具体的日志条目对象。在此数据基础上,使用确定有限状态自动机创建节点运行情况分析器。

详细内容请访问nwpc-oper/nwpc-workflow-log-model项目。 我会陆续撰写相关文章。

收集

之前的收集工具只支持向数据库中写入解析后的日志条目。 为了实现在线分析功能,重构收集工具,使用新版 ecFlow 日志解析器处理日志文本,提供返回日志条目列表的函数,用于下一步集成。

详细内容请访问nwpc-oper/nwpc-workflow-log-collector项目。

批量处理工具

批处理工具只进行了少量的更新,详细变更请访问nwpc-oper/nwpc-workflow-log-processor项目。

在线分析工具

使用全新设计的节点运行情况分析器开发在线分析工具,支持直接读取 ecFlow 日志文件,并输出节点的运行状态信息。 使用 pandas 等库进行数据处理,已提供命令行程序。

详细内容请访问nwpc-oper/nwpc-workflow-log-tool项目。

该工具的应用示例请查看文章《统计数值天气预报模式积分运行时间》。

诊断平台

尽管去年底已为诊断平台工作进行一番挣扎,今年还是继续这部分工作,只不过工作重心有所转移。

业务系统绘图脚本封装

为了学习如何使用 Jupyter Notebook,封装了业务系统绘图脚本,支持在 Notebook 中使用。

详细内容请访问nwpc-oper/nwpc-graphics项目。

涉及的部分技术请查看文章《使用Jupyter Notebook显示NCL绘图》。

ESMValTool

今年计划在 perillaroc/ploto 项目中集成 ESMValTool 工具,经过一系列的研究,对该工具的运行流程有了初步的了解。 拆分了示例项目的执行过程,并整合到 ploto 项目中,创建了 perillaroc/ploto-esmvaltool 项目。

但受限于缺乏测试数据,后期研究已停滞。接下来需要继续深入研究 ESMValTool 项目。

GIDAT

因为疫情的原因,诊断软件平台开发进展不是很顺利。 第一季度将该平台的 Linux 绘图程序测试版本集成到 ploto 项目中,创建了 perillaroc/ploto-gidat 项目。 后续需要进一步开发用于后台批量绘图的 ploto 项目组件,并实际部署。

数据工具

以上所有的工作内容,都不如数据工具更具有通用性。 虽然去年已通过二级存储部分解决长期数据存储的问题,但我们单位目前仍缺乏可用的数据检索工具和接口。 我之前一直避免直接介入这个领域,仅开发一些应用于产品后处理系统的辅助性质工具。

过去三个月中,我简单使用并研究了由天气预报技术研发室开发的 METDIG 套件,终于不得不承认,这是一个激动人心的领域。 所以在三月份尝试开发一个简单的项目nwpc-oper/nwpc-data,实验自己的一些想法。 尚未推广该项目,想要真正有助于单位的其他项目,还需要更多的合作和沟通。 不过我正是担心这一点,毕竟没有成功的经验可以参考。

nwpc-oper/nwpc-data 项目目前提供两项功能:

  • 从本地 GRIB 2 文件中加载要素场;
  • 查找业务系统生成的 GRIB 2 文件路径。

以上功能都不够完善,有待进一步开发。

相关文章如下:

总结

今年第一季度,可能是因为在办公室办公次数太少,琐碎事情不多,代码编写量有了显著的增长。 不过,我没能利用这一段时间,好好总结一下目前的工作,并尝试写一写论文,实在有些可惜。

我确实不太擅长项目管理,围绕在工程项目上的博弈已然让工程项目成为烫手的山芋。 既然现阶段我的工作不严重依赖工程项目的支持,在目前负责的海洋工程一期项目验收结题后,我不会再接手新的工程项目。

这就引出了下一阶段的工作计划。

下阶段计划

第二季度,要抓住核心任务。

以最快的速度完成即将到来的业务系统建设任务,并在六月份完成海洋工程一期项目的验收工作。

核心精力要投入到科研项目和创新团队任务中,包括对 ESMValTool 的研究和对分布式数据计算的研究。 另外,如果正在申请的气象现代化专项能成功立项,则要同时将部分核心精力投入到消息平台的进一步开发中。

我始终坚信,如果能一直保持进步,就可以在一定程度上应对未来的不确定性。

第二季度已经开始,加油!