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.

By using a negative target 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

Specs

spec() ::
    #{target => Target :: integer(),
      min => Min :: non_neg_integer(),
      max => Max :: non_neg_integer() | infinity}.