基于我对网上搜索过后的结果,大多数对Micro的测试都是基于V1版本的,当然V1版本的性能也确实拉跨,被吊打的不得了,那V2版本是否有相应的进步呢?这点没有在网上搜索到,那就只能自己动手改造一个了。

看这篇博文中,2020 新春流行的RPC框架性能大比拼。Micro RPC性能可以说是垫底了,根据之前的仓库,进行更改后,https://github.com/younglifestyle/rpcx-benchmark , 得到Micro V2版本的测试代码。

image-20201113101051999

与之对应的Go RPC原生RPC性能则是:

image-20201113101113139

可以看到,对比之下,性能不可谓不尴尬,性能可以说是很拉跨了。

另外,看到这个仓库,Micro测试。修改为Micro V2版本,https://github.com/younglifestyle/rpcx-benchmark。

我的机器是Intel(R) 2.00GHz,24核心,36G内存,我只使用了在同一台机器运行Client/Server。

20个客户端,CPU占用在2.2%。总体来看,这也难怪仓库给出的结论是QPS太低。

image-20201113095737703

image-20201113100854270

在博主的一篇博客中提到测试网络库的一些思考:思考(五十九):如何正确的测试网络库

  • 不能一味的追求 qps ,要考虑到留 CPU 给业务逻辑去算
  • 因此在主流配置上,网络库能上 10w qps 且 CPU 占用较低,就合格了
  • 云机上跑服务完全可行

后续

在博主的博文micro/go-micro 介绍与源代码分析(五):回显测试分析网络性能,有提到过对Micro性能提出的issue,不过官方似乎并没改进。(该博主对go micro的性能进行过优化)

我提过issue,得到asim哥的回答是:

https://github.com/asim/nitro/issues/2075#issuecomment-725903901

V2 is unsupported. V3 is non-commercial. Performance is not my concern at this time.

这里我还找到一个issue,asim回答别人提高性能的一个解答,至于实际效果怎么样,我有时间将会进行一波尝试。

https://github.com/asim/nitro/issues/129#issuecomment-256572499

Each request does the following:

  1. Lookup service discovery for service
  2. Select node from service list
  3. Create new connection to node
  4. Make request
  5. Teardown connection

If you want more performance you can use the caching selector https://godoc.org/github.com/micro/go-micro/selector/cache and client side connection pooling https://godoc.org/github.com/micro/go-micro/client#PoolSize.

You can either do this in code or with flags like so:

1
2
3
> --selector=cache # enables in memory caching of discovered nodes
> --client_pool_size=10 # enables the client side connection pool
>

If you want to discuss further please join the slack.