C# .NET分布式分层应用程序

C# .NET分布式分层应用程序,c#,wcf,distributed,C#,Wcf,Distributed,多年来,我一直在使用.NET开发n层应用程序。但我仍然不知道如何将层/层(dll)分发到其他服务器 比如说,我有一个包含4个项目的MVC web应用程序,即MVC(UI)、业务、服务和数据。如果所有类库DLL都在一台服务器中,则一切正常 如果我想通过将服务层(dll)和数据层(dll)分发到其他两台服务器来扩展应用程序,我是否应该将类库转换为WCF服务库项目(使用TCP或管道作为通信协议以获得更好的性能)?还是应该使用其他技术,如.NET远程处理或Web API 那需要很多工作吗 这就是创建多层

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

比如说,我有一个包含4个项目的MVC web应用程序,即MVC(UI)、业务、服务和数据。如果所有类库DLL都在一台服务器中,则一切正常

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

那需要很多工作吗

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

谢谢

更新:

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

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

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

还是应该使用其他技术,如.NET远程处理或Web API

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

  • WCF网络服务
  • 使用WebApi的简单REST调用
  • 消息总线,即
显然,远程调用也会变慢,对性能等有潜在影响

那需要很多工作吗

这将是更多的工作,在我看来,“更多的工作”应该是合理的。使您的体系结构尽可能简单或更好,只在真正需要时才尽可能复杂

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

我的50美分。。。 据我所知,WCF取代了.NET远程处理()

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

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


在我看来,最简单、最省力的扩展方式是只添加另一台IIS服务器和一个负载平衡器,将流量定向到其中任何一台。您需要将会话存储在数据库中或使用专用服务器,但这就是所需的全部更改。另外,如果您的一台服务器出现故障,其中一台仍将运行

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

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

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


PS.NET Rebug是,考虑WCF或WebAPI。

为什么你不能复制其他服务器上的DLL?如果您使用WCF/WebAPI,那么您的调用将变慢。拥有一个公共存储库并不是缩放的最佳方式,它可能会对SLAI产生影响。我可以通过添加更多RAM和CPU电源来“缩放”我的服务器,直到达到IIS服务器可以处理的极限。因此,我需要通过添加更多服务器来“扩展”。我想将服务层和数据层分发到其他服务器,以卸载我的IIS主服务器。与直接调用同一服务器上的dll相比,在其他服务器上调用WCF/WebAPI肯定要慢一些。但在达到一台服务器的瓶颈后,别无选择,只能通过添加更多服务器来扩展。如果我错了,请纠正我。据我所知,使用TCP协议的WCF服务库将是远程DLL调用的最快方式(与.net远程处理、SOAP web服务和REST web API相比)。IIS服务器和DLL服务器应该使用网线(Cat 5)相邻连接。@EpoWilliam sure,但我自己从未尝试过(至今)。