Skip to content

Latest commit

 

History

History
34 lines (27 loc) · 1.15 KB

README.md

File metadata and controls

34 lines (27 loc) · 1.15 KB

grpc-athrottle

Adaptive throttling for golang gRPC clients

gRPC interceptor that throttles outgoing connections based on trailing accept rate as described in Google SRE Book.

usage

import (
  throttle "github.com/limscoder/grpc-athrottle"
  "google.golang.org/grpc"
)

func connect() {
  opts := throttle.ThrottleOptions{
    // sliding window for the past n minutes, used to calculate throttle ratio
    WindowDuration:  3 * time.Minute,
    // number of requests that must be present within WindowDuration before throttling
    MinRequestCount: 25,
    // ratio of requests/successes that must be met before throttling begins
    // refered to as "K" in the Google SRE book
    MaxRatio:        2.,
    // callback function for counter events,
    // useful for logging throttle events and/or metrics
    Callback:        func(CounterEvent) {},
  }

  conn, err := grpc.Dial(address, grpc.WithInsecure(), grpc.WithUnaryInterceptor(
    throttle.NewClientUnaryInterceptor(&opts)))
}

example usage with event logger: https://github.com/limscoder/kubetastic/blob/master/cmd/randoui/main.go