我们目前正在使用Hangfire和MSSQL,并希望通过迁移到Redis来提高我们的任务吞吐量。
通过密钥哈希进行分片(分区)非常简单,可扩展且易于维护。我们目前无法访问Redis群集。因此,我们有两个要求:
这样我们就可以在' n'之间分配任意数量的工作。 Redis服务器的数量。
我意识到Hangfire有两个部分:存储和作业。我很好奇这两个组件如何在Redis分片环境中工作。
我意识到像Twemproxy这样的第三方组件有助于解决这些问题,但由于密钥散列方法非常直接,我认为在实施Twemproxy之前我已经耗尽了这条路径。
谢谢!
答案 0 :(得分:0)
你能够辨别出Hangfire的两个部分:引擎对存储一无所知,反之亦然。
使用锁定机制从存储中获取作业:
当Hangfire启动时,它会按配置启动尽可能多的线程(工作人员编号)。如果有待处理的作业,则每个工作人员向存储器询问,将它们移动到处理状态。必须使用某种锁定机制进行操作。
这个锁是如何实现的取决于存储本身,我相信在SQL Server上存储使用UPDATE MERGE SQL语句,而官方Redis版本使用阻塞命令(BRPOPLPUSH和alikes)而其他人喜欢我的,使用Redis Publish - 订阅机制。
根据您的要求,我可以谈论that Redis实施
"redis0:6380,redis1:6380,allowAdmin=true"
(有关详细信息,请参阅this page)我正在使用Redis生产的复制Hangfire服务器,但我只使用Redis主从故障转移,而不是使用Redis群集