Lorawan-stack: デバイスマッチングを最適化する

作成日 2020年06月05日  ·  5コメント  ·  ソース: TheThingsNetwork/lorawan-stack

概要

ネットワークサーバーでデバイスマッチングを最適化する

なぜ私たちはこれが必要なのですか?

Redis I / Oの場合、DevAddrの再利用を増やし、DevAddrのサイズを増やすと、メモリ使用量と全体的なコンピューティングパフォーマンスが向上します。

すでに何がありますか? あなたは今何を見ていますか?

現在、NSはDevAddrによってデバイスにまたがり、プロトをデコードします。 プロトは大きく、mac状態と最近のアップリンクおよびダウンリンクメッセージが含まれています。さらに、重複するDevAddrのプロト(数百)が多数存在する可能性があります。

何が欠けている? あなたは何が見たいですか?

一致したデバイスをロードする前に、UIDによってデバイスへのアップリンクを一致させるためのRedisのマテリアライズドビューが必要です。

これをどのように実装することを提案しますか?

マッチングに関連する情報を専用キーに保存します。基本的には、DevAddr、FCnt、NwkSIntKeys、およびUIDです。

ソートされたセットやハッシュマップは、FCntによるRedisのソートとfrom-queryを可能にし、整合性キーとUIDを取得できるので便利です。

各アップリンクおよびjoin-acceptでこのマテリアライズドビューを更新します。

既存のマッチングスキームへのフォールバックを伴うローリング移行を行うことができます。

これをどのようにテストすることを提案しますか?

ユニットテスト。テストでRedisキーとその値をアサートする可能性があります。

これを自分で行い、プルリクエストを送信できますか?

レビューできます

network server performance in progress scalability

全てのコメント5件

より良いアプローチは、別の方法でこれに取り組むことだと思います。これにより、一般的なケースでもパフォーマンスが向上します。つまり、スペースを消費するデータをプロトから分割し、それらを別々に保存します。つまり、 recent_uplinksrecent_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がリセットされたが、見つかったエントリでは許可されていない。

良い提案ですが、比較的複雑な機能がたくさんあるレビューするのは巨大なPRになるので、次のステップとしてそれを行うのが最善だと思います

このページは役に立ちましたか?
0 / 5 - 0 評価