如何防止服务流程OOM?SQL分页查询来解决

作为复杂业务集成场景下的首选技术,服务流程拥有灵活可配的设计、运行、监控和异常处理机制,深受集成云用户亲睐。
But……为了支持失败重试和撤销补偿的异常处理操作,服务流程需要保存运行时的数据和状态。这样一来,当处理的数据量过大时,缓存的数据量随着流程运行在不断扩大,严重影响系统性能,甚至可能导致内存溢出。
难道大批量数据同步且包含复杂的处理过程(数据映射、值转换、数据加载、从多个来源取数等) 的集成场景就不能处理了吗?
当然不会这么局限啦~紧跟小编,教你一种将服务流程应用于大数据集处理的方法:使用SQL分页查询的方式对大数据集进行切分,使服务流程通过循环的方式逐页处理,保持服务流程的运行期内存状态数据量始终处于一个合理的范围内。
1 流程属性说明
1.1 基本信息配置优化
首先,为了避免大数据同步时产生太多日志耗费资源,可以将“日志级别”调整为“错误”;打开“禁止记录追溯信息”开关,并将“自动保存时间间隔”延长,降低服务流程状态信息写入数据库的频率。

基本信息配置示例
1.2 流程变量声明
设置流程变量以便在流程中控制分批取数大小,并将取出的数据保存下来进行分批处理,其中主要变量为:
1)DEMO1_DATA、DEMO2_DATA作为两个集成对象变量,用于暂存分批数据;
2)“每页大小(PAGE_SIZE)”用于设置每批数据行数,示例中设置5行,则5行数据作为一页数据进行处理,可根据实际数据行的大小进行自定义设置。建议每批数据的大小不超过5MB。

流程变量设置示例
1.3 依赖资源声明
添加用于执行SQL查询的数据源。数据源的别名须与执行SQL语句节点中所用的连接参数赋值保持一致。

依赖资源填写示例
OK,以上准备工作都做好了,接下来配置服务流程图。
2 流程图详解
2.1 主流程图
主流程用于维护分页循环,可以实现以下功能:
通过SQL语句查询出一页的数据,保存在DEMO1_DATA、DEMO2_DATA变量中;
计算当前页数据大小并递增已处理行数;
处理变量中的数据并清空变量(业务处理流程图);
当前页数据处理完后递增查询起始点以进行下一次查询。

主流程示例
2.2 “查询一页数据”节点
分页查询SQL的语法与所用的数据库相关,应用时需要相应调整,具体语法请搜索相应数据库的SQL语法手册;在WHERE条件中使用“?”表示参数;应在ORDER BY语句的最后一列加上主键字段,确保数据的排序是确定的。

“查询一页数据”节点信息及脚本示例
2.3 “递增数据行计数器”节点
如果改变了暂存查询结果的流程变量名,需要相应修改“DEMO1_DATA”。

“递增数据行计数器”节点信息及脚本示
如何防止服务流程OOM?SQL分页查询来解决
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



