每个组件都部署在物理服务器上的容器中。
+-------------------------------------------------+
|Comet - Cygnus - Orion - IoTAgentJSON - Mosquitto| - device*N
+-------------------------------------------------+
在每台设备以1 msg / sec传输数据的情况下,当设备数量为350(即350 msg / sec)时,在IoTAgent上发生以下错误
{"log":"time=2018-12-16T14:57:24.810Z | lvl=ERROR | corr=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | trans=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | op=IoTAgentNGSI.NGSIService | srv=n/a | subsrv=n/a | msg=Error found executing update action in Context Broker: Error: socket hang up | comp=IoTAgent\n","stream":"stdout","time":"2018-12-16T14:57:24.81037597Z"}
{"log":"time=2018-12-16T14:57:24.810Z | lvl=ERROR | corr=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | trans=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | op=IoTAgentNGSI.Alarms | srv=n/a | subsrv=n/a | msg=Raising [ORION-ALARM]: {\"code\":\"ECONNRESET\"} | comp=IoTAgent\n","stream":"stdout","time":"2018-12-16T14:57:24.810440213Z"}
{"log":"time=2018-12-16T14:57:24.810Z | lvl=ERROR | corr=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | trans=ec11c37f-5194-4cb3-8d79-e04a2d1e745c | op=IoTAgentJSON.MQTTBinding | srv=n/a | subsrv=n/a | msg=MEASURES-002: Couldn't send the updated values to the Context Broker due to an error: Error: socket hang up | comp=IoTAgent\n","stream":"stdout","time":"2018-12-16T14:57:24.810526916Z"}
请求的ps ax | grep contextBroker
命令的结果如下。
ps ax | grep contextBroker
19766 ? Ssl 29:02 /usr/bin/contextBroker -fg -multiservice -ngsiv1Autocast -dbhost mongodb-orion-demo -statCounters -statSemWait -statTiming
Error found executing update action in Context Broker: Error: socket hang up
,但在Orion中没有显示错误日志。在下一页上,您应该执行批处理操作,而不是为每个实体打开新连接,但是IoTAgent中有这样的功能吗?
ECONNRESET when opening a large number of connection in small time period
答案 0 :(得分:0)
很难提供正确的答案,因为性能取决于许多因素,特别是在涉及多个组件交互的复杂设置中。但是,我将根据您提供的信息和我以前的经验尝试提供一些想法和见解。
关于Orion,我建议您看看documentation on performance tunning。按照该页面上的指示,您可以提高组件的性能。
但是,话虽如此,我认为基于您的情况,Orion并不是问题的根源
因此,专注于IOTA,也许最好使用IOTA-UL而不是IOTA-JSON。 UL编码比JSON编码更有效,因此您可以提高效率。此外,IOTA-UL允许您发送多重测量(使用#
作为分隔符),我不知道它是否适合您的情况,但可以看作是批量更新的一种有限形式(请参见UL documentation详情)。
如果这样不起作用,则另一种可能性是使用其NGSIv2 API将数据直接发送到Orion。那将有几个优点:
POST /v2/op/update
)