sentinel

sentinel功能点

2019-10-23  本文已影响0人  lesline
  1. 流控
    qps
    线程数
  2. 降级
    RT:平均响应时间
    异常比例:
    异常数:
  3. 热点
    QPS 模式
  4. 授权
    流控应用
    黑白名单

概念解释

限流、熔断、隔离、降级

这四个概念是我们谈起微服务会经常谈到的概念,Sentinel 和 Hystrix 的原则是一致的

流量控制与熔断降级比较

::注意的是:限流是明确是由于并发过大导致,降级除了限流异步也可以是由于是业务异常导致::

流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
限流的直接表现是在执行 Entry nodeA = SphU.entry(resourceName) 的时候抛出 FlowException 异常。FlowException 是 BlockException 的子类,您可以捕捉 BlockException 来自定义被限流之后的处理逻辑。

try (Entry entry = SphU.entry("resourceName")) {
  // 被保护的业务逻辑
  // do something here...
} catch (BlockException ex) {
  // 资源访问阻止,被限流
  // 在此处进行相应的处理操作
}

熔断降级
除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。由于调用关系的复杂性,如果调用链路中的某个资源不稳定,最终会导致请求发生堆积。Sentinel 熔断降级会在调用链路中某个资源出现不稳定状态时(例如调用超时或异常比例升高),对这个资源的调用进行限制,让请求快速失败,避免影响到其它的资源而导致级联错误。当资源被降级后,在接下来的降级时间窗口之内,对该资源的调用都自动熔断(默认行为是抛出 DegradeException)。

注意:异常降级仅针对业务异常,对 Sentinel 限流降级本身的异常(BlockException)不生效。为了统计异常比例或异常数,需要通过 Tracer.trace(ex) 记录业务异常。示例:

Entry entry = null;
try {
  entry = SphU.entry(key, EntryType.IN, key);

  // Write your biz code here.
  // <<BIZ CODE>>
} catch (Throwable t) {
  if (!BlockException.isBlockException(t)) {
    Tracer.trace(t);
  }
} finally {
  if (entry != null) {
    entry.exit();
  }
}

总结:

  1. 异常不同:流量控制抛出 BlockException ,熔断降级抛出DegradeException
  2. 处理对象不同:流量控制只针对流量 ,不针对业务,熔断降级针对业务异常数或执行时间

热点参数限流

何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:

热点参数限流 · alibaba/Sentinel Wiki · GitHub

入口流量、出口流量

IN/OUT:IN 只对入口流量起作用,OUT对出口流量起作用
入口流量和出口流量有不同的控制方式

Sentinel工作主流程 · alibaba/Sentinel Wiki · GitHub

引用

介绍 · alibaba/Sentinel Wiki · GitHub

上一篇下一篇

猜你喜欢

热点阅读