私は車両を追跡するためのアプリケーションに取り組んでいます。約10k以上の車両があります。それぞれが毎分最大 250 バイトを送信します。データには、GPS 位置と CAN バスからのすべてのデータが含まれます (車両コンピューターとダッシュボードから読み取ることができるすべてのデータ)。データは GSM/GPRS (UDP プロトコルを使用) によって送信されます。このデータの 1 日あたりの推定行数は、約 2000k です。
3 つのメイン ブロックが表示されます (ブロック -> メイン モジュールを意味します)。
1. マルチスレッド ソケット サーバー (MSS) - 持っています。MSS は、受信したデータを (NServiceBus を使用して) キューに格納します。
2. ルール プロセッサ サーバー (RPS) - これはこのシステムの中核です。このブロックは、受信したデータの解析、データベースへの保存、ルールの処理、Notifier Server へのメッセージの送信 (電子メール/SMS テキストの送信) を担当します。
ルール例。先に述べたように、受信バイトには現在の速度に関する情報があります。速度が 120 を超えると、指定したユーザーに対して Web アプリケーションでアラートを表示し、電子メールを送信し、SMS テキストを送信します。
(同じマシン上に RPS の複数のインスタンスが存在する可能性があります)。
3. Web アプリケーション - ユーザーによるルールのレポートと定義、アラートの監視などを可能にします。
RPS と Web アプリケーション間の通信を設計する方法についてアドバイスを求めています。
いくつかの質問:
Web アプリケーションと RPS はデータベースを分離する必要がありますか、それとも 1 つの中央データベースで十分でしょうか?
Web アプリケーションに 1 つのドメイン モデルがあります。中央データベースが 1 つある場合、RPS で同じモデル (オブジェクト) を使用できますか? では、変更されたルールを RPS に送信するにはどうすればよいでしょうか。
このブロックを可能な限り切り離すようにしています。クライアントごとに異なるアプリケーションのインスタンスを作成する予定です (各クライアントには別々のデータベースがあります)。あるクライアントは 10,000 台の車両を所有し、他のクライアントは 100 台しか所有しません。