yuzd / Hangfire.HttpJob

httpjob for Hangfire,restful api for Hangfire,job调度与业务分离
https://github.com/yuzd/Hangfire.HttpJob/wiki
MIT License
626 stars 185 forks source link

关于IHangfireConsole写入问题的一点小疑问 #88

Closed Inuyasha-Monster closed 3 years ago

Inuyasha-Monster commented 3 years ago

首先感谢作者的开源作品和努力 , 我就看到的源代码master分支提出一些疑惑哈 !

  1. 首先看到httpjob当中的方法:SendHeartbeat来心跳检查的同时下发stroageString
  2. agent通过下发的stroageString来直接操作对应的db( 例如:redis ,mysql...etc )
  3. 通过对应IHangfireStorage接口的实现类的AddToSet直接写入db当中

疑问:

  1. agent是否可以做到不直接操作db来实现此功能呢?例如同样采取上报job执行信息或者进度信息?
  2. 同样的agent针对写入信息的顺序问题( 也就是页面上面的展示效果 )是有一定的影响?

再次感谢作者的开源作品以及代码上面的贡献 !!!

Inuyasha-Monster commented 3 years ago

第二点补充一下哈 , agent内部使用代码级别lock锁 , 保证了写入的顺序性 , 我是针对db级别的一种业务顺序的疑惑....

yuzd commented 3 years ago

第一个问题:agent是否可以做到不直接操作db来实现此功能呢?例如同样采取上报job执行信息或者进度信息? 起初 hangfire调度端 如果有多个的话也是独自去连接storage的,我起初是把agent耦合在一起的,后来剥离开调度逻辑,只把agent作为纯开发job。 因为我考虑相比http方式的上报 ,agent操作storage会更加高效。

针对这点,你觉得是agent只和调度端进行通信就可以吗。或者你能提出目前这样的一些弊端么。 我们可以讨论讨论如何让他变的更好。

第二个问题:同样的agent针对写入信息的顺序问题( 也就是页面上面的展示效果 )是有一定的影响? 每和jobid去调度到agent的时候会有一个consoleid的。 除非你的job执行过程中并发的去写log。否则是能保证顺序性的。

Inuyasha-Monster commented 3 years ago

弊端 , 倒也不至于 , 其实就是职责归属的问题( 潜意识觉得agent只是代理而已 , 23333 ) , 不过作者先前agent本身隶属server的 , 那就说得通了 , 只是会显得db的写入逻辑分散于各个agent以及它们需要针对db的访问权限 , 关于第二个问题表示理解.

感谢作者这么迅速的回复和耐心的解答

yuzd commented 3 years ago

其实要改造通过http来直连调度端上报也不是很麻烦

Inuyasha-Monster commented 3 years ago

其实要改造通过http来直连调度端上报也不是很麻烦

是滴讷 , 再次感谢作者的回复哈