欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel。

资源埋点

使用 Sentinel 的 Entry API 将业务逻辑封装起来,这一步称为“埋点”。每个埋点都有一个资源名称(resource),代表触发了这个资源的调用或访问。

规则配置

针对埋点资源配置相应的规则,来达到流量控制的效果。目前 Sentinel Golang 支持流控规则 (FlowRule) 和系统保护规则 (SystemRule)。

一个完整的示例

  1. import (
  2. sentinel "github.com/sentinel-group/sentinel-golang/api"
  3. )
  4.  
  5. func main() {
  6. // 务必先进行初始化
  7. err := sentinel.InitDefault()
  8. if err != nil {
  9. log.Fatal(err)
  10. }
  11.  
  12. // 配置一条限流规则
  13. _, err = flow.LoadRules([]*flow.FlowRule{
  14. {
  15. Resource: "some-test",
  16. MetricType: flow.QPS,
  17. Count: 10,
  18. ControlBehavior: flow.Reject,
  19. },
  20. })
  21. if err != nil {
  22. fmt.Println(err)
  23. return
  24. }
  25.  
  26. ch := make(chan struct{})
  27. for i := 0; i < 10; i++ {
  28. go func() {
  29. for {
  30. // 埋点逻辑,埋点资源名为 some-test
  31. e, b := sentinel.Entry("some-test")
  32. if b != nil {
  33. // 请求被拒绝,在此处进行处理
  34. time.Sleep(time.Duration(rand.Uint64() % 10) * time.Millisecond)
  35. } else {
  36. // 请求允许通过,此处编写业务逻辑
  37. fmt.Println(util.CurrentTimeMillis(), "Passed")
  38. time.Sleep(time.Duration(rand.Uint64() % 10) * time.Millisecond)
  39.  
  40. // 务必保证业务结束后调用 Exit
  41. e.Exit()
  42. }
  43.  
  44. }
  45. }()
  46. }
  47. <-ch
  48. }

Demo 运行后,可以看到控制台每秒稳定输出 "Passed" 10 次,和规则中预先设定的阈值是一样的。我们可以在 metric 日志里看到类似下面的输出:

  1. 1581516234000|2020-02-12 22:03:54|some-test|10|2068|10|0|5|0|0|0
  2. 1581516235000|2020-02-12 22:03:55|some-test|10|2073|10|0|3|0|0|0
  3. 1581516236000|2020-02-12 22:03:56|some-test|10|2058|10|0|5|0|0|0
  4. 1581516237000|2020-02-12 22:03:57|some-test|10|2023|10|0|5|0|0|0
  5. 1581516238000|2020-02-12 22:03:58|some-test|10|2046|10|0|5|0|0|0

其中 some-test 这一列代表埋点资源名,后面的数字依次代表该一秒内的通过数(pass)、拒绝数(block)、完成数(complete)、错误数目(error)、平均响应时长(rt)。详细信息可以参考 监控日志文档