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

  • 单一请求可触发所有满足条件的 Policy, 进行综合流控
  • 通过分发策略、异步、批申报等机制,降低请求时延与降低Controller 工作量
    • 尽可能在 Filter/SDK 级别处理,避免流控请求影响业务时延
    • 尽可能少上报到 Controller,降低 Controller 负载提升 Controller 效率
  • Filter 与算法门限降级放通,避免Ratelimit机制故障对业务造成影响
  • 采用KEY/VALUE 模式和多维,提供通用机制,适应不同场景不同应用流控诉求
    • 立足API Gateway第一个应用场景
    • Controller 不需理解具体业务,由基于SDK封装的Filter适配具体业务与流控Controller
    4.2逻辑视图
    • RateLimit SDK访问根据一致性hash访问sharding后的RateLimit Controller , 对于高吞吐高精度的流控集中在Controller内存进行限流计算 。
    • RateLimit Controller对于高精度高吞吐只集中在本地内存计算,无需考虑crash后保留历史限流信息 。
    • RateLimit Controller对于高精度低吞吐的限流采取异步持久化策略 , 确保Controller crash后流控的精度 。
    • 当Ratelimit Controller服务终止的时候 , Ratelimit SDK支持自动降级 。
    • 根据API Gateway采集的API Response latency等信息反馈 , 支持动态调整流控策略 。
    • 支持SLA-Based 流控 Policies 。

    详解ROMA Connect API 流控实现技术

    文章插图
    4.3架构设计
    • 采用独立的Controller 方案
      • 独立集群 Controller 提供全局精确高吞吐流控
      • Controller 内部采用 Sharding 机制
    • 采用通用的Policy与Key/Value模型
      • 采用可扩展的 Domain/Policy机制 , 适应不同业务场景
      • 不同Policy关联不同的算法
    • 提供SDK与Tools , 开发API G等插件
      • 提供可重用的SDK与调试工具等
      • 预实现API Gateway等流控插件
    • 外置日志、流控数据分析模块
      • 通过数据挖掘、预测等反馈到配置/策略管理模块,动态修订流控策略

    详解ROMA Connect API 流控实现技术

    文章插图
    4.4内置算法4.4.1带缓存带颜色的令牌桶算法
    • 令牌桶算法的问题:
      • 当无可用令牌时,请求会被立即拒绝 。而用户可能会继续不断发送请求,直到有可用的令牌 。这会增加API Gateway的负载和流控服务的负载 。
      • 所有的请求以同样的概率获得令牌 , 不支持优先级 。而在实际应用中 , 一些请求需要被优先处理,另一些请求可以被延迟处理或者直接拒绝 。例如,应该优先处理电子商务网站的付款请求,而浏览商品的请求可以被延迟处理 。
    • 设计了一种支持缓存和优先级的令牌桶算法
      • 缓存:
        • 当无可用令牌时,把请求暂时放在请求队列里,待有可用令牌时再处理 。
        • 采用FCFS算法处理请求 。
        • 如果缓存也无可用空间,就直接拒绝请求 。
      • 令牌
        • 令牌分为多种颜色,不同颜色代表不同优先级,如绿色、黄色、红色表示优先级由高至低 。
        • 在API配置文件里 , 可配置不同API的优先级 。根据预先配置的优先级 , 对请求分配相应颜色的令牌 。如果请求没有优先级,则使用默认优先级 。
        • 根据API Gateway系统的能力配置令牌的数量 。
        • 当低优先级的请求到达时,如果高优先级的令牌量大于预留的数量,也可分配高优先级的令牌给该低优先级的请求 。对令牌设置预留量,保证低优先级请求不会耗尽高优先级的令牌 。
        • 每种颜色的令牌有单独的请求缓存 。
    4.4.2高精度高吞吐量的流控算法