Sentinel

Sentinel

      • 使用方如何确定限流的具体QPS?
      • Sentinel数据统计底层实现?即每个桶固定时间段内的统计。
            • sentinel核心流程:
            • 优化点:
            • Sentinel使用了`滑动窗口算法`来做数据统计。(具体实现类:LeapArray,StatisticSlot中的LeapArray采用了一个环形数组的数据结构,和一致性hash算法的图类似)
            • AtomicLong实现原理。
            • currentHashMap实现原理。
            • LongAdder实现原理。
      • 过载保护
            • TCP拥塞控制:
            • Leak-bucket(限流算法):
            • Token-bucket(限流算法):
      • Reference
  • A Word

使用方如何确定限流的具体QPS?

  • 需要找到临界点。
    临界点之前:压力测试线性增大QPS,TPS也在逐步提高,时延相对稳定。
    临界点附近:压力测试线性增大QPS,TPS负载接近满额(达到峰值),服务中请求处理出现排队情况,时延非线性上涨。
    临界点之后:压力测试线性增大QPS,计算资源超额负载,进一步导致GC,进程调度、网络等资源压力导致TPS迅速下降(反噬),请求排队过长,导致时延进一步指数级上升,最终导致服务资源耗尽导致宕机无响应等情况。
    将TPS定点附近值作为对QPS的限制阈值相对理想。

Sentinel数据统计底层实现?即每个桶固定时间段内的统计。

sentinel核心流程:
  1. NodeSelectorSlot:调用链路构建。
  2. ClusterBuilderSlot:统计簇点构建。
  3. StatisticSlot:监控统计。(WindowLeapArray,滑动窗口思想)
  4. ParamFlowSlot:热点参数限流。
  5. SystemSlot:系统保护。
  6. AuthoritySlot:来源访问控制。
  7. FlowSlot:流量控制。
  8. DegradeSlot:熔断降级。
  9. Action:…
优化点:
1. Sentinel通过复用Bucket降低对内存的消耗。(循环数组,循环覆盖复用思想)
2. 使用LongAddr降低并发统计数据对性能的消耗。(base+弹扩cell,分段锁思想)
3. Sentinel通过责任链模式实现统计、限流、熔断降级等功能,实现局部无锁化。(责任链模式,局部无锁化)
Sentinel使用了滑动窗口

你可能感兴趣的:(天天JAVA,小小的天,Java,java,sentinel,流控)