求助!关于流程引擎框架和执行自定义用户代码

25次阅读

共计 749 个字符,预计需要花费 2 分钟才能阅读完成。

公司有个项目,主要需求就是 能够执行用户上传的插件(就是 pyton2 代码),并且按照一定的流程执行,然后要支持集群模式。

先说问题:

  1. 写插件的人调试困难,基本上属于黑盒了
  2. 改插件代码之后再重新执行,特别的麻烦
  3. 我还需要写检查代码语法的函数(虽然利用 ast 模块已经实现了),比如:必须定义 main 函数,并且仅有一个入参。但是使用中还是有其他的一些问题,比如一些我没考虑到的情况出现。就会导致后面执行的时候报错或者根本无法载入进去。
  4. 插件可能会出现内存泄露的情况,导致服务区器存吃满。别人每次都会直接找我们,虽然是因为插件导致的。可能需要能自定监测插件是否出现内存泄露的办法。

具体是:

有个 web 界面上传插件,然后在界面上面配置几个插件执行。这个任务会按照设置好的周期执行。

插件的流程是具体的 为:查询数据 – 处理数据 – 发送数据

查询到的数据每次大概有 1000 条,占用 10 兆左右的内存,每天大概有 7000 万条数据
现在我的做法:
  1. 用户上传插件之后,各个机器收到 kafka 消息,然后用 importlib 将插件动态导入进内存中 以便后面调用
  2. 单独有个进程去执行查询数据的脚本
  3. 将查询到的数据通过 kafka 发送至处理数据的进程
  4. 处理数据 的进程收到 kafka 消息 根据消息内要执行的 处理数据插件 发送数据插件 来分别按照流程调用插件
  5. 最后需要将最后一步的数据写进 ES,并且通过 kafka 进行通知回调
上面为什么要用 importlib 载入到内存中,是因为一开始尝试用命令行直接 python xxx.py 执行插件。但是这个调用行为属于高频操作,每天大概要调用几百万次。每次重新开启 python 虚拟机,速度根本就跟不上。所以后来改成直接载入到内存,通过函数调用。

求助大佬们,有没有开源的框架能够胜任这种情况的?已经尽可能精简了,希望大佬们留下一点点意见。

正文完
 0