简单的.net方法在两个应用程序服务器之间共享负载

时间:2011-05-04 13:59:54

标签: .net architecture

这个问题更多的是基于架构的问题。我想要一些使用.net技术的解决方案。我还想将数据库操作保持在最低限度。这意味着我不希望对数据库进行过多的状态轮询等等

我有两个应用程序服务器(基于Windows 2003服务器),我想在其上进行某种类型的负载平衡。为了讨论,我们称之为AppX1和AppX2。该应用程序还使用SQL Server来存储和检索。

我有一些要处理的位置信息,数据来自excel文件。来自excel文件的数据将首先通过Windows服务加载到数据库中。

我想要一个简单的方法,我可以在两个应用服务器之间分配处理负载。也许AppX1可以成为主人,AppX2也可以成为奴隶。 AppX1可以与AppX2通信以处理某些位置。 实现此沟通的最佳方式是什么? WCF是一个选项吗?

AppX2完成后,它会将信息转储回数据库并通知AppX1。然后,AppX1可以向AppX2发送更多位置进行处理。

2 个答案:

答案 0 :(得分:0)

我不知道你是如何从Excel文件中读取数据的,但原则上我会做这样的事情:

尝试专门打开电子表格进行读/写,出错(文件已打开)等待一段时间再重试打开。

读取尚未处理的下一组数据。将此数据标记为已处理(例如,在电子表格中有“已处理”列)。保存电子表格并关闭它。

现在处理数据并将结果写入数据库。

使用此机制,应用程序服务器不会直接相互通信 - 电子表格用于共享它们之间的工作。

如果您想获得更多花哨,电子表格中的已处理列可能有3种状态:未处理,待处理和已处理。获取数据时,将列设置为“待定”,一旦结果写入数据库,再次打开电子表格并将列设置为“已处理”,同时获取下一组(未处理)数据

答案 1 :(得分:0)

我不会在服务器上划分您的功能,而是在不了解系统的更多/更深层细节的情况下,实现无状态服务调用,服务实现中的多线程行为(在.NET中非常容易)和单个实例/多个并发服务主机。然后使用实际负载均衡器,甚至只使用Windows NLB,在服务器之间拆分呼叫,以最有效的方式在单个服务器上提供单个呼叫。