sregulator_relative_valve (sbroker v1.1.1)
Implements a valve which increases its size when an update is below a target.
sregulator_relative_value
can be used as the sregulator_valve
in a sregulator
. It will provide a valve that increases in size when an update is below a target valve between the minimum and maximum capacity. Its argument, spec()
, is of the form: #{target => Target :: integer(), % default: 100
min => Min :: non_neg_integer(), % default: 0
max => Max :: non_neg_integer() | infinity} % default: infinity
Target
is the target relative value in milliseconds (defaults to 100
). The valve will open when an update below the target (in native
time units) is received if between the the minimum, Min
(defaults to 0
), and the maximum, Max
(defaults to infinity
). Once opened by an update the valve remains open until the concurrency level increases by 1 or an update greater than the target is received. The valve is always open when below the minimum and always closed once it reaches the maximum.
This valve tries to enforce a minimum level of concurrency and will grow while a relevant sbroker_queue
is moving quickly - up to a maximum. Therefore this valve expects the updates to be from a sregulator_update_meter
.
By using a positive target RelativeTime
of an sbroker
queue, a pool of workers can grow before the queue is empty. Therefore preventing or delaying the situation where the counter party client processes have to wait for a worker.
RelativeTime
of an sbroker
queue, a pool of expensive resources can delay growth until required.
Link to this section Summary
Link to this section Types
spec/0
Specs
spec() :: #{target => Target :: integer(), min => Min :: non_neg_integer(), max => Max :: non_neg_integer() | infinity}.