Forum Discussion
I was wondering if the following simlar strategy could work. For one of our services the connections are much higher versus the others and when there are more connections for this service there tend to be more issues in general and performance degrades. If I were to check that for this specific service; connections have reached a certain amount or % of my virtual server max. In this case, route the traffic to another pool which has standby VMs with no other traffic on them. So, until the number of connections has gone below this threshold, we would be routing to another pool with fresh VMs, no other traffic going through them. The idea is that I think this could improve performance and limit the issues in general for all of our services.
Here is a quick concept based on the above logic, any thoughts or should I open another thread?
when RULE_INIT { This defines how long is the sliding window to count the requests. This example allows 10 requests in 3 seconds set static::windowSecs 20 set limit 100 }
when HTTP_REQUEST { if {[HTTP::uri] contains "/ServiceX"} {
if { $limit ne "" } {
set getCount [table key -count -subtable [IP::client_addr]]
log local0. "[IP::client_addr]: getCount=$getCount"
if { $getCount < $limit} {
incr getCount 1
table set -subtable [IP::client_addr] $getCount "" indefinite $static::windowSecs
} else { log local0. "[IP::client_addr]: exceeded the number of requests allowed- rerouting service X. $getCount / $limit"
pool Service_X_Pool
}
}
}
}