用于分布式应用的高性能中间件通信

时间:2011-06-09 12:35:28

标签: .net wcf

我正在设计一个分布式架构,我们将拥有一个Web前端(可能是ASP.NET MVC,最终也是ExtJS),然后将一定数量的应用程序模块作为后端服务,我的想法是完全免费部署这些一个或两个或3个不同服务器中的.NET服务,因此我可以在多台机器之间分配工作负载。

我应该使用哪种技术在这些后端服务之间进行编写和通信?

例如,如果我为我的业务逻辑(.NET类库)编写.NET WCF包装器,我相信我可以更改绑定并在同一个框中使用命名管道以获得高性能,或者在多个服务器中部署时我只需更改配置文件中的绑定使用netTCP,一切都应该有效。

关于WCF服务本身,最好在IIS或自定义编写的Windows服务中托管它们吗?

我的观点是真正获得最高性能并设计可扩展且可靠的架构,同时不影响网络流量或延迟,这就是为什么我在考虑WCF与xml Web服务,使用二进制传输而不是SOAP。 / p>

谢谢,Davide。

2 个答案:

答案 0 :(得分:4)

“最高可能的表现”是一个模糊的目标,你永远不知道系统的最高目标是什么。您所能做的就是测量和测试,看看您的系统是否符合您的性能要求。

我建议使用WCF和IIS。更好的是,尝试系统的一小部分,作为所选技术的概念证明。然后分析一下,看看哪里/什么对你的要求来说太慢了。 WCF / IIS方法提供了最简单的实现和可维护性。然后,如果您发现IIS导致了太多限制(并且无法配置为删除这些限制,IIS有很多配置),那么您可以为您的服务进行自托管。此外,如果SOAP为您的要求使用了太多带宽,那么请尝试二进制传输。如果您可以预先实现系统的一小部分来进行这些测试,那么您可以避免一些返工。

答案 1 :(得分:1)

您是否希望API能够帮助您快速构建服务层,管理服务层,轻松地重新配置服务层等,或者您是否需要构建高性能服务层,其中必须避免所有不需要的服务?

WCF是用于构建服务层的通用(统一),可配置且高度可扩展的API。但是这些配置,可扩展性,统一都有成本。第一个成本是API的复杂性,这非常有趣,因为当API不可扩展时,开发人员会抱怨它,并且当它是可扩展的时,开发人员会抱怨它的复杂性和性能影响。

是的,所有这些都会影响性能。 WCF中有很多层,很多事情有时处理效率较低,无法维护统一的模型,可扩展性,配置等。

如果您真的需要高性能服务层,每一项性能下降都很重要,那么您必须按照客户的要求和期望建立自己的硬编码通信层。即便是最高性能也无济于事。如果客户要求履行,他必须以可衡量的方式指定要求 - 例如:

  • 系统必须能够提供xxx并发请求
  • 提供请求的平均时间必须为xxx ms
  • 提供请求的最长时间必须为xxx ms

也无需针对尚未定义的要求优化应用程序