【发布时间】:2011-08-27 19:38:41
【问题描述】:
我使用 WCF 4.0,并且对如何从技术角度构建服务有很好的了解。我已经在 WCF 工作了 3 年了。
尽管如此,我和其他与我交谈的人对于什么应该是构成服务的软件单元以及什么不应该有不同的想法。与我交谈过的许多人都认为服务应该是细化的。事实上,我以前的公司花了很多时间将他们的一些装配转变为服务(有人告诉我)。
在许多情况下,我看不出一项服务如何更好......也许并不总是应该如此。我给你举个例子:在我们的系统中,我们有一个大型服务,它确实已经发展到可以执行两种不同的独立工作。我将把它分成两个服务有两个原因:性能和故障隔离(我们自己托管在 Windows 服务中,没有 IIS)。问题是,尽管服务于两个独立的业务流程(一个服务可以关闭而不影响另一个),但两者都有相当多的共同业务逻辑。
现在有人建议我,这个通用逻辑应该被分离到 SOA 主体下的第三个服务中,并由两个新拆分的服务使用。在我看来,这只是部分抵消了拆分大服务的好处:我们引入了性能瓶颈和单点故障。如果第三个服务的宿主进程宕机了,那么 1 和 2 就不能再做它们的工作了。这种情况现在发生在我们身上,我们拥有许多服务的“深层”结构。一个出去,链上的任何依赖服务都超时,因为它们的呼叫永远不会得到应答。
现在,如果通用逻辑只是一个库而不是服务,我们将受益于代码重用、没有性能瓶颈和故障隔离,因为每个服务都在自己的内存中执行自己的程序集副本。也没有序列化开销。
人们对此有何看法?在决定什么时候应该是服务或图书馆时,是否有规则或一般准则?还有其他建议吗?
谢谢 迈克尔
【问题讨论】: