.NET 分布式分层应用程序
Posted
技术标签:
【中文标题】.NET 分布式分层应用程序【英文标题】:.NET distributed layered application 【发布时间】:2014-05-05 08:28:53 【问题描述】:多年来,我一直在使用 .NET 开发 n 层应用程序。但我仍然不知道如何将层/层 (dll) 分发到其他服务器。
假设,我有一个包含 4 个项目的 MVC Web 应用程序,即 MVC (UI)、业务、服务和数据。如果所有类库 dll 都在一个服务器中,一切都会正常工作。
如果我想通过将服务层 (dll) 和数据层 (dll) 分发到其他 2 台服务器来扩展应用程序,我是否应该将类库转换为 WCF 服务库项目(使用 TCP 或管道作为通信协议更好的性能) ?或者我应该使用其他技术,如 .NET 远程处理或 Web API?
工作量会很大吗?
这是创建多层应用程序的目的之一吗?
谢谢。
更新:
您是否有任何链接(来自 Microsoft)详细解释了如何通过分发 DLL 将 n 层架构应用程序扩展到多个服务器?
【问题讨论】:
为什么不能复制其他服务器上的DLL?如果您使用 WCF/Web API,您的调用会更慢。拥有一个通用存储库并不是扩展的最佳方式,并且可能会影响您的 SLA 我可以通过添加更多 RAM 和 CPU 能力来“扩展”我的服务器,直到达到 IIS 服务器可以处理的限制。所以我需要通过添加更多服务器来“扩展”。我想将服务层和数据层分发到其他服务器以减轻我的 IIS 主服务器的负载。与在同一服务器上直接调用 dll 相比,在其他服务器上调用 WCF / Web API 肯定会更慢。但是在达到一台服务器的瓶颈后,别无选择,只能通过增加更多的服务器来横向扩展。 【参考方案1】:如果我想通过将服务层 (dll) 和数据层 (dll) 分发到其他 2 台服务器来扩展应用程序,我是否应该将类库转换为 WCF 服务库项目(使用 TCP 或管道作为通信协议更好的性能)?
是的,因为它们位于不同的机器上,所以您需要某种超越简单 DLL 调用的通信机制。
或者我应该使用其他技术,例如 .NET 远程处理或 Web API?
您选择哪种方法取决于许多因素,例如复杂性、性能...有很多选项,例如
WCF 网络服务 使用 WebApi 进行简单的 REST 调用 消息总线,即NServiceBus ...显然,远程调用也会变慢,对性能等有潜在影响。
工作量会很大吗?
这将是更多的工作,我认为“更多的工作”应该是合理的。使您的架构尽可能简单或更好,仅在真正需要的情况下复杂。
另一种方法是使用一些部署管道,将整个应用程序部署在不同的服务器实例上,并采用一些智能负载平衡策略。在这种情况下,您唯一需要注意的是在您的实例之间正确共享会话(无状态会更好;))。
【讨论】:
如果我错了,请纠正我。据我所知,使用 TCP 协议的 WCF 服务库将是远程 DLL 调用的最快方式(与 .net 远程处理、SOAP Web 服务和 REST Web API 相比)。 IIS 服务器和 DLL 服务器应紧挨着使用网线(Cat 5)连接。 @EpoWilliam 当然,但是我从来没有自己尝试过(还)。【参考方案2】:我的 50 美分... 据我所知,WCF 取代了 .NET Remoting (MSDN)。
不管怎样……我之前有人说过。如果您不必扩展应用程序,请不要这样做。任何类型的服务之间的通信成本都会大大减慢速度。可能在某种程度上,它会比现在慢(我假设这是扩展的原因)。
在扩展之前,我会先看看瓶颈到底在哪里。例如,如果问题是您的数据库服务器,那么将服务和数据层移动到另一台服务器是没有用的,因为您仍将使用相同的数据库。所以,你需要先弄清楚你的瓶颈是什么。
最简单、最不痛苦的扩展方式(在我看来)是添加另一个 IIS 服务器和一个负载平衡器,将流量引导到其中一个。您需要将会话存储在数据库中或使用专用服务器,但这就是您需要的所有更改。另外,如果您的其中一台服务器出现故障,其中一台仍然可以运行。
【讨论】:
【参考方案3】:默认情况下,避免过早优化。
如果你有一个唯一的网站,我会尽可能简单,只创建逻辑分层。有许多选项:典型的 3 层、洋葱架构等。关键是,以后如果真的需要,您仍然可以重构代码并使数据层成为单独的 物理 层。但除非你正在创建一个新的亚马逊之类的东西,否则情况可能并非如此。
如果你处于这种情况,例如,你有一个网站,但也必须公开一个 web api;您可以选择让网站使用 web api。事实上,您的网站将成为一个非常薄的层(甚至可能不使用 ASP.NET MVC),因为大部分逻辑都在 web api 中。
PS - .NET 远程处理是 old technology,请考虑使用 WCF 或 Web API。
【讨论】:
以上是关于.NET 分布式分层应用程序的主要内容,如果未能解决你的问题,请参考以下文章
重新整理 .net core 实践篇—————应用分层[二十四]