orangesoft/backoff
Composer 安装命令:
composer require orangesoft/backoff
包简介
Back-off algorithm implementation.
README 文档
README
Back-off algorithm implementation.
Installation
You can install the latest version via Composer:
composer require orangesoft/backoff
This package requires PHP 8.1 or later.
Quick usage
Configure Orangesoft\BackOff\Retry\Retry::class, any of back-off classes, and Orangesoft\BackOff\Retry\ExceptionClassifier\ExceptionClassifier::class to retry a business logic when an exception is thrown:
<?php use Orangesoft\BackOff\ExponentialBackOff; use Orangesoft\BackOff\Duration\Microseconds; use Orangesoft\BackOff\Retry\ExceptionClassifier\ExceptionClassifier; use Orangesoft\BackOff\Retry\Retry; $retry = new Retry( maxAttempts: 3, backOff: new ExponentialBackOff( baseTime: new Microseconds(1_000), capTime: new Microseconds(512_000), factor: 2.0, ), exceptionClassifier: new ExceptionClassifier( classNames: [ \RuntimeException::class, ], ), );
Use the Orangesoft\BackOff\Retry\Retry::call(callable $callback): mixed method to wrap the business logic and call it with retry functionality:
/** @var int $result */ $result = $retry->call(static function (): int { $random = mt_rand(0, 1); if (0 === $random % 2) { throw new \RuntimeException(); } return $random; });
The following back-off strategies are available:
- Orangesoft\BackOff\CallbackBackOff
- Orangesoft\BackOff\ConstantBackOff
- Orangesoft\BackOff\DecorrelatedJitterBackOff
- Orangesoft\BackOff\ExponentialBackOff
- Orangesoft\BackOff\FibonacciBackOff
- Orangesoft\BackOff\LinearBackOff
Enable Jitter
Pass the implementation of Orangesoft\BackOff\Jitter\JitterInterface::class to the back-off class and jitter will be enabled:
<?php use Orangesoft\BackOff\ExponentialBackOff; use Orangesoft\BackOff\Duration\Microseconds; use Orangesoft\BackOff\Jitter\EqualJitter; $backOff = new ExponentialBackOff( baseTime: new Microseconds(1_000), capTime: new Microseconds(512_000), factor: 2.0, jitter: new EqualJitter(), ); for ($i = 1; $i <= 10; $i++) { $backOff->backOff( attempt: $i, ); }
Below you can see the time intervals in microseconds for exponential back-off with a factor of 2.0 and equal jitter, where the base time is 1_000 μs and the cap time is 512_000 μs:
+---------+---------------------------+--------------------+
| attempt | exponential back-off (μs) | equal jitter (μs) |
+---------+---------------------------+--------------------+
| 1 | 1_000 | [0, 1_000] |
| 2 | 2_000 | [1_000, 2_000] |
| 3 | 4_000 | [2_000, 4_000] |
| 4 | 8_000 | [4_000, 8_000] |
| 5 | 16_000 | [8_000, 16_000] |
| 6 | 32_000 | [16_000, 32_000] |
| 7 | 64_000 | [32_000, 64_000] |
| 8 | 128_000 | [64_000, 128_000] |
| 9 | 256_000 | [128_000, 256_000] |
| 10 | 512_000 | [256_000, 512_000] |
+---------+---------------------------+--------------------+
The following jitters are available:
- Orangesoft\BackOff\Jitter\EqualJitter
- Orangesoft\BackOff\Jitter\FullJitter
- Orangesoft\BackOff\Jitter\ScatteredJitter
Read more about Back-Off and Jitter on AWS Architecture Blog.
orangesoft/backoff 适用场景与选型建议
orangesoft/backoff 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 563 次下载、GitHub Stars 达 25, 最近一次更新时间为 2021 年 01 月 30 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「retry」 「backoff」 「duration」 「Jitter」 「sleeper」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 orangesoft/backoff 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 orangesoft/backoff 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 orangesoft/backoff 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Immutable, timezone-aware date and time types with Duration, Period, and Interval
Convert a value in seconds into a human-readable convenience duration
Emulated timeouts for synchronous operations.
Retry tasks that fail due to transient faults
Polling library for conditionally retry operations based on a result checker.
Convert durations into human-readable timestamps.
统计信息
- 总下载量: 563
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 25
- 点击次数: 13
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-01-30