设计了一种支持缓存和优先级的令牌桶算法- 缓存:
- 当无可用令牌时,把请求暂时放在请求队列里,待有可用令牌时再处理 。
- 采用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调用链进行动态流控 。
- 请求取得令牌后,流控服务开始处理请求,生成流控响应(接受/拒绝,降级,或黑白名单) 。
- 基于运行状态的动态流控策略
- 根据使用网络状态(可用连接数,网络延迟),请求处理延迟,API Gateway的cpu、memory等运行状态,动态修改流控阈值 。也可等等 。
- 当cpu、内存等使用率远小于阈值时,正常处理请求 。
- 当cpu、内存等使用率接近阈值时,降低流控阈值(降级),减少API Gateway的负载 。
- 当cpu、内存等使用率超过阈值很多时,提高降低流控阈值的速度 。
- 当无可用cpu、内存时,直接拒绝请求 。
- 当cpu、内存等使用率降低至正常水平时,恢复流控阈值 。
经验总结扩展阅读
-
-
智商|“以油养肤”是在交智商税?最全网红护肤油测评,拿走不谢!
-
-
-
-
-
发型不要再披头散发了,脸上有这5个特征的女生,披头发真的很丑
-
-
秋天来了,女性不想肚子鼓鼓,推荐以下食物,排毒减肥,抗衰老!
-
-
-
-
-
-
-
-
-
-
因为42岁温峥嵘近照瘦脱相,皮包骨似大头娃娃,面对蛋糕一口不吃
-
男子结婚前夕|男子结婚前夕,妻子消失无踪,6年后逛街偶遇,他终于明白了