MQTTNet使用10K客户端会降低性能

时间:2020-07-31 00:04:25

标签: mqttnet

我使用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个客户端时几乎没有降级。 我可以错过一些配置吗?

0 个答案:

没有答案
相关问题