sentinel 限流、熔断、降级

限流:为了用户体验,当流量超过了服务自身范围,拒绝超出的流量访问

熔断:系统在设计之初就把熔断措施考虑进去。当系统出现问题时,如果短时间内无法修复,系统要自动做出判断,开启熔断开关,拒绝流量访问,避免大流量对后端的过载请求。

降级:将系统的所有功能服务进行一个分级,当系统出现问题需要紧急限流时,可将不是那么重要的功能进行降级处理,停止服务,这样可以释放出更多的资源供给核心功能的去用。

官方文档

 example

package main

import (
    "fmt"
    sentinel "github.com/alibaba/sentinel-golang/api"
    "github.com/alibaba/sentinel-golang/core/base"
    "github.com/alibaba/sentinel-golang/core/flow"
)

func main() {
    // 初始化 sentinel
    err := sentinel.InitDefault()
    if err != nil {
        panic(err)
    }

    // 配置限流规则
    _,err = flow.LoadRules([]*flow.Rule{
        {
            Resource:               "some-test",
            Threshold:              10, // 10 个请求
            StatIntervalInMs: 1000, // 1 秒之内
            TokenCalculateStrategy: flow.Direct, // 规定时间内,只能有多少请求
            ControlBehavior:        flow.Reject, // 超出的流量全部拒绝
        },
    })
    if err != nil {
        panic(err)
    }

    // 循环接收请求
    for i := 0; i < 13; i++ {
        e,b := sentinel.Entry("some-test",sentinel.WithTrafficType(base.Inbound))
        if b != nil {
            fmt.Println("限流了")
        } else {
            fmt.Println("正常通过")
            e.Exit()
        }
    }
}

 

posted @ 2022-05-11 23:29  JaydenQiu  阅读(140)  评论(0)    收藏  举报