【问题标题】:Separate WCF services for external vs internal clients OR single high performance service?为外部客户端和内部客户端分离 WCF 服务还是单个高性能服务?
【发布时间】:2016-03-29 15:59:04
【问题描述】:
我正在经历的架构决策之一是为几乎 90% 的相同功能构建 2 个服务与 1 个服务。这里的关键是性能因素。
2 个服务的逻辑是:
- 外部客户端服务性能更高
- 如果存在仅外部客户端需要的方法,那么这些方法可能是特定于该服务的。
- 将有一些用于核心 DAL、SAL 功能的通用 dll,供内部和外部服务使用。确保没有代码冗余。
1 项服务的逻辑:
- 如果外部和内部的功能差别不大,添加一些方法应该可以工作。
- 单一高性能服务,内部用户为什么要吃亏? :)
- 随着时间的推移,分支 2 个服务可能会增加更多开销和保持某些逻辑同步的风险,因为将涉及 2 个不同的团队。这可能会在类似的功能中产生差异。
对于这个经典的论点,是否有一个标准的行业范围的方法?
谢谢。
【问题讨论】:
标签:
c#
performance
web-services
wcf
architecture
【解决方案1】:
根据您的问题陈述,我想建议使用一项服务。
如果您为相同的功能使用两个服务,维护成本和服务的完整性可能会受到影响。此外,如果问题出在性能上,更好的解决方案是使用多个服务端点和负载平衡来提供有效的使用服务。
在实现中,您可能有两种不同的实现来迎合内部和外部用户(使用接口和覆盖功能),但所有用户都指向同一个服务
【解决方案2】:
我认为这在很大程度上取决于两个服务之间有多少通用功能和代码。如果 90% 像您建议的那样,为其他服务复制该代码似乎很愚蠢。此外,从维护的角度来看,这意味着每次外部和内部共同的更改都需要双倍的工作。
将仅外部客户端所需的功能与 1 个服务内部所需的功能分开应该相当简单(也许是接口?)。我认为此时更多的是仔细设计 1 个服务,而不是尝试创建和维护 2 个。