1999年に「Internet of Things」という言葉が生まれて18年。今現在、IT業界においてIoTという言葉は、聞かない日はないというほどの盛り上がりを見せています。「果たしてIoTとは何なのか」、そんなIoTの本質を少し紐解いてみたいと思います。
IoTアーキテクチャ入門 コラム一覧
IoTシステムでのファイル転送
前回は、どのようなプロトコルを採用するにしても、構築する IoTシステムの置かれる状況に合わせて様々な欠点をカバーする必要があることを記載しました。
いくつかのプロトコルや転送手段が登場してきましたので、それらを3つに分類し、それぞれ開発のしやすさや IoTで求められる要件にどれだけ応えられるかを表にしてみます。
柔軟性 | 拡張性 | 軽量 | 到達保証 | |
---|---|---|---|---|
汎用データ転送(HTTPなど) | ○ | ○ | △ | ○ |
メッセージ転送(MQTTなど) | △ | △ | ◎ | ○ |
ファイル転送(FTP、SCPなど) | ○ | ◎ | ○ | ○ |
IoTというとMQTTかHTTPが採用されることが多いと思います。
たとえばHTTPは汎用性が高く、IoTに限らずさまざまなシーンで使われます。MQTTは非常に軽量で、不安定なネットワークに対する考慮もされており、IoTシステムでは魅力的なプロトコルと言えます。
さらにもう一つの別の転送手段として、ファイル転送にも注目すべきだと思います。
ファイル転送は、IoTで特に注目されるということは少ないですが、ファイルシステムという非常に強力で基本的な考え方に則るからこその使いやすさや、拡張しやすさがあります。
そこで、IoTシステムでファイル転送を採用するとき、どのような使い方ができるか、または考慮が必要かを検討していきたいと思います。
IoTシステムでのファイル転送
まずは、作ろうとするシステムをイメージしやすくするために、ファイル転送を行うケースをいくつか図にしてみます。
センサーデータがそもそもファイルに出力される
送信デバイス内でセンサーデータを随時ファイルに書き込むパターン
センサーデータが特定のファイルに次々と追記されていくイメージです。
センサーデータをある程度まとめて転送したい
送信デバイス内でセンサーデータを加工してまとめて転送するパターン
センサーデータをある程度フィルタリングしたり、集計した結果をファイルに出力し、ある程度まとめて転送するイメージです。
ファイル転送を行うための考慮ポイント
ではこれらのケースでファイル転送を行うときに、どのような考慮が必要か検討していきたいと思います。
データの欠損
たとえば、Using Gatewayパターンで、データをある程度まとめて送る、フィルタリングしてから送る、集計してから送る、など IoTゲートウェイにルーター以上の役割がある場合、一度に送るデータの重要性は高まります。
データの欠損をできるだけ防ぐ方法としては、データを送る側と、受け取る側でファイルサイズ、あるいはハッシュ値などを突き合わせるという方法が考えられます。
通信速度
ファイル転送に限った話ではありませんが、いわゆる回線が細いという状況では、データの圧縮が欠かせません。
また、たとえば大量に溜まったログファイルを送りたいとなったときに、データを受けるサーバーに掛かる負荷分散したり、回線の専有を防ぐために、データを分割して送ることを検討する必要が出てきます。
マシンリソース
ファイル転送のときに考慮すべきなのは、転送に時間がかかることで、後続のデータ生成処理が滞ってしまうことです。
IoTゲートウェイのようにマシンリソースが一般的なサーバーよりも限られている場合、圧縮、暗号化、などを含めて転送にかかる時間は増えると思います。そのような状況で、同じファイルに次々センサーデータが上書きされてしまうというような状況の場合、データの出力を阻害しないような工夫が必要になります。
たとえば、転送の直前に転送対象のファイルをリネームするなどの対応が考えられます。
到達保証
TCP上のプロトコルであれば、データが到達したかどうかは基本的には保証されます。そのため、一連のデータ送信で送りたいデータを重複なくかつ、欠けることなく遅れることができたのかを保証できることが重要になると思います。
たとえば、ネットワークが切断され再接続後、データの再送信を行ったときに、再送信する範囲が間違うことを防ぐ必要があります。
リアルタイム性
ファイル転送を使用して高頻度でデータを転送し、受信側のサーバーで常に同じファイル名でデータを受け取ると、データを捌ききれていないのに上書きされてしまうという状況が発生しかねません。
そのような状況を回避するためには、受信するファイル名を少しずつ変えて出力し、データの分析が終了したらファイルを削除するなどが考えられます。
また、別の観点として、大量のアクセスに耐えられる構成が取れるかを考慮する必要もあります。ファイル転送であれば、一度データはファイルシステムに出力されますので、その後をどうのように分散させるかも考える必要があります。
考慮ポイントをまとめて図にしてみます。
IoTシステムにおけるファイル転送時の考慮ポイント
まとめ
IoTシステムでは、どのようなプロトコルを採用するにしても、不安定なネットワークや、マシンリソースなど、さまざまな制約をクリアしていくために工夫が必要になります。
これまでに述べてきたように、ファイル転送についても適切な工夫を行うことで、IoTシステムにマッチした転送手段として採用することができます。
IoTという文脈ではさまざまなシーンが想定され、どんなシーンでもこれを使えば良いというような画一的な転送手段が決まりにくいので、広くさまざまな選択肢を検討していくことが重要です。