我使用MQTTNet进行了一些性能测试,并获得了意外的结果 寻找帮助以查看是否有我遗漏的某些配置更改或MQTTNet实现限制。 环境: 我在一个盒子上有3个进程:发件人->服务器->订阅者
测试:
Messages Sender Server Subscriber Time
100K 1 instance sends 100K messages -> 1 -> 1 instance 30sec
100K (1000*100) 1k instances sends 100 messages -> 1 -> 1 instance 32sec
100k (10000*10) 10K instances sends 10 messages -> 1 -> 1 instance 340sec
我看到从1个实例迁移到1000个实例并不会显着影响性能,但是迁移到1万个发送者(1个客户端实例有1万个实例)会显着影响性能。
在最后一次测试中,在50秒内以及服务器将消息发送给订户之后,所有传递到服务器的消息。 50秒后CPU下降到25%
服务器启动
var optionsBuilder = new MqttServerOptionsBuilder()
.WithConnectionBacklog(10000)
.WithDefaultEndpointPort(8883)
.WithDefaultEndpointBoundIPAddress(IPAddress.Parse("xxx"))
.WithApplicationMessageInterceptor(context =>
{
Interlocked.Increment(ref cnt);
}
)
.WithMaxPendingMessagesPerClient(100);
mqttServer = new MqttFactory().CreateMqttServer();
await mqttServer.StartAsync(optionsBuilder.Build());
客户端启动
var options = new MqttClientOptionsBuilder()
.WithClientId(name)
.WithTcpServer("xxxx", 8883)
.Build();
var factory = new MqttFactory();
mqttClient = factory.CreateMqttClient();
mqttClient.UseApplicationMessageReceivedHandler(e =>
{
Interlocked.Increment(ref cnt);
});
// for receiver
mqttClient.UseConnectedHandler(async e =>
{
Console.WriteLine("### CONNECTED WITH SERVER ###");
await mqttClient.SubscribeAsync(new TopicFilterBuilder().WithTopic("my/topic").Build());
Console.WriteLine("### SUBSCRIBED ###");
});
MQTTNet 3.0.11版
OS Windows 10
为什么使用1万个客户端,所以观察到如此严重的降级,而使用1000个客户端时几乎没有降级。 我可以错过一些配置吗?