最近关注了go的一些新项目,发现了一个比较牛逼的框架rpcx,此项目已经不是简单的rpc框架,而是一整套微服务框架,包含了服务发现、服务治理、负载均衡、故障转移等能力。
一、简介
rpcx与Alibaba Dubbo, Weibo Motan项目类似,项目地址:https://github.com/smallnest/rpcx
主要特色:
- 简单:非常容易使用,对比thrift,grpc来看,代码量和可读性都要优秀很多很多;
- 高性能:官方号称性能高于grpc,实测确实比grpc性能要好,但比thrift要差一些,详见后面数据;
- 跨语言: 可以与其它语言交互,但只是提供了一个gateway来转换协议,而thrift,grpc是可以做到跨语言直接调用的;
- 服务发现和治理:这个确实非常不错,比thrift,grpc之类的完整太多了,基本可以开箱即用;
其它特性(来自官网):
- Support raw Go functions. There's no need to define proto files.
- Pluggable. Features can be extended such as service discovery, tracing.
- Support TCP, HTTP, QUIC and KCP
- Support multiple codecs such as JSON, Protobuf, MessagePack and raw bytes.
- Service discovery. Support peer2peer, configured peers, zookeeper, etcd, consul and mDNS.
- Fault tolerance:Failover, Failfast, Failtry.
- Load banlancing:support Random, RoundRobin, Consistent hashing, Weighted, network quality and Geography.
- Support Compression.
- Support passing metadata.
- Support Authorization.
- Support heartbeat and one-way request.
- Other features: metrics, log, timeout, alias, circuit breaker.
- Support bidirectional communication.
- Support access via HTTP so you can write clients in any programming languages.
- Support API gateway.
- Support backup request, forking and broadcast.
二、性能测试
抽空做了个简单的性能测试,主要是评估rpc处理耗时:
1.测试环境
OS: ubuntu 16.04, kenerl 4.4.0
Go: 1.10.3
机器:Thinkpad T450
CPU:i5-5300u 2.3G
内存:8G
2.测试用例
服务端:只做简单的整数加法;
客户端:单个长连,10w次rpc请求计算总耗时;
3.数据和结论
Thrift(go):
- 总耗时:31s
- CPU使用率:84% (client, server使用率差不多)
gRpc(go):
- 总耗时:120s
- CPU使用率:87% (server cpu使用率略高一些)
rpcx(go):
- 总耗时:70s
- CPU使用率:70%-80% (server比client的使用率高10%)
粗略来看,Thrift性能仍能非常优秀,其次是rpcx,gRpc性能最差的;
三、小结
rpcx优点:
- 简单易用;
- 性能优秀;
- 配套的服务发现和服务治理;
- 完整的负载均衡、故障转移;
rpcx缺点:
- 跨语言调用;