最近ある工事業者から受けた相談と面白い話。
一つはipカメラとNVRの組み合わせでトラブルが多発して営業が積極的になれない。
インストールが終わり稼働に入ってから、カメラの切断現象ランダムが発生し困っている。
回復にはNVRのリスタートかネットワークスイッチのリスタートが必要との事。
何が原因だろう? とのことでした。
NVRのリスタートはともかくネットワークスイッチをリスタートして回復するという事は基本的なネットワーク障害のエラー処理がなされていない事が想定される。
このエラー処理というのが実はプログラミングの肝なのだ。
前提条件としてネットワークが100%、問題ないという前提だけでプログラミングするならこの様な問題は必然的に問題を抱え込む。
我々のような古い世代では通信イコール=internetではなく、RS-232Cとモデムによる通信が基本中の基本で学んできた。その頃はレイヤなどという定義もなく、アプリケーションでダイレクトに使用してきた。OSの基本であるリアルタイムモニターを使いだして、通信は割り込みレベルで処理され、アプリケーションは非同期処理が簡単に組み込めるように進化してきた。
同期処理と非同期の違いは単純に表現するとある処理が完了するまで待って処理する事が同期処理、非同期は待つことなく次の処理が可能になる。例としてはログインした時に接続が完了するまで一切の操作が出来なくなる。 もしネットワークに異常があった場合いつまでも接続が完了せず、さりとてその処理を終了させることも出来ない状態だ。
復旧させるには強制的にアプリケーションを終了させなければならない。
つまり、この問題のあるNVRアプリケーションはより複雑化したinternetプロトコルを処理しているプロセスで問題が発生してもそれと知らず結果を待っている状態で有る。
最悪な事にアプリケーション自身もエラー処理をきちんと処理せず、必ず正しい結果しかないという発想で設計されている。
非同期で設計されていても、エラー処理をきちんとしないと結果はイコールである。
同期で設計しても現在のOSはスレッドがサポートされているので、きちんと設計すれば問題はない。
アジア系のNVRは殆どがintel系ではなくRISCチップにLinuxを組み込んだ製品で、通信部分はプロトコルスタックとしてSocketが提供されている。
しかし、殆どのNVRはそのSocketレベルに直接アクセスして設計するのではなく、さらに上位のレイヤーを経由している。
ようするにブラックボックス化している。
そして、この問題をメーカーにぶつけた場合は特に問題は見つからない、ネットワークに問題があるのではが回答となる。
ネットワークスイッチをリスタートすると物理レベルのリンクが切れる為、NVRのコアの処理が物理的にそれを検知して初期化プロセスを経由し(アーパブロードキャストにより、MACアドレスの登録処理)システムは一旦正常な状態に回復するのである。
この問題の解決には高度なネットワーク知識が必要で、実際の現場で使用されているネットワーク上のパケットを全キャプチャーする必要がある、これは難してことではないが、その障害が発生するタイミングの前後のキャプチャーが大変な労力となる。
このバッケとが何を意味して何が起きているのかを理解できる技術者はごく限られている。
そして、最悪な事はこのデータをメーカーに提出しても簡単には解決しない事である。
何故かメーカーと言えども、NVRをきちんと開発レベルで全てを理解している事は稀で、OEM製品の場合はそのOEMメーカーでないと殆どはわからない。
その、OEMメーカーであっても全てを開発しているかはわからないのである。
佐々木
コメントをお書きください