Woelfel社のWendelinプロジェクトで私たちが最初に学んだことはデータバッファリングの大切さです。これはまだ接続する何かを開発する人たちにあまり良く知られていません。
接続する何かの設計をするエンジニアの大半はセンサーから送られてくるデータが少し失なわれてもたいして問題ないと考えがちです。彼らはMQTTのような標準的なプロトコルを頼ります。しかしそういうプロトコルはセンサーからビッグデータセンターに送られたデータが全て届くことを保証しません。よく信じられている、少しデータが欠落しても構わないということ、これが結果的に、異常の発生と関連があるとても重要なデータを取得できないということに繋がります。これはマーフィーの法則と直接因果関係があります:システムやネットワークの異常事態は同時に起きる傾向がある。さらに、データを失なっているということは、つまりデータセンターで収集している信号はもう完全ではないということです。そうなるとデータ処理はもっと複雑になります。なぜならデータサイエンティストは接続が切れていたことによる異常状態を除いて、データの中で意味のある異常状態だけを見つけないといけないからです。
バッファリングの大切さはデータサイエンティストたちがセンサーを再起動したあとに少しデータが欠けたことに文句を言ったことで分かりました。、結局、データが欠けることは許されないのです。
99.999%かそれに以上データ転送が正しく行える簡単な方法はバッファリングです。この図で説明します。
左のシステムはバッファリングを使っていません。
右のシステムはデータを永続的なキューとしてローカルのファイルに書く方法のバッファリングを使っています。このキューはビッグデータセンターがデータを受信したことを確認したときだけ空になります。
この図は3つの状態を表しています。ネットワークに接続している状態。ネットワークが切断している状態。ネットワークが再接続している状態。
左側で受信した信号が不完全で右側で信号が完全なのが分かります。
左側で不完全な部分の信号は平均的な値で埋められます。これはセンサーから届く異常な信号を検知する妨げになります。右側では正しく表示されています。
Wendelinの仕組みではバッファリングはトレジャーデータ社が作ったfluentdプロトコルで行います。fluentdの実装にはRubyとCがあります。Nexediは最近QUICプロトコルをfluentdに加える仕事をしています。QUICはTCPとHTTPとTLSのオーバーヘッドをほとんど取り除いてよりよいパフォーマンスと同等のプライバシーを確保するプロトコルです。
完璧にきれいなデータであるために、バッファリングだけでなくビッグデータセンター側でトランザクション管理も必要です。トランザクション管理で一度データセンター側で受けとったデータは完全に保存されてセンサーバッファからは削除していいことを保証します。トランザクション管理はWendelinとリレーショナルデータベースの標準機能です。しかし大抵のデータベース技術やFTPやSFTPのようなファイル転送プロトコルにはその機能はありません。