2017-11-28 6 views
0

私はリモートデバイスから位置情報を受け取るMosquittoブローカーを持っています。IoTポジションデータのプライマリデータストアとしてNATS Streaming Serverを使用していますか?

私はこのデータを他のマイクロサービスで処理するためにどこかに保存する必要があります。

現在、ブローカにサブスクライブし、バッチでPostgresデータベースに書き込むNode.jsプロセスがあります。

Devices -> Mosquitto -> DB writer -> (source-of-truth) Postgres 

(source-of-truth) -> Service A 
        -> Service B 

しかし、私が見ている問題は、この位置データを処理する必要がある他のサービスが、Postgresデータベースを照会する必要があることです。

制約事項:これはオンプレミスな展開のため、できるだけ少なくすることが理想的です。データベースを持つ1つのVM、おそらく顧客が管理するデータベースへのリンクです。

センサデータの真実の源としてのデータベースの代わりに、カフカのようなイベントログ/イベントソーシング手法があります。次にブローカーに加入者が1人あり、すべてのマイクロサービスはそこから読み取って、どこに行けば中断したのか分かります。

オンプレミスなので、私はKafkaよりも軽いものを望んでおり、NATS Streaming Serverを見つけました。

NATSイベントログは、データストアを使用して設定することで永続化できます。現在のところ、単純なファイルストアとSQLストアをサポートしています。

SQLストアを使用した場合、生のメッセージをデータベースに保存し、データベースから読み込んでから再度保存し、パフォーマンスに悪い時間がかかるようです。 SQLストアインターフェイスには独自のバッチ処理も実装されています。私はファイルストアを真実の源としてどれだけ信頼しているかわからない。

これは実行可能なアプローチですか?

答えて

0

NATSストリーミングでは、MaxInflightとManualAckModeでサブスクリプションを作成することで、「バッチごとに」メッセージを消費することができます。サーバーは、クライアントからの対応するメッセージ確認を受信せずにMaxInflightメッセージ以上を送信しません。

保存する前に変形が必要な場合、私はあなたのプロセスを理解しています。ただし、NATSストリーミングサーバーからFileStoreまたはSQLStoreを信頼しない場合は、まずNATS Streamingを使用するのはなぜですか?つまり、ストアはNATSストリーミングサーバーを作成した同じ人(私を含む)によって実装されました;-)

+0

キャッシングの動作に関するSQLストアの実装に関する詳細はどこにありますか? – vaughan

+0

ここにいくつかの情報がありますhttps://github.com/nats-io/nats-streaming-server mysqlとpostgres atm – Chadit

+0

これを確認してください:https://github.com/nats-io/nats-streaming-server#sql -store-options。つまり、実装の詳細です。また、各操作をSQL文の実行に変換させたい場合は、コマンドラインから '-sql_no_caching = true'を使用してキャッシングを無効にすることができます(設定ファイルのSQL設定セクションの' no_caching':https://github.com/nats -io/nats-streaming-server#コンフィギュレーションファイル) –

関連する問題