前提・実現したいこと
raspberry piで、ある測定を行い、得られる測定データの中でフィルタ条件を満たすものを、その都度、リアルタイムに通知したい。
・測定データは特定のフォーマットのテキストデータであり、軽量でメールに載せられます。
・測定データがフィルタ条件に一致するかの判定は、各測定データに対し、マルチスレッドを起動しており、同時並行的です。これを大量に取得される測定データに対して行い、フィルタ条件を満たすときは、メール通知しています。つまり、メール通知までもマルチスレッド化してます。
・メール通知までの一連のタスクの混雑の具合を見るため、
測定データの取得時刻と、それに対応するメールが作成完了する時刻も載せています。
・通信経路は暗号化を要求するので、現状ではpgpのメールで対応していますが、
メールを一件ごとに開く必要があり、使いづらいです。
そのため、表示を自由に変更可能なサーバに変更し、tlsへ移行するつもりです。
・rpi外のネットワークの品質には問題ないとします。
発生している問題・エラーメッセージ
上記のメッセージ配送の仕様のため、非力なrpiでは、短時間に連続でフィルタ条件を満たす測定データが取得されるとき、一気に大量のタスクキューがたまるためか、
それらの通知を見ると、測定データの取得時刻とメールメッセージ作成時刻が1,2分空いてしまっており、リアルタイム性がないです。
これは、rpiで大量のタスクキューを発生させた事が原因なのか、
1回のメール作成が負荷の原因であり、その他のメッセージ配送プロトコルを利用すれば改善されるかは不明です。
rpiのネットワークの遅延は問題ないので、rpiのcpuの問題です。
試す前にどのような機能を用いるべきか。
軽量のメッセージプロトコルとして,mqttやnanomsg,zeromqを考えています。
測定データを送信するrpiと、それを受信してwebアクセスしたユーザーに自由な形式(グラフとか)で表示するサーバのため、実質的には二者間通信であり、、ブローカーレスな構成です。
しかし、軽量のメッセージプロトコル以前に、例えば、最近5秒以内のフィルタ条件を満たす測定データはまとめて通知する、という方法にすれば、通知回数を減らして負荷を減らせるのでは、という期待もあります。(もちろん、遅延が最低でも5秒存在する事にはなるが)そのため、httpsでpost送信で対応すればよいのではとも考えました。
補足情報(FW/ツールのバージョンなど)
raspbian (stretch)
python 3.6
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。