我有单一工作者角色运行自托管web api的云服务。 尝试使用xxx.cloudapp.net地址从另一个云服务(在同一个vnet中)使用此Web api。但性能非常不稳定。有时在几百个请求之后,http请求会冻结一段时间。像Azure负载均衡器这样的接口限制了我的请求。
这是Apache Bench的输出,带有再现冻结(从同一个vnet中的另一个VM运行):
ab -c 10 -n 1000 http://xxx.cloudapp.net/ping
<..>
Time taken for tests: 39.970 seconds
Complete requests: 1000
Failed requests: 1
(Connect: 1, Receive: 0, Length: 0, Exceptions: 0)
<..>
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 19 402.6 0 9017
Processing: 0 360 2307.4 15 21046
Waiting: 0 318 2178.6 0 21046
Total: 0 379 2339.6 16 21046
Percentage of the requests served within a certain time (ms)
50% 16
66% 16
75% 16
80% 16
90% 16
95% 17
98% 9015
99% 9032
100% 21046 (longest request)
使用本地IP(例如10.0.0.x)时没有冻结。 使用web角色/ iis尝试相同的结果。
为什么会这样?怎么避免这个?我不想使用本地IP,因为那时我将松开交换功能。
答案 0 :(得分:2)
我知道您正在从一个云服务到另一个云服务进行性能测试。
Azure负载均衡器不会限制。它是具有极高限制的基础架构组件。可能发生的是你可以运行我们的或端口。当您创建出站连接时,我们会SNAT来源VIP。自从你SNAT,你得到64K端口的限制。 最好验证这一点是将公共IP与运行perf测试(https://azure.microsoft.com/en-us/documentation/articles/virtual-networks-instance-level-public-ip/)的VM相关联,然后再次运行测试
伊夫