你好,欢迎来到世铝网 [请登录] [免费注册]
世铝网 铝业设备
您当前的位置: 世铝网 铝业设备 其它 BG1.5 1

BG1.5

加入收藏 举报
详细信息

BG1.5

BG1.5及时交付

若同一时间点有大量任务需要处理,如果采用串行发布至事件中心,则仍可能导致任务的回调通知不及时。这里自然而然想到采用多线程/多协程的方式并发处理。在本系统中,我们使用到了微信的BatchTask库,BatchTask是这样一个库,它把每一个需要并发执行的RPC任务封装成一个函数闭包(返回值+执行函数+参数),然后调度协程(BatchTask的底层协程为libco)去执行这些任务。对于已有的同步函数,可以很方便的通过BatchTask的Api去实现任务的批量执行。Daemon将发布事件的任务提交到BatchTask创建的线程池+协程池(线程和协程数可以根据参数调整)中,充分利用流水线和并发,可以将任务List处理的整体时延大大缩短,尽大努力及时通知业务方。

任务过期删除

从节省存储资源考虑,任务通知业务成功后应当删除。但删除应该是一个异步的过程,因为还需要保留一段时间方便查询日志等。这种情况,通常的实现方式是启动一个Daemon异步删除已完成的任务。我们系统中,是利用了tablekv的自动删除机制,回调通知业务完成后,除了设置任务状态为完成外,同时通过tablekv的update接口设置kv的过期时间为1个月,避免了异步Daemon扫表删除任务,简化了实现。

其他风险项

1.由于time_pointer的CurrentTime初始值置为运行的Daemon实例的机器时间,而每次轮询时都会对比当前Daemon实例的机器时间与CurrentTime的差别,故机器时间出错可能会影响任务的正常调度。这里考虑到现网机器均有时间校正脚本在跑,这个问题基本可以忽略。

2.本系统的架构对事件中心构成了强依赖。定时器的可用性和可靠性依赖于事件中心的可用性和可靠性。虽然目前事件中心的可用性和可靠性都非常高,但如果要考虑所有异常情况,则事件中心的短暂不可用、或者对于订阅者消息出队的延迟和堆积,都是需要正视的问题。一个解决方案是使用MQ做双链路的消息投递,解决对于事件中心单点依赖的问题。

BG1.5

联系方式
  • 联系人: 欧阳 先生
  • 职位: 销售
  • 真: 0592-5917519
  • 电话: 0592-5709821
  • 手机: 18030229050
  • 址: 福建省 厦门市 厦门市海沧区沧湖东一里502号702室之一
公司简介
供应商其他供应信息
还没找到合适的产品?
  • 01
  • 快速发布求购信息
  • 下一步
  • 03
  • 联系cnal客服:
  • 致电: 0371-63388900
    马上启动您的快速采购通道!