revenue in subscription-based businesses. • Can use integrate Scalebase into their services using our APIs. ΞϧϓͰ4DBMFCBTFͱ͍͏αϒεΫϦϓγϣϯϏδωεͷͨΊͷαʔϏεΛఏڙ͠ ͍ͯ·͢ɻ"1*ͷఏڙ։࢝͠·ͨ͠ʂ
from overuse or burst. • Security: Protect from malicious attacks. • Monetization: Control the amount of req/ res through monetized APIs. ϨʔτϦϛοτΛ͏ϞνϕʔγϣϯʹɺύϑΥʔϚϯεɺηΩϡϦςΟɺϚωλ Πθʔγϣϯͱ͍ͬͨจ຺͕͋Δ͔ɻ
usecase infrastructure domain more complexity rate limit multiple executions cost: 2 cost: 1 cost: 1 apply cost: 3? or need tiers? 1. per client IP address 2. per user multiple costs reconcile inconsistencies . NEW!
constant drip out. • Over fl ow when the average water injection rate exceeds the drip out rate. drip request A: request B: request C: leaky bucket burst full?
constant drip out. • Over fl ow when the average water injection rate exceeds the drip out rate. drip request A: request B: request C: leaky bucket burst full?
is a leaky bucket scheduling algorithm. • Convert bucket size and current capacity to time- based leaky bucket. Update: Reject: Params: TATn+1 = { ta + q * T (n = 0) TATn + q * T (otherwise) TATn+1 − (τ + T) ≥ ta : time of request : leak interval : time capacity of bucket ( size) ta T τ = T * : number of cells : burst capacity q τ + T
leaky bucket scheduling algorithm. • Convert bucket size and current capacity to time- based leaky bucket. Update: Reject: Params: TATn+1 = { ta + q * T (n = 0) TATn + q * T (otherwise) TATn+1 − (τ + T) ≥ ta : time of request : leak interval : time capacity of bucket ( size) ta T τ = T * : number of cells : burst capacity q τ + T
( ). • Without dripping process. • Can be implemented using only the SETEX (= SET and EXPIRE) command provided by Redis. TATn Update: Reject: Params: TATn+1 = { ta + q * T (n = 0) TATn + q * T (otherwise) TATn+1 − (τ + T) ≥ ta : time of request : leak interval : time capacity of bucket ( size) ta T τ = T * : number of cells : burst capacity q τ + T GCRA
( ). • Without dripping process. • Can be implemented using only the SETEX (= SET and EXPIRE) command provided by Redis. TATn Update: Reject: Params: TATn+1 = { ta + q * T (n = 0) TATn + q * T (otherwise) TATn+1 − (τ + T) ≥ ta : time of request : leak interval : time capacity of bucket ( size) ta T τ = T * : number of cells : burst capacity q τ + T GCRA
by introducing the "Throttling" effect. • By switching the implementation of the interpreter, it is possible to adopt different algorithms as well. • Removing `<< throttle[R]` makes it easy to disable rate limiting without implementing a no-op interpreter. .