Packages

class NackAdmissionFilter[Req, Rep] extends SimpleFilter[Req, Rep]

This filter probabilistically drops requests if the nack rate exceeds the nackRateThreshold. In the case that most or all of the cluster which the client is speaking to is overloaded, this will help the cluster cool off.

The implementation of this filter is heavily inspired by Chapter 21, section "Client-Side Throttling" of O'Reilly's "Site Reliability Engineering: How Google Runs Production Systems", by Beyer, Jones, Petoff, and Murphy, 1e.

NOTE: Here is a brief summary of the configurable params.

A configuration with a nackRateThreshold of N% and a window of duration W roughly translates as, "start dropping some requests to the cluster when the nack rate averages at least N% over a window of duration W."

Here are some examples of situations with param values chosen to make the filter useful:

- Owners of Service A examine their service's nack rate over several days and find that it is almost always under 10% and rarely above 1% (e.g., during traffic spikes) or 5% (e.g., during a data center outage). They do not want to preemptively drop requests unless the cluster sees an extreme overload situation so they choose a nack rate threshold of 20%. And in such a situation they want the filter to act relatively quickly, so they choose a window of 30 seconds.

- Owners of Service B observe that excess load typically causes peak nack rates of around 25% for up to 60 seconds. They want to be aggressive about avoiding cluster overload and don’t mind dropping some innocent requests during mild load so they choose a window of 10 seconds and a threshold of 0.15 (= 15%).

Linear Supertypes
SimpleFilter[Req, Rep], Filter[Req, Rep, Req, Rep], (Req, Service[Req, Rep]) => Future[Rep], AnyRef, Any
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. NackAdmissionFilter
  2. SimpleFilter
  3. Filter
  4. Function2
  5. AnyRef
  6. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. Protected

Instance Constructors

  1. new NackAdmissionFilter(window: Duration, nackRateThreshold: Double, random: Rng, statsReceiver: StatsReceiver)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##: Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. def agnosticAndThen(next: TypeAgnostic): Filter[Req, Rep, Req, Rep]

    Convert the Filter.TypeAgnostic filter to a Filter and chain it with andThen.

    Convert the Filter.TypeAgnostic filter to a Filter and chain it with andThen.

    Definition Classes
    Filter
  5. def andThen(factory: ServiceFactory[Req, Rep]): ServiceFactory[Req, Rep]

    Terminates a filter chain in a ServiceFactory.

    Terminates a filter chain in a ServiceFactory. For example,

    myFilter.andThen(myServiceFactory)
    factory

    a service factory that takes the output request type and the input response type.

    Definition Classes
    Filter
  6. def andThen(service: Service[Req, Rep]): Service[Req, Rep]

    Terminates a filter chain in a Service.

    Terminates a filter chain in a Service. For example,

    myFilter.andThen(myService)
    service

    a service that takes the output request type and the input response type.

    Definition Classes
    Filter
  7. def andThen[Req2, Rep2](next: Filter[Req, Rep, Req2, Rep2]): Filter[Req, Rep, Req2, Rep2]

    Chains a series of filters together:

    Chains a series of filters together:

    myModularService = handleExceptions.andThen(thrift2Pojo.andThen(parseString))
    next

    another filter to follow after this one

    Definition Classes
    Filter
    Note

    synchronously thrown exceptions in the underlying service are automatically lifted into Future.exception.

  8. def andThenIf[Req2 >: Req, Rep2 <: Rep](condAndFilter: (Boolean, Filter[Req, Rep, Req2, Rep2])): Filter[Req, Rep, Req2, Rep2]

    Conditionally propagates requests down the filter chain.

    Conditionally propagates requests down the filter chain. This may be useful if you are statically wiring together filter chains based on a configuration file, for instance.

    condAndFilter

    a tuple of boolean and filter.

    Definition Classes
    Filter
  9. def andThenIf[Req2 >: Req, Rep2 <: Rep](conditional: Boolean, filter: Filter[Req, Rep, Req2, Rep2]): Filter[Req, Rep, Req2, Rep2]

    Conditionally propagates requests down the filter chain.

    Conditionally propagates requests down the filter chain. This may be useful if you are statically wiring together filter chains based on a configuration file, for instance.

    conditional

    a boolean value indicating whether the filter should be included in the filter chain.

    filter

    the filter to be conditionally included.

    Definition Classes
    Filter
  10. def apply(req: Req, service: Service[Req, Rep]): Future[Rep]

    This is the method to override/implement to create your own Filter.

    This is the method to override/implement to create your own Filter.

    service

    a service that takes the output request type and the input response type

    Definition Classes
    NackAdmissionFilterFilter → Function2
  11. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  12. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.CloneNotSupportedException]) @native()
  13. def curried: (Req) => (Service[Req, Rep]) => Future[Rep]
    Definition Classes
    Function2
    Annotations
    @unspecialized()
  14. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  15. def equals(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef → Any
  16. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.Throwable])
  17. final def getClass(): Class[_ <: AnyRef]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  18. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  19. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  20. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  21. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  22. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  23. final def synchronized[T0](arg0: => T0): T0
    Definition Classes
    AnyRef
  24. def toString(): String
    Definition Classes
    Filter → Function2 → AnyRef → Any
  25. def tupled: ((Req, Service[Req, Rep])) => Future[Rep]
    Definition Classes
    Function2
    Annotations
    @unspecialized()
  26. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  27. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException])
  28. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws(classOf[java.lang.InterruptedException]) @native()

Inherited from SimpleFilter[Req, Rep]

Inherited from Filter[Req, Rep, Req, Rep]

Inherited from (Req, Service[Req, Rep]) => Future[Rep]

Inherited from AnyRef

Inherited from Any

Ungrouped