現在、煩雑であることが判明しているばらばらのリアルタイムOPCシステムを再設計中です。私たちのテクノロジースタックは、32ビットのWindows Server 2003でホストされるC#、. NET 4、SQL Server 2008 R2です。物理的なアーキテクチャでは、現在、すべての層を単一のサーバーでホストするように指示されていますが、十分な動機付け(読み取り:ROI)があれば可能です。 2に増やします。
基本的な既存のアーキテクチャは次のとおりです。
- 外部OPCデバイスは、Webサービスを呼び出して、SQLにリアルタイムデータ(1秒あたり約300イベント)を入力します。ここでは、ボリュームまたはバッチ処理を制御できませんが、書き直しでは、1秒あたり300の挿入ステートメントからSQLを節約するために、Webサービスにバッチ処理を実装したいと思います。
- SQLは、アラームからレポートに至るまでのタスクを実行するさまざまなコンポーネント(合計で約9つ、すべて再設計される)の中心的なリソースとして使用されます。これは現在、既存の設計の最大の問題であり、これらすべてのコンポーネントがデータを消費/操作したり、動作を制御したりする単一のBLLやDALさえありません。
- コンポーネントの範囲は、WindowsサービスからWebサービス、Windowsアプリケーションまでです。CPU時間とSQL接続の最大の消費者は、すべてのリアルタイムデータを監視し、必要に応じてアラームを発生させるWindowsフォームアプリケーションです。また、実行にかなりの費用がかかるリアルタイムのトレンドグラフも実行します。
書き直しについては、学習曲線を除けば問題がないWPFへの強い推進力があります。私の質問は、基盤となるアーキテクチャにもっと関係しています。
- 私は現在、単一のDALとBLLを実装する方法についていくつかの調査を行っています。DALの場合、私はEFまたはnHibernateに傾倒しており、Linq-to-SQLも可能です。
- BLLの場合、私はCSLA.NETの経験しかありません。これは、速度とリソースの消費が重要なシステムでは、少しやり過ぎかもしれないと思います。
誰かが同様のシステムの経験があり、いくつかのレッスンや設計ガイドラインを喜んで共有しますか?