Lorawan-stack: Оптимизировать сопоставление устройств

Созданный на 5 июн. 2020  ·  5Комментарии  ·  Источник: TheThingsNetwork/lorawan-stack

Резюме

Оптимизация сопоставления устройств на сетевом сервере

Зачем нам это нужно?

Для Redis I / O использование памяти и общая производительность вычислений при увеличении повторного использования DevAddr и увеличении размера DevAddr.

Что там уже есть? Что ты видишь сейчас?

В настоящее время NS пробегает устройства по DevAddr и декодирует proto. Прототипы большие, содержат состояние Mac и недавние сообщения восходящего и нисходящего каналов, плюс может быть много протоколов (сотни) дублированных DevAddr.

Чего не хватает? Что вы хотите увидеть?

Нам нужно материализованное представление в Redis для сопоставления восходящих каналов с устройствами по UID перед загрузкой сопоставленного устройства.

Как вы предлагаете это реализовать?

Храните соответствующую информацию для сопоставления в выделенных ключах, в основном DevAddr, FCnt, NwkSIntKeys и UID.

Сортированный набор и / или хеш-карта были бы полезны, поскольку это позволяет Redis сортировать и запрашивать отправку с помощью FCnt, получая ключи целостности и UID.

Обновите это материализованное представление для каждого восходящего канала и подтверждения присоединения.

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

Как вы предлагаете это проверить?

Модульные тесты, потенциально с утверждением ключей Redis и их значений в тесте.

Можете ли вы сделать это самостоятельно и отправить запрос на слияние?

Можно просмотреть

network server performance in progress scalability

Все 5 Комментарий

Я думаю, что лучшим подходом было бы решить эту проблему другим способом, который также увеличивает производительность в общем случае - выделите занимающие много места данные из протоколов и сохраните их отдельно, то есть recent_uplinks , recent_downlinks и т. д., также имеет смысл хранить их в списках вместо маршалированных протоколов - это означает, что нам на самом деле не нужно запрашивать существующие сообщения, а просто добавить новое, что намного эффективнее, но давайте начнем с прототипа и продолжим.
Учитывая, что у нас есть маски полей, разделение прототипа будет довольно простым и полностью обработано реализациями реестра Redis.

Итак, мы предлагаем:

  • ns:devices:uid:foo:bar:recent_uplinks
  • ns:devices:uid:foo:bar:recent_downlinks
  • ns:devices:uid:foo:bar:mac_state:recent_uplinks
  • ns:devices:uid:foo:bar:mac_state:recent_downlinks
  • ns:devices:uid:foo:bar:pending_mac_state:recent_uplinks
  • ns:devices:uid:foo:bar:pending_mac_state:recent_downlinks
    ...
  • ns:devices:uid:foo:bar - остальная часть прото

Миграция будет происходить автоматически, аналогично тому, как устаревшие поля уже обрабатываются в реестрах.

Какой здесь статус?

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

Пожалуйста, постарайтесь сделать возвращаемую ошибку более понятной, если устройство не может быть сопоставлено. См., Например, https://github.com/TheThingsNetwork/lorawan-stack/issues/2394.

Мы не можем предоставить полный объем информации, но device_not_found подразумевает, что устройство не может быть найдено, хотя может случиться так, что DevAddr вообще не найден, что MIC не совпадает с найденными записями и / или что FCnt сбрасывается, пока это не разрешено с найденными записями.

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

Была ли эта страница полезной?
0 / 5 - 0 рейтинги