Kitex 支持限制最大连接数和最大 QPS 。在初始化 Server 的时候,增加一个 Option:
import "github.com/cloudwego/kitex/pkg/limit"func main() {svr := xxxservice.NewServer(handler,server.WithLimit(&limit.Option{MaxConnections: 10000, MaxQPS: 1000}))svr.Run()}复制代码
其中 MaxConnections 表示最大连接数,MaxQPS 表示最大 QPS,此外,还 Kitex 还提供了动态修改限流阈值的能力 。
Kitex 分别使用了 ConcurrencyLimiter 和 RateLimiter 对最大连接数和最大 QPS 进行限流,其中 ConcurrencyLimiter 采用了简单的计数器算法,RateLimiter 采用了“令牌桶算法” 。
限流状态的监控也是重要的一环,Kitex 定义了 LimitReporter 接口,用于限流状态监控,例如当前连接数过多、QPS 过大等 。如有需求,用户需要自行实现该接口,并通过 WithLimitReporter 注入 。
type LimitReporter interface {ConnOverloadReport()QPSOverloadReport()}复制代码
请求重试
Kitex 提供三类重试:超时重试、Backup Request,建连失败重试 。其中建连失败是网络层面问题,由于请求未发出,框架会默认重试,下面重点介绍前两类重试的使用 。需要注意的是,因为很多的业务请求不具有幂等性,这两类重试不会作为默认策略,用户需要按需开启 。
- 超时重试:错误重试的一种,即客户端收到超时错误的时候,发起重试请求 。
- Backup Request:客户端在一段时间内还没收到返回,发起重试请求,任一请求成功即算成功 。Backup Request 的等待时间 RetryDelay 建议配置为 TP99,一般远小于配置的超时时间 Timeout 。

文章插图
服务中的长尾请求增加了服务的整体延迟,而长尾请求占比很低,如上图所示,一个真实服务的延迟分布,能明显看出长尾现象,最大延迟 60ms,而 99% 服务可以在 13ms 返回 。当请求延迟达到 13ms 的时候就已经进入长尾请求,这个时候我们可以再发出一条请求,这条请求大概率会在 13ms 内返回,任意一次请求返回我们就认为请求成功,即通过增加适当的负载,大大减少了响应时间的波动 。关于超时重试和 Backup Request 的优缺点以及适用场景,可见下表:

文章插图
负载均衡
Kitex 默认提供了两种负载均衡算法实现:
- WeightedRandom:这个算法使用的是基于权重的随机策略,也是 Kitex 的默认策略 。它会依据实例的权重进行加权随机,并保证每个实例分配到的负载和自己的权重成比例 。
- ConsistentHash:一致性哈希主要适用于对上下文(如实例本地缓存)依赖程度高的场景,如希望同一个类型的请求打到同一台机器,则可使用该负载均衡方法 。
ConsistentHash 在使用时,需要注意如下事项:
- 下游节点发生变动时,一致性哈希结果可能会改变,某些 Key 可能会发生变化;
- 如果下游节点非常多,第一次冷启动时 Build 时间可能会较长,如果 RPC 超时短的话可能会导致超时;
- 如果第一次请求失败,并且 Replica 不为 0,那么会请求到 Replica 上;而第二次及以后仍然会请求第一个实例 。
框架自身不提供监控打点实现,提供了 Tracer 接口,用户可以根据需求实现该接口,并通过 WithTracerOption 注入到框架中 。
- 葫芦陶瓷罐有风水作用吗好吗
- 薛城风水大师
- 诀窍的英文 小窍门 英语
- 初中广播稿500字左右 初一广播稿500字左右摘抄稿
- 风水月亮代表什么星象
- 吴川风水群 吴川风水留题
- 怎么联系风水大师电话 风水地理专家联系电话微信号
- 超级有趣的冷知识 100个超级有趣的冷知识问答
- 山在风水中代表什么 酒在风水中代表什么意思
- 宗祠的风水如何 斜门宗祠风水讲究
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
