2020年第四季度工作总结

目录

一鼓作气,再而衰,三而竭

本以为第四季度会给 2020 年画上一个圆满的句号,没想到却变成对是否走在正确道路上的思考,也为 2021 年留下更多未完成的任务。

系统建设

GRAPES MESO 1KM 后处理系统

新建 GRAPES MESO 1KM 的产品后处理系统 grapes_meso_1km_post,为冬奥示范项目提供逐 3 小时生成的 24 小时预报数据产品。 相比于常规的 GRAPES 系列后处理系统,1KM POST 系统结构更简单,仅生成数据产品。 但 1KM POST 生成一些全时效的数据产品,所以系统中将分时效产品和全时效产品任务放到不同的 family 中 (hours 和 total)。

grapes_meso_1km_post 系统,hours 生成逐时效产品,total 生成全时效产品

NMC 台风报文检索

第二季度开发 NMC 台风数据库检索台风报文数据的 Python 程序。 因为 CMA-PI 上的 Python 环境缺乏数据库连接组件,所以脚本使用笔者自己搭建的一套环境。 而依赖于个人账户文件的程序无法在业务系统中应用,所以第四季度使用 GOLANG 重新实现报文检索程序。

程序使用 SQLX 库连接 MySQL 数据库,详情参见如下文章

GOLANG:使用SQLX库执行简单的SQL语句

项目地址:

https://github.com/nwpc-oper/nmc-typhoon-db-client

其他更新

增加文件删除代码,删除 globalchartos 系统中遗漏的历史图片文件。

因虚拟机升级,修改三个系统的部分 FTP 地址。

更新 MESO 3KM 和 MESO 10KM 的冬季降水绘图脚本,后续需要考虑是否需要自动切换冬季和夏季降水脚本。

运维技术

NWPC 消息平台

第四季度在消息平台方面没有大规模的更新。

经过 11 月初的测试,发现笔者使用的 RabbitMQ 消息中间件无法满足每秒 1000 条的消息吞吐量。 可能是配置有问题,也可能是其它原因。尝试在代理服务中批量发送消息而减少 RabbitMQ 连接数,依然没有效果。 初步测试发现 Kafka 可以满足需求,所以着手将消息中间件切换为 Kafka。 但第四季度后半段时间因为一系列原因没有继续进行代码开发,这项工作只能推迟到明年第一季度。

12 月底升级面向 NMC 监控平台的数值预报产品消息,符合新版的消息规范,并将于 2021 年 1 月 1 日正式切换。

为了准备技术报告,第四季度撰写一系列关于 NWPC 消息平台的文章,并更新之前写的部分文章,包括:

消息设计

NWPC消息平台:产品事件消息

NWPC消息平台:ecFlow 命令消息

NWPC消息平台:验证 ecFlow 命令消息

NWPC消息平台:模式运行时长预测消息

适用于NMC监控平台的数值预报产品消息

消息发送

NWPC消息平台:在 ecFlow 系统中发送产品事件消息

NWPC消息平台:发送ecFlow命令消息

使用kafka-go连接Kafka

代理服务

NWPC消息平台:消息代理服务

ecFlow笔记:基于ecFlow构建后台服务监控系统

存储

使用Docker镜像搭建ElasticSearch集群

分析

NWPC消息平台:标准时间统计算法

项目源码:

nwpc-oper/nwpc-message-client

nwpc-oper/nmc-message-client

nwpc-oper/nwpc-message-tool

数据处理

站点数据提取

GRAPES MESO 1KM POST 系统生成一个站点数据,从全部时效数据中提取站点廓线和铺面图数据,使用 NCL 脚本实现,每个任务运行超过 1 个小时。 笔者尝试使用 Dask 实现站点数据的并行抽取,可以将运行时间减少一个数量级。

详情请查看如下文章:

使用 Dask 并行抽取站点数据

另外,在年终总结期间,还使用 Dask 对之前实现的并行计算统计指标的程序进行进一步试验,并使用 nwpc-oper/nwpc-graphics 库进行并行图片绘制实验,均得到良好的实验结果,表明基于 Dask 的并行数据处理方法能有效提高部分数据处理任务的运行效率。

详情请查看 2020年工作总结

诊断工具

检验工具研究

第四季度没能延续第三季度的工作,没有继续研究包括 Meteva 在内的检验工具。 仅使用 Meteva 计算格点降水的列联表,详情参看如下文章:

Meteva笔记:计算格点降水的列联表

下一步应该重新拾起对检验工具源码的研究,测试并实现更多的算法。

诊断工具研究

11 月完成分布式调度绘图系统 ploto 与中试平台的初步对接,使用 GIDAT 的绘图程序绘制 2 种测试图形。 仅添加绘图和分发接口,对 ploto 的主体结构没有大规模修改。

项目源码地址:

perillaroc/ploto

perillaroc/ploto-gidat

年初准备一篇关于分布式调度的技术报告,可惜没有评上。 目前该项目的开发已基本停滞,实在有些浪费,应该尽快将该项技术应用到实际的项目中。

今年整年在 地球系统诊断 工具方面都没有太大的进展。 第四季度开始督促公司分析 ESMValTool 工具提供的各项诊断方法,但因为笔者缺乏管理外协公司的能力,进展比较缓慢。

下一步计划重新开展对 ESMValTool 工具的研究,尝试将各种诊断方法集成到分布式调度系统中。 如果想要更深入研究,则会从构建一个轻量级工作流的角度对分布式调度的核心组件进行重新实现。 另外,还需要认真思考如何才能更好地利用公司的力量,朝着项目最终目标而持续前行。

思考

工作之余还是要做一些其他的事情,比如思考工作,阅读论文等,在这一点上我的表现完全不及格。

第四季度仅看了一篇文章,介绍的还不是最近的技术,不过收获非常大。 笔者年度汇报中的第一项内容就借鉴了这篇文章的表述方式。

论文阅读:适用于地球系统模式工作流的轻量并行Python工具

下面一篇文章获得中心“学用新思想,笔谈千字文”活动个人千字文二等奖 (一等奖 3 人,二等奖 7 人,三等奖 16 人)。

读《治国理政》第三卷有感

在编写年终总结 PPT 前,完成年终总结 PPT 后以及完成年度工作汇报后,笔者各写了一篇感想。

是时候该放松放松了

面对工作要更轻松些

年度工作汇报后的感想

可能正是因为没事想出的这些多余想法,导致整个 12 月都能没能努力推进工作,仅完成年度汇报 PPT 这一项重要任务,而第四季度也是全年工作进展最少的一个季度。 在经历一番胡思乱想后,我得出初步结论:

明年首要任务就是写论文,未来工作必须向科研靠拢。

但笔者仍然处于不清楚未来该何去何从的迷茫阶段,可能还需要一段时间来考虑以后自己到底该做什么。

总结

从 Github 代码提交量来看,第四季度依然延续第三季度的下降趋势,尤其是 12 月基本停止开发工作。

第三季度定下的目标没有一个得到落实。写的一些技术文章也没能形成完整的技术报告,消息平台的可视化面板尚未优化,数据工具还停留在第一季度的版本,诊断工具没有推广,机器学习算法也不见了踪影。 看来计划之类的确实没有太大的用处,还是得看看自己能不能保持前行的动力。

依然没有解决掉老问题:想做的事情太多,最后一件都没有做好。

明年工作会前还有一周的时间,我应该仔细想一想明年的工作计划。

下一步计划

2021 年第一季度首要任务是在 1 月 30 日截止日期之前完成至少一篇技术报告。

延续 2020 年第一季度在 ESMValTool 方面的工作,分析已跑通的诊断方法,研究如何与分布式调度系统相集成。

继续完善 NWPC 消息平台,在第一季度结束前完成现代化专项任务全部考核指标。

如果仍有空闲时间,继续研究基于 Dask 的分布式数据处理技术。

其余计划有待工作会后补充。

今天是 2020 年的最后一天,无论经历多少风雨,2020 年的故事也注定会完结。 祝 2021 年新年快乐!

参考

2020年第一季度工作总结

2020年第二季度工作总结

2020年第三季度工作总结