Laravel Horizon 简介

文章翻译&整理自 Taylor 的 博客文章

Taylor 在今天发布了一个新工具:Laravel Horizon ,它为 Laravel Redis 队列提供了一个漂亮的仪表板和代码驱动的配置系统。此工具完全开源,你可以在 GitHub 上找到它。
此工具需要尚未正式发版的 Laravel 5.5 ,并且其本身也还处于 Beta 状态。

仪表板

file
Horizon 的仪表板是一个 Vue 单页应用,可以使用命令 composer require laravel/horizon 直接安装进已有的应用中。它提供队列工作负载、最近作业、失败作业、作业重试、吞吐量和运行时指标、进程计数的实时显示。
仪表板的身份验证,可以通过 Horizon::auth 注册回调函数来完全控制:

Horizon::auth(function ($request) {
    // return true / false;
});

配置

与 Laravel 的调度程序类似,你所有队列 worker 的配置都在你的代码之中:
file
在代码库中进行此配置意味着这些都将在源代码版本控制之中,使你的团队可以轻松协作。在 config/horizon.php 文件中,我可以配置我想创建多少个进程、队列超时时间,和所有通常我需要传递给 queue:work 命令的设置。
然后,只需一个简单的命令 php artisan horizon 即可启动所有的队列 worker 。不需要其他的命令选项,此命令会读取 Horizon 配置并提供所需要的工作进程。
Horizon 被安装并部署到生产环境中之后,你可以通过修改配置文件并重新部署,来修改 worker 配置。

失败的任务

Horizon 提供了一个清晰、详细的界面来查看和重试失败任务(是的,我们都有失败的任务)。你可以查看任务的异常堆栈、标签、最近重试的任务。将最近重试的任务直接显示在失败的任务详情页上,真的非常棒。因为重试与原始失败的任务相关联,所以你不再需要在终端中盲目的反复尝试 queue:retry 来重启任务,以确定任务成功还是再次失败:
file

标签监控

Horizon 允许你为任务分配标签,包括:邮件、广播、通知和队列监控器。事实上,Horizon 可以根据附加到任务上的 Eloquent 模型,智能地自动分配绝大多数标签。
通过标签,你可以轻松的搜索到你的任务:回顾指定客户的所有任务、或者你应用中其他实体的所有任务。此功能可以让你关注高价值客户:
file

负载平衡

file
Horizon 会根据队列的工作负载自动平衡队列的工作进程。例如,当你的“默认”队列为空,但是“通知”队列被任务填满时。Horizon 可以自动的将备用 worker 分配到“通知“队列中,以帮助快速处理这些任务。
等到队列进度被赶上时,Horizon 会确保所有的进程被公平的重新分配。

性能度量

file
Horizon 提供吞吐量和平均运行时间的图表,允许你查看单个任务或者整个队列的吞吐量和运行时趋势。这些度量快照是使用命令 horizon:snapshot 捕获的,它可以使用 Laravel 内置调度每分钟运行一次,方便你在部署之后快速查找性能下降的原因。

通知

file
当你的队列过满时,Horizon 可以向你发送 SMS 和 Slack 通知。你可以配置等待时间阈值,以确定何时发送通知。这意味着你总是可以清楚的知道,你的队列何时需要更多的 worker 。收到通知之后,Horizon 的代码驱动配置让你可以快速更改配置以添加更多的 worker。

其他

Taylor 在最后感谢了 Horizon 的贡献者: Mohamed SaidDavid HemphillSteve Schoger

本文章首发在 Laravel China 社区

Night gathers, and now my watch begins.