将Hangfire与Redis一起使用,是否可以通过密钥哈希将作业分区到各种Redis服务器?

时间:2015-06-18 15:32:31

标签: hangfire

我们目前正在使用Hangfire和MSSQL,并希望通过迁移到Redis来提高我们的任务吞吐量。

通过密钥哈希进行分片(分区)非常简单,可扩展且易于维护。我们目前无法访问Redis群集。因此,我们有两个要求:

  • 列出通过配置文件传入Hangfire的Redis服务器。
  • 让任何给定的密钥以可预测的方式转到任一服务器(类似于Memcached)

这样我们就可以在' n'之间分配任意数量的工作。 Redis服务器的数量。

我意识到Hangfire有两个部分:存储和作业。我很好奇这两个组件如何在Redis分片环境中工作。

我意识到像Twemproxy这样的第三方组件有助于解决这些问题,但由于密钥散列方法非常直接,我认为在实施Twemproxy之前我已经耗尽了这条路径。

谢谢!

1 个答案:

答案 0 :(得分:0)

你能够辨别出Hangfire的两个部分:引擎对存储一无所知,反之亦然。

使用锁定机制从存储中获取作业:

当Hangfire启动时,它会按配置启动尽可能多的线程(工作人员编号)。如果有待处理的作业,则每个工作人员向存储器询问,将它们移动到处理状态。必须使用某种锁定机制进行操作。

这个锁是如何实现的取决于存储本身,我相信在SQL Server上存储使用UPDATE MERGE SQL语句,而官方Redis版本使用阻塞命令(BRPOPLPUSH和alikes)而其他人喜欢我的,使用Redis Publish - 订阅机制。

根据您的要求,我可以谈论that Redis实施

  • Redis服务器列表通过存储连接字符串传递到存储,如"redis0:6380,redis1:6380,allowAdmin=true"(有关详细信息,请参阅this page
  • 据我所知Redis客户端supports Redis Cluster,它可以分割密钥并让客户端连接到正确的Redis实例

我正在使用Redis生产的复制Hangfire服务器,但我只使用Redis主从故障转移,而不是使用Redis群集