2011-05-18 152 views
4

我使用WCF 4.0进行工作,并从技术角度对如何构建服务有个很好的想法。现在我已经和WCF一起工作了3年。SOA:图书馆vs服务:图书馆可以是更好的选择吗?

尽管这样我和其他人我谈有什么应该是软件,构成了一个服务单位,什么不应该不同的想法。我所交谈的很多人都认为服务应该细化。事实上,我以前的公司花了很多时间把他们的一些会议变成了服务(所以我被告知)。

在许多情况下,我不能看到如何服务好......,也许它并不总是应该。我给你举个例子:在我们的系统中,我们有一个真正发展到执行两个不同独立工作的大型服务。我将它分成两个服务,原因有两个:性能和故障隔离(我们自己托管在Windows服务中,没有IIS)。事情是,尽管服务两个独立的业务流程(一个服务可能会关闭而不会影响另一个服务),但它们都具有相当一般的业务逻辑。

现在一些提醒我,这个共同的逻辑应该在SOA校长被分隔成3服务,并通过两个新分裂的服务消费。正如我所看到的,这只是部分解除了首先分裂大服务的好处:我们引入了性能瓶颈和单点故障。如果第三个服务的主机进程关闭,则1和2不能再继续工作。我们现在发生在我们拥有许多服务“深层”结构的地方。一个出去,任何依赖服务的链超时,因为他们的电话从来没有回答。

现在,如果公共逻辑只是一个库而不是服务,那么我们就可以获得代码重用的好处,没有性能瓶颈和故障隔离,因为每个服务都在自己的内存中执行自己的程序集副本。也没有序列化开销。

什么是人民对这个想法?在决定什么时候应该成为服务或图书馆时,是否有规则或一般准则?任何其他建议?

感谢 迈克尔

+0

+1优秀的问题 – 2011-05-18 07:16:41

回答

4

这是对使用服务的一个公平的说法,但正确的做法可能是使用一个服务总线。

然后,您可以运行多个服务,以满足您的“核心”功能。您可以获得冗余和可靠性(如果需要,甚至可以将流程1和流程2分配到不同的实例,但更愿意实现负载均衡),但您可以获得单独服务的松耦合和可维护性。

我相信SOA是一个伟大的原则,但需要非常小心的架构,并且很容易出错。如果你确实做错了,那么后果可能会很严重。

2

对于我来说,衡量一个图书馆或服务是否是一个给定问题的更好方法可能有两个关键的考虑因素。

首先是潜在的消费者:如果他们完全在你的控制之下,并且他们可以在托管过程中工作,那么图书馆将是一个合法的方法。如果没有外部消费的可能性,那么这可能是更好的选择,因为设计,开发和测试工作可能会大大低于同等服务。

二是API的 'granluarity'。服务需要架构以减少“讨厌” - 一个好的服务往往会有强大的操作,其行为根据消息内容进行调整。例如。Addorder(msg)vs CreateHeader(h),GetCustomer(c),AddOrderCustomer(h,c),AddOrderLine(p,1)等。前者是我期望的服务操作,而后者更典型的图书馆。如果问题不适合这种风格的API,或者你不能投入必要的努力来获得正确的设计,那么图书馆会更合适。

+0

想将此作为答案打勾......这通常是我们已经开始下降的方法,因为我们发现我们的服务确实非常健谈。我们的一些小型后端服务现在已成为图书馆......而我们的系统现在快得多...... – MrLane 2011-07-04 04:36:04