gRPCX
是一个复用了大部分gRPC接口并对其做了个性化扩展的rpc框架,传输调度相关代码大部分已经重新;之所以开发这个框架,是希望能改善gRPC框架的性能和内存问题,同时对分布式系统做更好的个性化支持.gRPCX
对传输层做了改动,目前没有支持http2,可以指定支持tcp,unix,quic等.
- 增加通道的支持:在分布式系统中,经常有时序要求的请求,在框架中增加通道显得非常重要。
gRPCX
采用的是动态通道算法,非固定的静态通道,增加数据公平竞争性;同时也对通道并发数做了控制 - 增加连接事件插件:通过option指定plugin
- 增加单向请求的支持
- 增加自定义RawHandler和Struct作为service的注册机制
- 增加框架内的PING/PONG健康监测选项
- 增加服务端的通知:即支持Server端SentTo到客户端
- 增加异步请求支持
- 增加业务层对Metadata的获取支持
- 增加客户端失败重试的机制
- 支持rpc流,同gRPC,需将pb内引用gRPC的地方改成引用
gRPCX
- 支持多种编码:默认使用pb,可通过option自定义,同gRPC
- 支持压缩:支持gzip压缩,同gRPC
- 支持加密授权:支持tls,同gRPC
- 支持并发控制:可通过option设置通道的并发数和请求数的并发数;gRPC采用的是流量控制
- 支持Graceful关闭:同gRPC
- 负载均衡:提供option扩展,当前支持Roundroubin方法,计划支持hash和一致性hash等,选择性支持居于最少请求,最少连接,ping,最快响应等动态负载均衡算法
- 服务发现:提供option扩展,支持zk和etcd
- 去除了gRPC一些不常用的功能,例如请求劫持,reflection,state,trace等
- 多连接并行请求,性能比grpc提升约50%~60%
- 单连接串行请求,性能比grpc提升约100%
- 多连接串行请求,性能比grpc提升约150%