. net分布式分层应用程序

本文关键字:应用程序 分层 分布式 net | 更新日期: 2023-09-27 18:01:46

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

假设我有一个MVC web应用程序,有4个项目,即MVC (UI),业务,服务和数据。如果所有的类库dll都在一个服务器上,那么一切都可以正常工作。

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

会有很多工作吗?

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

谢谢。更新:

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

. net分布式分层应用程序

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

是的,因为它们在不同的机器上,你需要某种通信机制,而不仅仅是简单的DLL调用。

或者我应该使用其他技术,如。net远程或Web API?

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

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

显然远程调用也会变慢,对性能有潜在的影响。

会有很多工作吗?

这将是更多的工作,在我看来,"更多的工作"应该是合理的。让你的架构尽可能简单或更好,只在真正需要的时候复杂。

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

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

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

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

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

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

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

如果你在这种情况下,例如,你有一个网站,但也必须暴露一个web api;您可以选择让网站使用web api。事实上,你的网站将变成一个非常薄的层(可能甚至不使用ASP)。. NET MVC),因为大部分逻辑都在web api中。

. net远程是老技术,考虑WCF或Web API代替。