详解ROMA Connect API 流控实现技术( 三 )

  • 设计了一种支持缓存和优先级的令牌桶算法
    • 缓存:
      • 当无可用令牌时,把请求暂时放在请求队列里,待有可用令牌时再处理 。
      • 采用FCFS算法处理请求 。
      • 如果缓存也无可用空间,就直接拒绝请求 。
    • 令牌
      • 令牌分为多种颜色,不同颜色代表不同优先级,如绿色、黄色、红色表示优先级由高至低 。
      • 在API配置文件里,可配置不同API的优先级 。根据预先配置的优先级,对请求分配相应颜色的令牌 。如果请求没有优先级,则使用默认优先级 。
      • 根据API Gateway系统的能力配置令牌的数量 。
      • 当低优先级的请求到达时,如果高优先级的令牌量大于预留的数量,也可分配高优先级的令牌给该低优先级的请求 。对令牌设置预留量,保证低优先级请求不会耗尽高优先级的令牌 。
      • 每种颜色的令牌有单独的请求缓存 。
    4.4.2高精度高吞吐量的流控算法
    • 问题:高精度、高吞吐的矛盾
      • 为了实现高精度流控,API Gateway需要为每个API请求发送流控请求至流控服务,会很大程度降低处理请求的吞吐量 。
      • 为了提高吞吐量,API Gateway需降低发送流控请求的频度,这会降低流控的精度 。发送流控请求的频度越低,流控的精度越低 。
    • 提出一种高精度高吞吐量的流控算法HAT(High Accuracy, High Throughput)
      • 把流控分为自主流控阶段和流控服务流控阶段 。
      • 设流控阈值为L,自主流控阈值为S,API Gateway集群节点数量为N,当前流控周期内已经处理的API数量为R 。
      • 流控服务计算:自主流控阈值S = L/N,并分发给每个API Gateway节点 。
      • 在自主流控阈值范围内,每个API Gateway节点可做自主流控,无需向流控服务发送流控请求 。
      • 当API Gateway集群中有一个节点的API请求量超过自主流控阈值–α时,该节点发送流控请求至流控服务,申请新的流控阈值 。此时,流控服务联系API Gateway的其它节点获得它们处理的API请求量 。然后,流控服务重新计算自主流控阈值S = (L – R)/ N,并发送给各个API Gateway节点 。
      • 当流量余额 < δ时,不再更新自主流控阈值 。
      • 当进入下一流控周期时,流控服务重置S,各API Gateway节点联系流控服务更新自主流控阈值 。
    • 算法分析
      • 设u是单个流控周期内自主流控阈值更新的次数,Pi表示第i个API Gateway节点处理API的速度 。
      • 单个流控周期的流控请求的数量由L降至u*N 。
      • 最优情况是API Gateway集群的每个节点的性能完全一样,此时,u = 1 。当流控阈值是10000,API Gateway节点数量是10时,单个流控周期的流控请求从10000降至10 。
      • API Gateway集群的每个节点的性能越接近,u越接近1 。API Gateway集群的每个节点的性能差距越大,u越大 。
    4.4.3动态流控算法基于运行状态、趋势、API调用链进行动态流控 。