Skip to content

hiplot/rscheduler

Folders and files

NameName
Last commit message
Last commit date

Latest commit

fda6c1f · Mar 24, 2024

History

40 Commits
Nov 4, 2023
Sep 2, 2023
Nov 4, 2023
Sep 2, 2023
Mar 24, 2024
Nov 2, 2023
Nov 24, 2023
Nov 24, 2023
Mar 24, 2024
Nov 2, 2023
Mar 24, 2024
Sep 17, 2023
Jun 10, 2023
Sep 2, 2023
Sep 2, 2023
Nov 4, 2023
Mar 24, 2024
Mar 24, 2024
Oct 25, 2023

Repository files navigation

rscheduler:hiplot任务调度优化解决方案

简介

rscheduler本质为在hiplotlib之上搭建的一个R语言会话层,进行多会话的任务调度,提供会话管理功能,替代原有的plumber+pm2的调度方案

工作流由原先的 前端提交任务->后端处理->plmber执行 改为前端提交任务->后端处理->消息队列<-rscheduler拉取任务->hicli执行 ,引入的消息队列解耦了后端逻辑与任务调度与执行逻辑,使hiplotlib得以水平拓展,大大提高任务处理效率,并且通过拉模式主动从消息队列中消费任务,可根据自身状态动态调整拉取任务数量,一定程度上防止了CPU负载过高和内存溢出

QuickStart

  1. 本地需要有部署rabbitMQ并在config/config.yaml中配置好url
  2. go run main.go启动rscheduler
  3. 配置并运行mq/rabbitmq_test.go模拟新任务的产生
  4. 查看结果及日志

代码实现

rscheduler代码实现中,有三个核心概念,schedulerprocessortask

  • scheduler为调度器,用于管理多个processor,执行创建、销毁、复用会话等操作,管理全局的内存和CPU使用率

  • processor为处理器,对应一个R会话,实现会话创建、销毁、健康检查等功能,运行时唯一绑定一个task执行任务

  • task为任务,解析消息队列拉取来数据并封装为task

除此之外还有rslog日志功能及monitor进程信息监控功能等

配置项

rscheduler的配置项从三个维度出发,分别对应上面的三个核心概念

  • scheduler支持配置maxCPU允许创建新任务的最大CPU使用率和maxMem允许创建新任务的最大内存使用率,在达到最大内存使用率时,会自动触发schedulergc功能清除空闲的processor。另外还支持配置maxBusyProcessor最大繁忙处理器数量maxIdleProcessor最大空闲处理器数量

  • pocessor支持配置maxBusyProcessorMem繁忙处理器最大内存使用量maxIdleProcessorMem空闲处理器最大内存使用量,自动杀死超限任务,防止大型任务占用服务器所有资源,并且避免了会话长期复用累积的内存消耗问题

  • task支持配置taskTimeout任务超时时间,防止任务异常阻塞等情况的发生

已实现功能

上述配置项中提到的功能均已实现,除此之外还支持的功能有

  • task运行时CPU使用率和内存消耗统计
  • 不同种类任务的会话分离(目前由于hiplot支持的任务种类较多,迁移困难,所以统一定义为common通用,commonInit.Rplumber执行函数迁移而来)
  • processor健康检查(防止R会话异常退出无回调的情况)

待实现功能

  • 监控看板
  • docker一键部署
  • 任务执行失败的重试机制
  • 用户自定义是否保留会话的相关机制
  • 多服务之间的负载均衡及状态共享

其他信息

详情请查阅 语雀文档rscheduler,内容包括架构设计及代码设计的一些细节信息

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published