webman-json-rpc

威尔

问题描述

各位大佬、前辈好,刚从tp转wbeman,性能确实提升不少。但最近发现一个小问题,有2台服务器,服务器a是从服务器b拿数据,服务器b做rpc远程调用获取数据。服务器b单机压力测试用wrk压测能到3w-4w,然后压测服务器a从服务器b获取数据,采用tcp传输大概8000左右,采用udp传输大概16000左右。距离原本的性能差距有点大啊(内网带宽是1.5g,跑了大概最多一半左右),性能大概只有一半左右,所以不知道是不是自己那里操作不对的,还是原本大概只能到这个瓶颈。所以才有http2、grpc(基于所以才有http2)这种

为此你搜索到了哪些方案

参考过大佬的
https://www.workerman.net/q/6057

271 3 0
3个回答

army

肯定会有损耗的,改成text协议试试看

  • 威尔 15天前

    试过了,text协议会快一点点,但没有udp快

suse

应该是没有复用tcp连接吧

  • 威尔 15天前

    这个有想过,后面有复用的,用静态变量去存在这个连接,然后判断复用,会有所提升。但距离原本的性能还差40%左右。可能国内用php做rpc比较少吧,以为有大神注意到这个问题

  • 威尔 15天前

    总结,假如想要接近原本的性能方法建议是用户-> nginx(转发)->rpc服务器(rpc服务器->nginx->用户)这样性能应该高一点,rpc一般是用户->nginx->服务器A->服务器B(rpc),服务器B(rpc)->服务器A->nginx->用户,过长长了,可能损耗在这里了

  • rbb 15天前

    估计就是这样,你可以把你压测的命令分别贴出来的,可能就是压测姿势不对的

  • rbb 15天前

    估计就是这样,你可以把你压测的命令分别贴出来的

  • 威尔 15天前

    压测服务器B(rpc)ab -n 50000 -c 1000 -k http://xxx.xxx.xxx.xxx:9501/goods/information
    压测服务器B(rpc)wrk -c 1000 -d 10s http://xxx.xxx.xxx.xxx:9501/goods/information

    压测服务器A到服务器B获取数据 ab -n 50000 -c 1000 -k http://xxx.xxx.xxx.xxx:9501/goods/information
    压测服务器A到服务器B获取数据 wrk -c 1000 -d 10s http://xxx.xxx.xxx.xxx:9501/goods/information

  • rbb 15天前

    你压测的本机的时候,用的是IP还是域名

  • 威尔 15天前

    肯定ip啊

  • rbb 15天前

    IP就不走nginx

  • 威尔 15天前

    也可以说不走吧,正常是走的(用户->nginx->服务器A->服务器B(rpc)),因为我是压测,这里相当于少了一步变(用户->服务器A->服务器B(rpc))

  • nitron 15天前

    wrk B 直接client是B的性能
    wrk A->B A要发送请求B,A接受B响应,A再响应client,必定是有损耗的

  • 威尔 15天前

    是的,知道必然会有损耗的,只是想了解有更好的方案可以降低损耗吗

  • rbb 15天前

    那你自己都解答了呀,宝

  • rbb 15天前

    nginx调优你没弄吧,只要多一层这个,就必损耗。还有带宽问题

  • 威尔 15天前

    发这个贴,主要想了解大家有木有更好的方案,能降低损耗……

  • nitron 15天前

    没有,节点链路越长,损耗就越多,要么直连,要么换语言
    跟网络一样,距离越远,信号衰减越明显

  • 威尔 15天前

    噢噢,好的

xiuwang

进程数可能不够,A B服务器进程数都开成cpu核数的4-8倍试下。
B服务器肯定能支持3-4W,问题是A服务器发起的请求量不够,多加两台A服务器应该会提升。
A服务器要响应客户端,又要请求B服务器,性能减半很正常,如果A短链接请求B性能会再次减少一半左右,也就是大概8000。

  • 威尔 14天前

    试了一下,跟进程数无关,开多了反而下降了,假如服务器性能比较高,增加A服务器发起的请求量确实会有所提升,假如服务器A带宽100m,用户->服务器A->服务器B,能有8000的话带宽翻倍的话,大概能到16000QPS吧。这个是我19的时候遇到过的,不过这次不同的是请求rpc,以前是直接转发到其他服务器

🔝