0

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

通过 key-hash 进行分片(分区)非常简单、可扩展且易于维护。我们目前无法访问 Redis 集群。因此,我们要满足两个要求:

  • 通过配置文件将 Redis 服务器列表传递给 Hangfire。
  • 让任何给定的密钥可预测地转到任一服务器(类似于 Memcached)

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

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

我意识到 Twemproxy 等第三方组件有助于解决这些问题,但由于密钥散列方法非常简单,我想我会在实施 Twemproxy 之前用尽这条途径。

谢谢!

4

1 回答 1

0

您对 Hangfire 的两个部分的判断是正确的:引擎对存储一无所知,反之亦然。

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

当 Hangfire 启动时,它会启动与配置一样多的线程(Worker number)。然后每个 Worker 向存储询问是否有要处理的作业,将它们移动到处理状态。该操作必须使用某种锁定机制进行。

如何实现这个锁取决于存储本身,我相信在 SQL Server 上存储使用 UPDATE MERGE SQL 语句,而官方 Redis 版本使用阻塞命令(BRPOPLPUSH 等),而其他像我的一样,利用 Redis 发布-订阅机制.

根据您的要求,我可以谈谈Redis实现

  • Redis 服务器的列表通过 Storage Connection 字符串传递给存储,如"redis0:6380,redis1:6380,allowAdmin=true"(详见此页
  • 据我所知,Redis 客户端支持 Redis 集群,它可以对密钥进行分片并让客户端连接到正确的 Redis 实例

我在生产中使用带有 Redis 的复制 Hangfire 服务器,但我只使用 Redis 主从故障转移,而不是 Redis Cluster

于 2015-06-24T08:14:08.890 回答