Load balancer between nodes.
You can install the latest version via Composer:
composer require orangesoft/throttler
This package requires PHP 8.1 or later.
Configure Throttler as below:
<?php
use Orangesoft\Throttler\Collection\Node;
use Orangesoft\Throttler\Collection\Collection;
use Orangesoft\Throttler\Strategy\WeightedRoundRobinStrategy;
use Orangesoft\Throttler\Strategy\InMemoryCounter;
use Orangesoft\Throttler\Throttler;
$throttler = new Throttler(
new WeightedRoundRobinStrategy(
new InMemoryCounter(start: 0),
)
);
$collection = new Collection([
new Node('node1', 5),
new Node('node2', 1),
new Node('node3', 1),
]);
while (true) {
/** @var Node $node */
$node = $throttler->pick($collection);
// ...
}
Set weight for Node as the second argument in constructor if you are using weighted-strategies.
Run composer phpbench
to check out benchmarks:
+-------------------------------+------+-----+----------+----------+----------+---------+
| benchmark | revs | its | mean | best | worst | stdev |
+-------------------------------+------+-----+----------+----------+----------+---------+
| FrequencyRandomBench | 1000 | 5 | 6.074μs | 5.924μs | 6.242μs | 0.139μs |
| RandomBench | 1000 | 5 | 4.002μs | 3.880μs | 4.097μs | 0.073μs |
| RoundRobinBench | 1000 | 5 | 4.060μs | 3.888μs | 4.363μs | 0.171μs |
| SmoothWeightedRoundRobinBench | 1000 | 5 | 6.888μs | 6.707μs | 7.102μs | 0.130μs |
| WeightedRandomBench | 1000 | 5 | 11.660μs | 11.533μs | 11.797μs | 0.094μs |
| WeightedRoundRobinBench | 1000 | 5 | 10.778μs | 10.655μs | 10.919μs | 0.115μs |
+-------------------------------+------+-----+----------+----------+----------+---------+
The report is based on measuring the speed. Check best
column to find out which strategy is the fastest. You can see that the fastest strategies are Random and RoundRobin.
- Configure Throttler
- Available strategies
- Sort nodes
- Keep counter
- Serialize strategies
- Dynamically change strategy
- Balance cluster
Read more about usage on Orangesoft Tech.