我们正在重新设计一个脱节的实时 OPC 系统,该系统已被证明很麻烦。我们的技术堆栈是 C#、.NET 4 和 SQL Server 2008 R2,托管在 32 位 Windows Server 2003 上。物理架构目前规定所有层都托管在单个服务器上,尽管有足够的动力(阅读:ROI)这可能增加到2。
现有的基本架构是:
- 外部 OPC 设备调用我们的 Web 服务以使用实时数据填充 SQL,大约每秒 300 个事件。我们在这里无法控制容量或批处理,尽管在重写时我想在 Web 服务中实现批处理,以使 SQL 免受每秒 300 个插入语句的影响。
- SQL 被用作执行从警报到报告的任务的各种组件(总共大约 9 个,全部重新设计)的中心资源。这是目前现有设计的最大问题,因为所有这些组件都没有通过单个 BLL 甚至 DAL 来消费/操作数据或管理行为。
- 组件范围从 Windows 服务到 Web 服务再到 Windows 应用程序。CPU 时间和 SQL 连接的最大消耗者是一个 Windows 窗体应用程序,它监视所有实时数据并根据需要发出警报。它还可以生成实时趋势图,运行起来非常昂贵。
对于重写,对 WPF 的推动力很大,除了学习曲线之外,我没有任何问题。我的问题更关心底层架构:
- 我目前正在研究如何实现单个 DAL 和 BLL。对于 DAL,我倾向于 EF 或 nHibernate,Linq-to-SQL 也是一种可能。
- 对于 BLL,我只有 CSLA.NET 方面的经验,我担心这对于速度和资源消耗至关重要的系统来说可能有点过头了。
是否有人对类似系统有任何经验,并愿意分享一些经验教训或设计指南?