建设厅网站账户名忘记了怎么办,如何设计校园网站,东莞市交易中心网,静安企业网站制作1. 限流
限流#xff0c;顾名思义#xff0c;限制用户请求流量#xff0c;避免大规模并发导致系统宕机。
2. 令牌桶算法
令牌管理员以恒定的速率向令牌桶里放置一个令牌。如果桶满#xff0c;就丢弃令牌。 请求到达时#xff0c;都要先去令牌桶里取一个令牌#xff0c…1. 限流
限流顾名思义限制用户请求流量避免大规模并发导致系统宕机。
2. 令牌桶算法
令牌管理员以恒定的速率向令牌桶里放置一个令牌。如果桶满就丢弃令牌。 请求到达时都要先去令牌桶里取一个令牌如果取到令牌则进行后续业务逻辑操作否则直接返回。
3. Go简单实现
package mainimport (fmttime
)const (rate 2 // 限制令牌发送速率capacity 1024 // 令牌桶的容量reqNum 10 // 并发到达的请求数
)func main() {bucket : make(chan struct{}, capacity)go func() {ticker : time.NewTicker(time.Second / rate) // tpsratedefer ticker.Stop()for range ticker.C {select {case bucket - struct{}{}: // 令牌桶未满default: // 令牌桶已满}}}()for i : 0; i reqNum; i {go func(i int) {for {select {case -bucket: // 获取令牌fmt.Printf([%d]: get a token, perform subsequent service processing\n, i)default:}}}(i)}select {}
}