首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >跨SpikeArrest的MessageProcessors同步(MPs)

跨SpikeArrest的MessageProcessors同步(MPs)
EN

Stack Overflow用户
提问于 2014-04-25 16:50:29
回答 2查看 352关注 0票数 1

我们的组织目前正在迁往远地点。

目前,我遇到了一个与这个问题非常相似的问题,但由于我是一个堆栈溢出的新来者,而且名声很低,我无法对此发表评论:阿皮吉- SpikeArrest行为

因此,在我们的组织中,我们有6 MessageProcessors (MP),我认为他们是以严格的循环方式工作的。

请查看此配置(它应用于ApiProxy的目标端点):

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <SpikeArrest async="false" continueOnError="false" enabled="true" name="spikearrest-1">
  <DisplayName>SpikeArrest-1</DisplayName>
  <FaultRules/>
  <Properties/>
  <Identifier ref="request.header.some-header-name"/>
  <MessageWeight ref="request.header.weight"/>
  <Rate>3pm</Rate>
</SpikeArrest>

我的速度是下午3点,这意味着每20秒就有1次命中,根据ApigeeDoc1的计算。

的问题是,不是每20秒成功命中1次,而是在20秒的范围内得到6次成功的命中,然后是SpikeArrest错误,这意味着它以循环的方式击中每个MP一次。

--这意味着我的api后端每20秒有6次命中,而不是每秒1次命中。

有什么方法来同步下议院议员的弹弓吗?

ConcurrentRatelimit似乎帮不上忙。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-25 18:01:25

SpikeArrest不具备跨消息处理器分发的能力。它通常用于阻止大量的交通突发,而不是控制你建议的水平(每分钟3个电话)。通常,如果流量太高,则将其放入代理请求Preflow中并中止。

使用SpikeArrest与循环消息处理器一起使用时,最接近每分钟3次的是每分钟1次,这将导致每分钟6次调用。您只能将SpikeArrests指定为"n /秒“或"n /分钟”,这将被转换为" 1 /n秒1“或" 1 /n分钟1/n分钟”。

你真的在你的后端每20秒只支持一个呼叫吗?如果您试图支持每个用户或应用程序每20秒一次调用,那么我建议您尝试使用配额政策来完成这一任务。配额可以在所有消息处理器之间共享一个计数器。您还可以通过指定一个常量的配额标识符来对所有通信量(而不是每个用户或每个应用程序)使用配额。你可以允许每分钟3分钟,但他们都可以在同一时间进来,在这一分钟。

如果您只是试图防止过度征税您的后端,ConcurrentRateLimit政策经常被使用。

最后一个解决方案是实现一些自定义代码。

解决进一步问题的最新情况:

重申:

  • 6个消息处理器处理循环
  • 希望允许每个应用程序每秒调用5个
  • 希望其他应用程序每秒共享10个调用。

要获得您想要的粒度,您需要使用配额。不幸的是,您不能将配额设置为在分布式配额上具有“每秒”值(分布式配额在消息处理器之间共享计数,而不是每个消息处理器都有自己的计数器)。你能做的最好是每分钟,这在你的情况下是每分钟300个电话。否则,您可以使用非分布式配额(在6个消息处理器之间划分配额),但是您将遇到的问题是,一些MPs上的调用将被拒绝,而另一些将被接受,这可能会使您的开发人员感到困惑。

对于分布式配额,您可以在APIProduct中设置每分钟300个调用(参见医生们),并将该产品分配给您的四个应用程序。然后,在您的代码中,如果没有为当前API调用的应用程序分配该产品,您将使用硬编码为每秒10 (600分钟)的配额,并使用常量标识符而不是client_id,以便所有其他流量都使用该配额。

配额并不妨碍您几乎同时提交所有请求,而且我假设后端不能同时处理所有1200+请求。您需要使用SpikeArrest策略来平滑通信量。您将希望允许后端处理的最大流量通过SpikeArrest。这将有助于防止流量激增,但可能会导致某些流量被拒绝,这通常是配额允许的。应该在配额之前检查SpikeArrest策略,这样拒绝的流量就不会被计算在应用程序的配额中。

正如您可能看到的,为像您这样的情况配置更多的是一门艺术,而不是一门科学。我的建议是进行重要的性能/负载测试,并对其进行优化,直到找到正确的值。如果你能找到如何使用非分配配额来获得可接受的性能和可预见性,那么你就可以使用每秒的数字,而不是每分钟的数字,这可能会降低大幅度的峰值的可能性。

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2014-04-25 17:51:28

与配额限制不同的是,Spike停止不能在MP之间同步。

但是,当您将它们设置在每分钟的水平上时,您可以使用配额策略--然后将其设置为分布式和同步的,它将在MP之间进行协调。

请记住,跨机器的同步总是会有一些延迟,所以永远不会是一个完全精确的数字。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23298849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档