wizory/llock

该软件包最新版本(2.0.0-rc.1)没有可用的许可证信息。

Laravel 共享锁定插件

2.0.0-rc.1 2022-11-01 22:10 UTC

This package is auto-updated.

Last update: 2024-09-04 22:18:28 UTC


README

[在此处插入骆驼图片]

此插件添加了一套 artisan 命令,用于设置和释放共享命名锁。当前主要用例是与 Laravel forge 一起使用多个负载均衡服务器。

通过此插件提供的锁定功能包括:

串行部署 Web 实例

使用 --wait 模式允许每个 Web 实例根据谁拥有锁的顺序进行部署。随着每个部署的完成,锁将释放,以便下一个可以获取它。这确保了始终至少有一个实例在运行并提供服务。

所有实例上相同的计划任务(无重复运行)

可以在所有 Web 实例上配置计划任务的运行,但只有获得锁的那个实例会执行任务。这允许更容错的设计,因为任何 Web 实例都可以丢失,而计划任务(计划任务)将继续运行(但如果有多个实例“运行”,则不会重复运行)。

设置/安装

此插件旨在与现有的 Laravel 5.1 LTS(长期支持)站点/应用程序一起使用。添加插件的步骤如下。

将 GitHub 仓库添加到 composer.json

这允许 composer 直接从 GitHub 获取软件包依赖项。一旦插件正式“发布”,此步骤将变得不必要。

更新您的 composer.json 文件,添加一个新的 repositories 元素(通常放置在 require 块之前)

"repositories": [
  {
    "type": "vcs",
    "url": "git@github.com:wizory/llock.git"
  }
],

将插件依赖项添加到 composer.json

现在将插件依赖项添加到现有的 require

"require": {
  ...,
  "wizory/llock": "dev-master"
},

require 部分指定的 wizory/llock 版本引用了存储库的 master 分支。

发布后,示例将更新为指向发布版本。

更新 composer

现在运行 composer update 以获取 llock 及其依赖项。

注册 llock 服务提供者

将以下行添加到 config/app.php 中的 providers 数组

Wizory\Llock\LlockServiceProvider::class,

运行安装程序

此命令将安装插件正常运行所需的示例配置和迁移(迁移)

php artisan llock:install

新添加的文件应提交到您的项目。

注意: 此命令将运行迁移。如果您有任何待处理的迁移,请在运行安装之前解决它们。

用法

此时,您应该能够运行 php artisan llock:status 并获得一些输出。您也可以通过传递 -h 到任何命令来获取用法详细信息。

php artisan llock:status

显示任何当前锁的状态。

php artisan llock:set <name>

设置名为 <name> 的锁。传递 --wait 将等待可配置的时间以获取已存在同名锁的命名锁。插件将定期尝试获取锁(也可配置)。

此命令的返回代码为 0(true)表示获取了锁,否则为 1(false)。返回代码为 2(也代表 false)表示错误(例如数据库连接)。

php artisan llock:free <name>

释放名为 <name> 的锁。

无论是否释放了锁,此命令的返回码都是 0,出错时为 2。

示例

确保跨多个站点实例的顺序部署

将类似以下内容添加到您的部署脚本/代码中

LOCKNAME=mysite

php artisan llock:set --wait ${LOCKNAME}  # command will not return until a lock is obtained or the timeout is reached

# deploy steps here....

php artisan llock:free ${LOCKNAME}

此示例主要假设“顺利的情况”。您可能需要检测返回码,在超时或其他错误发生前失败(在部署前)。

确保计划任务在多个站点实例中只运行一次

为您的 CRON/调度器条目使用类似以下内容

php artisan llock:set mysite && php artisan schedule:run; php artisan llock:free mysite

# or the mostly equivalent

if php artisan llock:set mysite; then php artisan run; fi; php artisan llock:free mysite

同样,此示例没有明确处理可能出现的各种错误情况。这个(方便的)单行命令可能会变得复杂,因此您可能希望从您的调度器中调用一个中间脚本。

更新

要更新到 llock 的新版本,请按照以下步骤操作

composer update wizory/llock
php artisan llock:install

之后提交任何新更改的文件。

安全性

这里假设了信任,因为任何“客户端”都可以释放任何其他客户端创建的锁。这在不受信任的环境中不是一种有用的锁定实现。

以下内容为草案

以下文档等内容都是工作进行中(WIP),将根据具体情况修订、组织,并移至上方部分。

运行测试

  1. 设置以上内容后,登录到您的 vagrant 机器,切换到站点目录并运行
vendor/bin/phpunit

如果您想获得彩色输出,请使用 --colors 标志。

您应该会看到大量的测试运行并通过。 :)

路线图

随着 Laravel 更新 LTS 标识到新版本,如果引入任何破坏性更改,此插件将更新以与之兼容。

贡献

待办事项:提供有关开发设置和贡献的进一步说明。

注意:对于在 llock 包本身上进行的本地开发,请使用以下内容(根据需要更改相对路径到 llock 包)

"repositories": [
    {
        "type": "path",
        "url": "../llock"
    }
],
"require": {
  ...,
  "wizory/llock": "*@dev"
},