Как я могу улучшить зависание сокета при подключении многих устройств? - PullRequest
0 голосов
/ 17 декабря 2018
  • Я тестирую подключение многих устройств к FIWARE в следующей среде.
  • Каждый компонент развертывается в контейнере на физическом сервере.

    +-------------------------------------------------+
    |Comet - Cygnus - Orion - IoTAgentJSON - Mosquitto| - device*N
    +-------------------------------------------------+
    
  • При условии, что каждое устройство передает данные со скоростью 1 мсг / с, в IoTAgent возникает следующая ошибка, когда количество устройств равно 350. (То есть 350 мсг / с)

    {"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
    

Вопрос 1: Где причина?IoTAgent?Или Орион?Или MongoDB?Или параметр ядра?

  • Error found executing update action in Context Broker: Error: socket hang up, но в Orion не отображается журнал ошибок.

Вопрос 2. Как повысить производительность обработки FIWARE?

Вопрос 3: Есть ли пакетная операция на агенте IoT?

1 Ответ

0 голосов
/ 21 декабря 2018

Трудно дать правильный ответ, поскольку производительность зависит от многих факторов, особенно в сложных установках, в которых участвуют несколько компонентов, взаимодействующих между собой.Тем не менее, я постараюсь поделиться некоторыми мыслями и соображениями, основываясь на информации, которую вы предоставляете, и на своем предыдущем опыте.

Что касается Ориона, я бы рекомендовал вам ознакомиться с документацией понастройка производительности .Следуя указаниям на этой странице, вы можете увеличить производительность компонента.

Однако, сказав это, я не думаю, что Orion является причиной проблемы в вашем случае, основываясь на:

  • Даже без оптимизации производительности Orion обычно достигает пропускной способностив порядке ~ 1000 тпс.Он должен справляться с обновлениями со скоростью 350 tps без проблем.
  • Orion не показывает журналы ошибок.Насколько я понимаю, ваши журналы ошибок создаются компонентом IOTAgent.

Таким образом, фокусируясь на IOTA, возможно, было бы лучше использовать IOTA-UL вместоIOTA-JSON.Кодировка UL более эффективна, чем кодировка JSON, поэтому вы можете повысить эффективность.Кроме того, IOTA-UL позволяет отправлять мультимеры (используя # в качестве разделителя), которые я не знаю, подходит ли это для вашего случая, но может рассматриваться как ограниченная форма пакетного обновления (см. Документация UL для получения более подробной информации).

Если это не сработает, можно отправить данные непосредственно в Orion, используя его NGSIv2 API .Это могло бы иметь несколько преимуществ:

  • Упрощенная настройка (на две части меньше: MQTT-брокер и IOTAgent)
  • При одинаковых условиях ресурсов собственная производительность Orion обычно выше, чем производительность IOTAgents (как яупоминание до ~ 1000 т / с или даже выше после применения оптимизации производительности)
  • API NGSIv2 обеспечивает операцию пакетного обновления (см. POST /v2/op/update в приведенном выше документе спецификации NGSIv2)
...