.NET分布式应用程序

时间:2014-05-05 08:28:53

标签: c# wcf distributed

多年来,我一直在使用.NET开发n层应用程序。但我仍然不知道如何将层/层(dll)分发给其他服务器。

假设我有一个包含4个项目的MVC Web应用程序,即MVC(UI),业务,服务和数据。如果所有类库dll都在一个服务器中,一切正常。

如果我想通过将服务层(dll)和数据层(dll)分发给其他2台服务器来扩展应用程序,我应该将类库转换为WCF服务库项目(使用TCP或管道作为通信协议更好的性能) ?或者我应该使用其他技术,如.NET远程处理或Web API?

这会有很多工作吗?

这是创建多层应用程序的目的之一吗?

感谢。

更新

您是否有任何链接(来自Microsoft)详细解释如何通过分发DLL将n层架构应用程序扩展到多个服务器?

3 个答案:

答案 0 :(得分:2)

  

如果我想通过将服务层(dll)和数据层(dll)分发给其他2台服务器来扩展应用程序,我应该将类库转换为WCF服务库项目(使用TCP或管道作为通信协议更好的表现)?

是的,因为它们位于不同的机器上,所以需要某种通信机制,而不仅仅是DLL调用。

  

或者我应该使用.NET远程处理或Web API等其他技术吗?

您选择哪种方法取决于许多因素,如复杂性,性能......有很多选项,如

  • WCF webservices
  • 使用WebApi进行简单的REST调用
  • 消息总线,即NServiceBus
  • ...

显然,远程调用也会对性能等产生潜在影响较慢。

  

这会有很多工作吗?

更多工作,在我看来,"更多工作"应该真的有道理。保持您的架构尽可能简单或更好,只有真正需要的复杂。

另一种方法可能是拥有一些部署管道,将整个应用程序部署在不同的服务器实例上,并具有一些智能负载平衡策略。在这种情况下,你唯一需要注意的是正确地分享你的实例之间的会话(无状态会更好;)。)

答案 1 :(得分:0)

我的50美分...... 据我所知,WCF取代了.NET Remoting(MSDN)。

无论如何......有人在我面前说。如果您不必扩展应用程序,请不要这样做。任何类型的服务之间的通信成本将大大减慢速度。可能在某种程度上,它会比现在慢(我假设是缩放的原因)。

在扩展之前,我首先会看到瓶颈在哪里。例如,如果问题是您的数据库服务器,那么将服务和数据层移动到另一台服务器是没用的,因为您仍将使用相同的数据库。所以,你需要先找出你的bottelneck是什么。

最容易和最不痛苦的扩展方式(在我看来)只是添加另一个IIS服务器和负载均衡器,可以将流量引导到其中任何一个。您需要将会话存储在数据库中或使用专用服务器,但这是您需要的所有更改。另外,如果您的某个服务器出现故障,则仍会运行。

答案 2 :(得分:0)

默认情况下,避免过早优化。

如果您只有一个网站,我会尽量保持简单,只创建逻辑分层。有很多选择:典型的3层,洋葱架构等。关键是,如果确实需要,您仍然可以重构代码并使数据层成为单独的物理层。但除非您正在创建新的亚马逊或其他东西,否则情况可能并非如此。

如果您处于这种情况,例如,您有一个网站,但也必须公开网络API;您可以选择让网站使用网络API。事实上,您的网站将成为一个非常薄的层(可能甚至不使用ASP.NET MVC),因为大多数逻辑都在web api中。

PS - .NET远程处理是old technology,请考虑使用WCF或Web API。