体系结构问题:如何在面向服务的体系结构中以编程方式限制调用程序卷?

时间:2011-03-07 19:47:09

标签: soa

这无疑是一个悬而未决的问题。

我已经看到以下故事现在玩了足够多次,我不得不问:有更好的方法吗?

这个故事是当一个团队设置他们的SOA风格的服务时;其他球队开始称它,或意外锤击它。服务失败了。然后就呼叫者是否应该拨打电话进行协商,或者被呼叫者应该加强他们支持呼叫量的能力。

这是一个非常手工,零敲碎打的谈判。

有没有关于不同方法的文献?我的头脑中有一个想法:服务所有者需要每个来电者的“来电信用”(想想货币或许可单)。这些学分将由服务本身(或一些附属的ServieCallAdministrationService发布。是的,可怕的名字)。通过这种方式,服务所有者可以通过限制服务量来更好地保证服务质量?

换句话说:谁应该“拥有”这个管理整体服务呼叫量的问题?服务本身?来电者?还有别的吗?

3 个答案:

答案 0 :(得分:2)

解决此问题的最佳方法(在我看来)是使用面向消息的传输级别(JMS,WebsphereMQ,MQMQ ...)

在这种情况下,您可以完全控制处理请求 - 而无法处理的消息只是排队等候。您还可以轻松添加优先级,添加服务器以进行扩展等元素。

任何方式 - 服务提供商负责提供商定的SLA

答案 1 :(得分:0)

您可以重新监控呼叫使用情况,一旦达到限制,您就可以返回超出限制的使用情况的特定错误代码。

Redis的密钥过期,因此您可以在x分钟后使密钥过期,并且服务调用将照常工作。

"api-call-getUser:" + customerId

答案 2 :(得分:0)

还有另一种控制方法。第一个:您在服务前使用一个组件,您可以在其中定义策略调用者调用此服务的频率(IBM Datapowerbox或Oracle Web Service Manager内置了此类功能)。第二个:客户本身(如果已知)可以在他的客户端设置sendig限制。这可以通过一个SLA中的客户预定义。