2016-10-03 128 views
0

我们正计划为我们的基于休息的框架实施速率限制器。但是我对于实现哪一个以及哪一个在并发性和速率限制之间更重要有些困惑。我发现在大多数地方,例如apache骆驼人已经实现了速率限制而不是并发。 但对我来说,似乎速率限制实际上没有什么意义,相反,并发是我们总是需要面向多个并发请求的服务? 请让我知道你的想法。并发与速率限制

+0

您的意思是并发性和单个客户端的速率限制? – starikoff

+0

我的意思是要为服务外部请求服务的并发性和速率限制 –

+0

因此,您是否想限制一个客户端或整个服务请求的请求率?如果一个客户的请求影响另一个客户的请求? – starikoff

回答

0

您当然希望尽可能多地默认为并发请求服务。但是,高于某些请求率,您的服务性能可能会大幅下降。如果发生这种情况,每个客户都会受到影响,而且您不再提供更多请求,而是越来越少,直到您的服务对任何人都无法使用。速率限制允许您不要让新请求以超过某个速率进入系统,因此不会降低性能。您看起来对某些客户而言,但至少有一些客户得到了服务,而且您仍然可以在开始时对您的系统进行操作。过度的交换或垃圾收集,甚至无法连接到SSH时,可以有效地将整个服务器与它连接起来。

特定客户端的速率限制(基于IP例如)可以减轻每个时间单元发出太多请求的“坏”客户端的影响,或尝试拒绝您。

请记住,通过将您的服务置于某种逆向代理(如nginx)后可以调整请求率; it can保持请求等待并且不会进入系统一段时间(并且nginx可以容纳很多这些等待没有性能下降),它可以完全放弃它们,它可以限制基于IP的请求等。

+0

好吧,我会举一个例子,让我们说java spring框架。现在在这个框架中,在框架级别,请求速率限制或并发功能会更有利吗?与请求速率限制一样,它可能会再次发生,之前的请求没有提供,或者仍在进行处理,并且允许新的请求,从而导致服务整体失效所以,您不认为单独的速率限制不会真的没有帮助达到目的?相反,保持一些并发值可以说100,并不提供进一步的请求,这不是更好的服务目的? –

+0

“不提供更多请求”是什么意思?他们会被拒绝吗?那么它只是限速。处理线程是否会等待它们被处理?那么你将浪费内存和上下文切换,并且会有很多客户端断开连接。只有当你正在异步处理请求时,你的模型才会起作用。在这种情况下,它似乎工作正常。 – starikoff