Gearman与Redis在编写PHP批处理程序时的对比



在用PHP编写批处理程序时(如中所示,它显然必须经过cron-ed),使用Gearman和简单地将要处理的数据存储在Redis中有什么实际区别?

到目前为止,我的观察结果是,虽然Gearman能够实时推动工作,因为PHP代码只会间隔运行,但在Redis中使用定期调度的命令似乎或多或少是等效的。

此外,使用Gearman似乎通过将应用程序绑定到Gearman库的调度生命周期,给应用程序增加了不必要的复杂性。

所有这些都说明了,假设Gearman+PHP与Redis+PHP相比没有任何好处,那么考虑到批处理程序不会持续运行,这是正确的吗?

Gearman是分布式作业服务器,Redis是分布式存储。所以这有点像把苹果比作桔子。

现在,可以用Redis实现类似Gearman的功能(例如基于列表数据类型),但这是一种自己动手的方法。原则很简单,但细节是魔鬼。

最好的Redis分布式队列实现是Ruby(Resque)和Python(Celery,RQ)。PHP有一个Resque端口:

https://github.com/chrisboulton/php-resque

将Gearman与基于Redis的实现进行比较时,需要考虑以下几点:

  • Gearman作业将其完成通知给客户端,可以是同步的,也可以是异步的。如果您没有实现特定的东西,Redis队列将只支持异步作业,而不支持完成通知。

  • 经纪人的高可用性。Gearman提出了一个现成的战略。Redis没有。虽然您可以配置主从复制,并使用Redis Sentinel,但Redis HA并不是一个简单的问题。

  • 持久性。Gearman支持内存中的队列,但也支持一些持久的后端(MySQL、Drizle、sqlite、PostgreSQL)。Redis提出了各种持久性选项,但都不如MySQL或PostgreSQL这样的事务引擎可靠。

  • 垂直可扩展性。虽然Redis非常高效,但它是一个单线程进程。Gearmand是一个多线程进程,可能可以更好地扩展(考虑单个进程)。

实现一个基于Redis的分布式作业系统既有趣又有趣,但如果你需要快速工作,Gearman是你的最佳选择。

除了Didier的答案外,Gearman还可以提供合并功能,例如,如果一群客户在工人完成工作之前都提出了相同的请求,它可以将工作的响应发送回所有客户。

来自维基百科:

Gearman对客户发送的工作进行合并。如果两个或多个客户端要求在同一个工作体上完成工作,无论是通过查看正在发送的相同块,还是通过使用客户端发送的唯一值,它都会合并工作,以便只使用一个工作程序。它这样做是为了避免闪电群问题,这在缓存命中失败中很常见

在Redis中实现这一点要复杂得多。

相关内容

  • 没有找到相关文章

最新更新