本期视频登录后即可观看

让系统更美好的队列

队列是所有开发框架和底层系统中都不可或缺的核心功能,有了队列之后,系统的计算资源就可以根据时间进行更合理的分配,避免瞬时大流量和大量计算带来的系统无力承受的负担,之所以采用队列,恰恰是因为大部分的任务对实时性要求并不高,所以,咱们把任务放到队列之后,服务的质量不但没有下降,而且是提高了,另外原本有限的系统资源可能服务于更多的用户,是一种多赢的局面。

Hesunfly 2019.01.08 13:48

站长,能不能讲一下不同的队列驱动之间的区别,以及我们应该如何选择一个适合自己的项目的驱动类型,或某个驱动适合哪些类型的项目呢。期待您的解答!

国营 2019.01.08 14:39

这个我还真不好回答,因为不管选择什么样的队列,处理的逻辑还都是在本地服务器处理的,业务逻辑部分消耗的还是服务器的计算资源。我也没有用过所有的队列驱动,我能建议的是,小项目比如一些展示性的网站或应用,访问量不高,任务不重的话使用数据库的队列系统就能满足要求。redis 驱动的队列足够满足绝大部分项目的需求,在laravel官方没有推出 Horizon 之前,很多人选择使用 Beanstalkd,因为它拥有一个带 UI 的管理界面,也是专业的队列驱动。但是Horizon 推出之后,因为配置简单,官方集成,与 laravel 融合度非常高,UI 管理界面也非常友好,很多人为了管理和维护更方便,就切换到了 redis 驱动。亚马逊的驱动说实话我真的没用过,我了解过,是一个非常专业的队列驱动,管理页面在亚马逊的服务器上,非常友好,但基本都是老外再用,在国内我也不知道它究竟表现如何。另一方面,Laravel 这个框架本身也有自己的限制,并不能覆盖所有的使用场景,对于用户量非常大,任务密集型的项目,有的时候是 Laravel 可能会拖后腿,而不是队列拖后腿(数据库的驱动队列在这种场景下肯定是不选的,数据库频繁读写服务器的压力瞬间就会飙升)。队列驱动通常也不是一步到位的,做项目的时候,可以直接先把redis 驱动用起来,满足不了要求了再更换驱动即可,没有必要在一开始的阶段就把方案彻底定下来。如果项目真的最后成为爆款,项目再版的时候框架的选型都会变,更不要说队列驱动了。

Hesunfly 2019.01.08 14:49

感谢站长的解答,本来还以为今天不会得到回答了!

国营 2019.01.08 14:56

呵呵,我得把孩子收拾的睡了觉才能坐下来,只是一些建议而已,这个问题没有答案,只能随机应变了

Emma 2019.02.13 05:35

可以讲讲rabbitMq吗

国营 2019.02.13 06:06

暂无此计划,使用上都是大同小异的东西,只是 rabbitMQ 知名度成熟度更高而已,对于绝大部分项目来说,redis 队列已经绰绰有余了。集成 rabbitMQ 到 Laravel 项目中也很简单,自己稍微研究下基本就搞定了

微信扫码登录