Slide 24
Slide 24 text
24
実装戦略: ライブラリの実装イメージ
言語によっては、複数のパターンを提供するライブラリがあるのでそれを使うと統制し
やすい(例: Java - Resilience4j)。そうでない言語の場合は複数のライブラリを組
み合わせる必要があり、それらのライブラリをwrapするなどなんらかの一貫性・統制
を確保する手段が必要。以下はGoにおけるコード例
func newConn(addr string) (*grpc.ClientConn,
error) {
retryOpts := []grpc_retry.CallOption{
grpc_retry.WithMax(3),
grpc_retry.WithPerRetryTimeout(500 *
time.Millisecond),
grpc_retry.WithBackoff(
grpc_retry.BackoffExponential(100 *
time.Millisecond)),
grpc_retry.WithCodes(codes.Unavailable,
codes.DeadlineExceeded),
}
...
func New() *gobreaker.CircuitBreaker {
st := gobreaker.Settings{
Name: "downstream-x",
MaxRequests: 5, // half-openで通す試行数
Interval: 30 * time.Second,
Timeout: 10 * time.Second,
ReadyToTrip: func(counts gobreaker.Counts)
bool { ... },
IsSuccessful: func(err error) bool { ...
},
}
return gobreaker.NewCircuitBreaker(st)
}