Even if you may not need to extend these main objects of the Throttling, here are the description of the
RateMeasure objects that are used by the rate limit implementations.
Rate interface simply defines a
getTicks() method that should returns a number. The first implementation is the
TimeRate that defines a number of operation in a given time range.
1 2 3 4
use Tolerance\Throttling\Rate\TimeRate; $rate = new TimeRate(60, TimeRate::PER_SECOND) $rate = new TimeRate(1, TimeRate::PER_MINUTE)
The second implementation is the
CounterRate that simply defines a counter. This is mainly used to store a
counter such as in the internals of the Leaky Bucket implementation or when you’ll want to setup a rate limitation
for parallel running processes for instance.
RateMeasure is mainly used in the internals to store a given
Rate at a given time. The only
implementation at the moment is the
What you have to care about is the storage of these rate measures because they need to be stored in order to ensure the coherency or this rate limits, especially when running with concurrent requests.
In memory storage¶
The easiest way to start is to store the rate measures in memory. The major drawback is that in order to ensure your rate limitation you need to have your application running in a single long-running script.
1 2 3
use Tolerance\Throttling\RateMeasureStorage\InMemoryStorage; $storage = new InMemoryStorage();