【问题标题】:High performance middleware communication for distributed application分布式应用的高性能中间件通信
【发布时间】:2011-06-09 12:35:28
【问题描述】:

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

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

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

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

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

谢谢,大卫。

【问题讨论】:

    标签: .net wcf


    【解决方案1】:

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

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

    【讨论】:

    • 完全同意。从更简单的实施选项开始,您可以在解决这些问题之前测试和测量性能,只要您开发服务时始终牢记未来的变化(特别是在处理托管架构时)
    【解决方案2】:

    您是希望 API 帮助您快速构建服务层、管理服务层、轻松重新配置服务层等,还是需要构建高性能的服务层,避免一切不必要的事情?

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

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

    如果您真的需要高性能服务层,而每一次性能下降都很重要,那么您必须完全按照客户的要求和期望构建自己的硬编码通信层。即使是最高可能的性能也算不了什么。如果客户对性能有要求,他必须以可衡量的方式指定要求 - 例如:

    • 系统必须能够处理 xxx 个并发请求
    • 服务请求的平均时间必须是 xxx 毫秒
    • 服务请求的最高时间必须是 xxx 毫秒

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

    【讨论】:

    • 感谢详细而深入的解释,我根本没有这些要求,但我想将架构设计得坚如磐石并且性能良好,目前在应用程序中我们必须替换为新的,我们每天有 700 次保存,这意味着用户单击保存并通过 MS DTC 执行分布式事务。目前我们有一个胖 Windows 窗体应用程序,我面临的挑战是设计新的解决方案来处理更高的流量和更快的速度。
    • 更高的流量和更快的速度仍然不是很好的要求。它可能意味着快 10% 左右或快 10 倍。您应该知道当前应用程序中的处理时间并定义一些目标。原因是要求越高,您必须构建的解决方案就越复杂 = 解决方案将花费更多成本并花费更多时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-29
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 2012-02-01
    相关资源
    最近更新 更多