zoukankan      html  css  js  c++  java
  • Sentinel 限流

    Sentinel(https://github.com/alibaba/Sentinel)是一个限流组件。在互联网系统高可用设计中,限流作为一种托底的手段,保护系统不会被流量冲垮而出现未知的异常。
    Sentinel系统的具体设计,可以参考官方文档,同时也可以参考 这个  , 这里只说一下大概的逻辑:
    1. Sentinel限流算是是通过滑动窗口实现,滑动窗口算法可以有效解决计数器法的临界问题,关于限流的4种算法,可以参考 这里
    2. Sentinel通过类似链表的方式,组装了N个solt(最新版本为8个), 这些slot各司其职,作用如下:
    • NodeSelectorSlot 负责收集资源的路径,并将这些资源的调用路径,以树状结构存储起来,用于根据调用路径来限流降级;
    • ClusterBuilderSlot 则用于存储资源的统计信息以及调用者信息,例如该资源的 RT, QPS, thread count 等等,这些信息将用作为多维度限流,降级的依据;
    • StatisticsSlot 则用于记录,统计不同维度的 runtime 信息;
    • SystemSlot 则通过系统的状态,例如 load1 等,来控制总的入口流量;
    • AuthoritySlot 则根据黑白名单,来做黑白名单控制;
    • FlowSlot 则用于根据预设的限流规则,以及前面 slot 统计的状态,来进行限流;
    • DegradeSlot 则通过统计信息,以及预设的规则,来做熔断降级;

    每个请求都会经过这些solt, 这些slot按照指定的顺序放入到SlotChain, 前3个用于统计,后面4个根据统计结果给出不同的操作,每个请求都会经过前面3个slot, 后面4个如果违反任何一个,都会通过抛出异常来短路返回。业务根据抛出的异常进行相应的处理。 

    sentinel除了本地模式,还有集群模式,这里就不细说
    可以参考我的注解版 https://github.com/zhaoyb/Sentinel

  • 相关阅读:
    Linux
    springboot gateway 动态路由-01
    springboot远程debug调试
    springboot使用策略模式实现一个基本的促销
    springboot swagger2案例
    Tcp三次握手四次挥手个人学习
    springboot使用自定义注解和反射实现一个简单的支付
    java后端使用token处理表单重复提交
    基于redis实现未登录购物车
    java中的VO、PO、BO、DAO、POJO
  • 原文地址:https://www.cnblogs.com/beyondbit/p/13386997.html
Copyright © 2011-2022 走看看