github.com/songzhibin97/gkit@v1.2.13/restrictor/client_throttling/client_throttling.go (about)

     1  package client_throttling
     2  
     3  import "github.com/songzhibin97/gkit/tools/float"
     4  
     5  // 客户端节流算法
     6  // google sre p330
     7  
     8  var DefaultK = 2.0
     9  
    10  // RejectionProbability 客户端节流算法
    11  // requests 请求数量 应用层代码发出的所有请求的数量总计(指运行于自适应节流系统之上的应用代码
    12  // accepts 请求接受数量 后端任务接受的请求数量
    13  // k 倍值 降低倍值会使自适应节流算法更加激进
    14  // 举例来说,假设将客户端请求的上限从request=2 * accepts调整为request=1.1* accepts,那么就意味着每10个后端请求之中只有1个会被拒绝
    15  func RejectionProbability(requests int, accepts int, k float64) float64 {
    16  	return max(0, float.TruncFloat((float64(requests)-k*float64(accepts))/float64(requests+1), 2))
    17  }
    18  
    19  func max(a, b float64) float64 {
    20  	if a > b {
    21  		return a
    22  	}
    23  	return b
    24  }