2017-08-17 217 views
0

我已经开始使用HAProxy限制我的API,但是我最大的问题不在于请求率,而是在多线程请求重叠时。如何执行单线程请求?

即使在我的合法每秒限制内,当客户在发出另一个请求之前不等待响应时,也会出现严重问题。

是否有可能(例如,按IP地址)对请求进行排队并将它们一次一个地传递到后端进行顺序处理?

+0

那么为什么不设置限制的并发连接,而​​不是请求率。这样,无论客户如何表现,建立的连接数量将受到限制。 – MoEmEn

+0

maxconn已经生效。全线连接数量不会有问题。我只需要限制同一客户端的重叠请求。 – Tim

+0

我想这里的“重叠请求”是指保持活动模式下的http。如果是这种情况,您可以使用[选项httpclose](http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#option%20httpclose),这应该告诉客户端一次发送一个请求。 – MoEmEn

回答

0

以下是一个可能的解决方案,以每次src IP一次强制执行一个连接
你需要把下面的HAProxy的CONF相应前端:

frontend fe_main 
    mode http 
    stick-table type ip size 1m store conn_cur 
    tcp-request connection track-sc0 src 
    tcp-request connection reject if { src_conn_cur gt 1 } 

这将创建一个存储并发连接计算每源IP棍子表。然后拒绝新的连接,如果已经有一个从同一个src IP建立的连接。

模仿与您的API或NAT后面的客户端的多个连接的浏览器将无法有效使用您的API。