这是我参与「第五届青训营」伴学笔记创作活动的第 5 天
kitex框架的简单介绍
功能简单介绍
kitex是一个基于go的rpc框架,提供了大量的扩展接口例如etcd的扩展和链路追踪的扩展,也可以自己定制扩展。kitex的rpc消息默认支持thrift,protobuf和grpc,对于消息协议kitex也支持用户自定义扩展。以及代码生产功能,kitex可以通过thrift或者protobuf文件生成相应的脚手架代码。采用自研的netpoll网络库。
负载均衡
kitex默认提供了两种负载均衡策略
- WeightedRandom 这个策略就是我们所熟知的权重策略,通过赋予服务不同的权重,通过权重比来来实现负载的均衡,默认kitex就是使用的这个策略
- ConsistentHash 这个策略叫一致性哈希,简单来说就是利用hash算法对服务请求与处理之间的关系进行映射,以达到动态分配的目的,但这个策略只在部分的情况下效果好,因为他有明显的缺点如果服务器中保存有服务请求对应的数据,那么如果重新计算请求的hash值,会造成大量的请求被重定位到不同的服务器而造成请求所要使用的数据失效
熔断
kitex中熔断器默认的熔断阈值是 ErrRate: 0.5, MinSample: 200,错误率达到 50% 触发熔断,同时要求统计量 >200,其中熔断器分三个时期分别是CLOSED、OPEN、HALFOPEN其中CLOSED时为正常时期,当熔断器被触发时会进入OPEN当OPEN的冷却时间过完会进入到HALFOPEN,此时HALFOPEN会有策略去判断是否进入CLOSED。在kitex中有三个熔断触发策略
- 连续错误数达到阈值 (ConsecutiveTripFunc)
- 错误数达到阈值 (ThresholdTripFunc)
- 错误率达到阈值 (RateTripFunc) 当程序运行之后达到其中一个策略都会使程序进入OPEN状态,进入OPEN状态之后kite下默认的冷却时间是10s
链路追踪
kitex支持opentracing的链路追踪用于实现程序链路,让微服务的每一个服务都得到有效的监控追踪,能够更快速的定位程序的问题所在。