sprotector_server using the
"basic" PIE active queue management using approximate queue sojourn times.
Behaviours: sbroker_meter.
References
See also: sprotector, sprotector_server.
Registers the process with and updates the sprotector_server using the
"basic" PIE active queue management using approximate queue sojourn times.
sprotector_pie_meter can be used as a sbroker_meter in a sbroker or
a sregulator. It will provide a short circuiter that will drop requests
without messaging the broker or regulator with a probability using PIE for
the ask and ask_r queue when the message queue length is approximately
above a minimum and all requests when it is approximately above a maximum.
Its argument, spec(), is of the form:
#{ask => #{target => AskTarget :: non_neg_integer(), % default: 100
interval => AskInterval :: pos_integer()}, % default: 1000
ask_r => #{target => AskRTarget :: non_neg_integer(), % default: 100
interval => AskRInterval :: pos_integer()}, % default: 1000
update => Update :: pos_integer(), % default: 100
min => Min :: non_neg_integer(), % default: 0
max => Max :: non_neg_integer() | infinity}. % default: infinity
AskTarget is the target delay in milliseconds (defaults to 100) for the
ask queue and AskInterval is the initial interval in milliseconds
(defaults to 1000) before the first drop when the process's message queue
is above the minimum size Min (defaults to 0) and below the maximum size
Max (defaults to infinity). `AskRTarget and AskRInterval are equivalent
for the ask_r queue. Update is the interval between updating the drop
probability (defaults to 100).
100 milliseconds or less as
instantaneous, and feels engaged with a system if response times are 1000
milliseconds or less. Therefore it is desirable for a system to respond
within 1000 milliseconds as a worst case (upper percentile response time)
and ideally to respond within 100 milliseconds (target response time). Thus
the default target is 100 milliseconds and the default is interval 1000
milliseconds.
spec() = #{ask => #{target => AskTarget::non_neg_integer(), interval => AskInterval::pos_integer()}, ask_r => #{target => AskRTarget::non_neg_integer(), interval => AskRInterval::pos_integer()}, update => Update::pos_integer(), min => Min::non_neg_integer(), max => Max::non_neg_integer() | infinity}
Generated by EDoc