Ale*_*zzi 9 php gearman batch-processing redis
在用PHP编写批处理器时(例如,它显然必须是cron-ed),使用Gearman和简单地存储要在Redis中处理的数据之间有什么实际区别?
到目前为止,我的观察结果是,虽然Gearman能够实时推动工作,因为PHP代码只是间隔运行,使用Redis的定期调度命令似乎或多或少相当.
此外,似乎使用Gearman通过将其绑定到Gearman库的调度生命周期来为应用程序添加不必要的复杂性.
所有这些都说,假设批处理器不会一直运行,那么认为Gearman + PHP没有提供优于Redis + PHP的好处是正确的吗?
Did*_*zia 18
Gearman是一个分布式作业服务器,Redis是一个分布式商店.所以有点像比较苹果和橙子.
现在,可以使用Redis实现类似Gearman的功能(例如,基于列表数据类型),但它是一种自己动手的方法.虽然原则很简单,但魔鬼却在细节之中.
最好的Redis分布式队列实现适用于Ruby(Resque)和Python(Celery,RQ).有一个Resque for PHP端口:
https://github.com/chrisboulton/php-resque
将Gearman与基于Redis的实现进行比较时,需要考虑以下几点:
Gearman作业将其完成通知给客户端,并且可以是同步的或异步的.如果您没有实现特定的内容,Redis队列将仅支持没有完成通知的异步作业.
经纪人的高可用性.Gearman提出了一种现成的策略.Redis没有.虽然您可以配置主从复制,并使用Redis Sentinel,但Redis HA不是一个简单的问题.
持久性.Gearman支持内存中的队列,但也支持一些持久的后端(MySQL,Drizzle,sqlite,PostgreSQL).Redis提出了各种持久性选项,但它们都不像MySQL或PostgreSQL这样的事务引擎可靠.
垂直可扩展性.虽然Redis非常高效,但它是一个单线程进程.Gearmand是一个多线程进程,可以更好地扩展(考虑单个进程).
实现基于Redis的分布式作业系统既有趣又有趣,但如果您需要快速工作,Gearman是您最好的选择.