skynet框架:量级可控的定时任务管理模块

存在业务玩法,在单个场景内大量使用定时事件用于触发数据更新。

skynet的定时器模块实现已经非常高效,一般不必太担心性能问题,事实上玩法的初版实现正是直接使用框架定时器处理触发。几个方面是期望做得更好的:

  1. 减少外部消息。框架的定时事件是通过消息机制通知到指定service的,而单位时间内能处理的外部消息数量是有限的;
  2. 支持取消定时事件。
  3. 按业务区分定时事件,以支持业务数据分析和阈值告警;

这里讨论一个优化方案;
业务层实现一个定时任务管理模块(crontab),支持业务玩法注册通知任务,使用框架timeout驱动,定时通知crontab进行处理,单次通知消费完所有timeout任务(当前帧)。模块实现:

  1. 单service只使用唯一的skynet.timeout驱动,确保框架定时器消息在单位时间内量级可控;
  2. 模块对象需要是单例(singleton);
  3. 支持业务向模块注册/暂停/取消定时任务;
  4. 单次定时通知处理的任务数量支持阈值告警,这里将量级评估交给业务层负责;
  5. 高可用设计,比如任务执行中trackback、单帧处理任务数量overload、任务回调函数热更等情况需要保证模块稳定且有效
posted @ 2024-03-23 14:09  linxx-  阅读(48)  评论(0编辑  收藏  举报