0

UDPソケットを介して約1000台の患者モニターを同時に制御するプログラムをLinuxで作成しています。メッセージを解析して送信し、単一の患者モニター デバイスからデータを収集するためのライブラリの作成に成功しました。デバイスには、以下にリストされているさまざまなスケジューリングの制約があります。

  • 各デバイスは、最大 300 ミリ秒 (デバイスによって異なる場合があります) 内にコンピュータ クライアントから常にアライブ リクエストを取得する必要があります。そうしないと、接続が失われます。
  • コンピュータ クライアントは、一定期間内にデータをフェッチするために、ポーリング リクエストをデバイスに送信する必要があります。患者モニターから約 5 秒間の平均データをポーリングしているため、5 * 3 = 15 秒ごとにポーリング要求を送信する必要があります。15 秒以内にリクエストを送信できなかった場合、デバイスからの接続が失われます。

現在、現在のプログラムを拡張して、約 1000 以上のデバイスを同時に処理できるようにしようとしています。現在、私のプログラムは 1 つのデバイスからの応答を効率的に処理および解析できます。複数のデバイスを処理する場合、リモート コンピューターもデータを分析できるように、異なるデバイスからの複数の応答を同期し、それらをシリアル化し、TCP ソケット経由でストリーミングする必要があります。これは、複数のプロデューサーと単一のコンシューマーの問題としてよく知られているため、問題ではありません。私の主な関心事は、1000 以上のデバイスの接続を維持するためにどのようなアプローチを使用する必要があるかということです。

インターネットで読んだり、このウェブサイトで同様の質問を閲覧したりした後、主に2つのオプションを検討しています:-

  • デバイスごとに 1 つのスレッドを使用します。1000以上のデバイスを制御するために、私には実現不可能と思われる1000以上のスレッドを作成することになります。
  • 多重化アプローチを使用して、注意が必要な FD を選択し、一度に 1 つずつ処理します。どうすればいいのか、多重化のアプローチが上記の2つの定数を考慮してすべてのデバイスとの接続を維持できるかどうかはわかりません。

UDPソケットを介して1000以上のリアルタイムデバイスを制御する必要があるこの状況に対処する方法について、いくつかの提案とアドバイスが必要です. 各デバイスは、300 ミリ秒ごとに何らかのアライブ シグナルを必要とし (デバイスによって異なります)、アソシエーション フェーズで言及された時間間隔の約 3 倍でポーリング要求を必要とします。たとえば、ICU の患者モニターにはリアルタイム (平均 1 秒) のデータが必要な場合がありますが、一般病棟の患者モニターには 10 秒の平均データが必要な場合があるため、2 つのデバイスのポーリング期間は 3*1(3 秒) になり、それぞれ 3*10 (30 秒)。

ありがとうシヴァム・カルラ

4

1 に答える 1

3

ほとんどの場合、どちらのアプローチでも、説明した機能を少なくとも機能的に処理できますが、物事の音によって、パフォーマンスが重要な問題になります。あなたが提供した数字から、アプリケーションはCPUに依存している可能性があるようです。

マルチスレッドアプローチには、マシンで使用可能なすべてのCPUコアを使用できるという利点がありますが、マルチスレッドプログラムは、信頼性と堅牢性を高めることが難しいことで有名です。

また、Apacheの古い実証済みのフォークワーカーモデルを使用することもできます。たとえば、最大100台のデバイスを処理するための個別のプロセスを作成します。次に、プロセスへの接続のマッピングを管理するコードを作成する必要があります。

複数のホストといくつかのメカニズムを使用して、それらの間でデバイスを分散することもできます。これには、回復状況の処理が容易になるという利点があります。アプリケーションはミッションクリティカルである可能性があり、ハードウェアのいずれかが故障した場合に他のハードウェアが自動的に引き継ぐように設計する必要があるようです。

于 2012-05-23T06:29:20.163 に答える