ecFlow学习笔记:V5.0版本前瞻

目录

数值预报中心从去年开始使用ECMWF开发的ecFlow运行业务系统,目前使用4.11.0版本。最近ECMWF召开用户大会,浏览了部分PPT,发现即使在工具软件方面ECMWF也有明确的发展目标。访问ecFlow官网,发现已有正在开发的V5.0版本,内部已用。在意大利的数据中心投入使用后,原有的4.X版本不再维护。

本文简要介绍官网上列出的5.0版特性

为什么要5.0版

除了新增特性外,5.0版最大的变动在于对底层的修改。

4.X版本依赖boost serialisation库实现客户端和服务器的交互,这就需要依赖固定版本的boost库,以满足ecFlow不同版本之间的兼容性。从而使得扩展现有类的能力受到限制。例如编译ecFlow 4.X版本时,一般采用boost 1.53.0版本。

ecFlow 5.X 在客户端服务器通信中放弃对 boost 的依赖,现在使用 JSON 作为通讯数据。因此未来的 ecFlow 5.X 可以使用不同版本的 boost 库。

5.X 版本还缩短了客户端与服务器的通信延迟。

为了支持创建RPM包而使用旧版本编译器,5.X 版本已放弃该功能。现在使用新版的C++编译器和特性,提高软件的性能。

下面简单介绍5.X版本的一些改动。

放弃的特性

ecFlowview

因为许多Linux发行版已不再支持MOTIF,所以5.X的界面不再包含ecFlowview。windroc:将有效缩小软件包并缩短编译时间。

QT4

同时维护QT4和QT5太困难,诸如QtCharts的特性只有QT5中可用,所以不再支持QT4.

query 命令

提供一个新的query命令,用于查询ecFlow信息。对于一些简单的查询任务,可以不用再使用ecFlow的Python API。

# return node state to standard out
ecflow_client --query state /path/to/node

# state that can includes suspended
ecflow_client --query dstate /path/to/node


# return the current value as a string
ecflow_client --query repeat /path/to/node

# return the previous value as a string, does not modify real repeat
ecflow_client --query repeat /path/to/node   prev

# return the next value as a string, does not modify real repeat
ecflow_client --query repeat /path/to/node   next

# return set | clear to standard out
ecflow_client --query event /path/to/task/with/event:event_name

# returns the current value of the meter to standard out
ecflow_client --query meter /path/to/task/with/meter:meter_name

# returns the variable value to standard out
ecflow_client --query variable /path/to/task/with/var:var_name

# return true if expression evaluates false otherwise
ecflow_client --query trigger /path/to/node/with/trigger \"/suite/task == complete\"

时间调度

ecFlow服务异常终止,或者其他原因可能会导致应该在某时间的运行的任务错过了启动时间而没有运行。

ecFlow 5版本会尝试解决这个问题。

服务重新启动时,会读取checkpoint时间点。我们会判断suite的时间与实际时间的过时程度,如果在一个小时内,suite和时间属性会跟上真实时间。

因此:

  • 过去一个小时中的计划任务会执行
  • 过期的auto-cancelled节点会被移除
  • 过期的auto-archived节点会被归档
  • 任务超过late限定会被标记

脚本生成

作业脚本生成时间较长时,ecFlow服务会在日志文件中写入一条消息。但大部分情况都会被用户忽略,直到发生一些其他问题。

ecFlow 5.X 版本会通知GUI某个任务脚本的生成时间超过规定的限额,界面上会显示一个新的图标。这有助于提早发现问题。

内部重构

序列化

上面提到过,5.X版本中使用JSON代替boost序列化库。

checkpoint与缓存

ecFlow服务在checkpoint时,会将所有的definition写入磁盘。5.X版本在写入文件前会在缓存中保存definition的字符串,当用户请求所有的definition时,ecFlow服务会快速地返回缓存的字符串。

auto sync

在4.X版本中,每当GUI中执行一个操作,会向服务器发送两个请求:

  • 执行命令
  • 执行sync命令,从服务器同步状态变化

在5.X版本中,我们支持auto sync,将上述两个命令有效地组合为一条命令,减少GUI和Python客户端的延迟,提高响应速度。