Router Backend Keepalive Connections
Page last updated:
This topic describes how to enable support in the Gorouter for keepalive connections with backends, and considerations for configuration.
Support for keepalive connections is described in Idle Keepalive Connections.
By default, support for keepalive connections with backends is disabled. An operator can enable the feature by configuring a non-zero value for the manifest property
Each router process is limited to 100,000 file descriptors. Each inbound request consumes at most two file descriptors; one for the connection from the client and one from the Gorouter to the backend. For this reason we recommend that Max Idle Connections is never set higher than 50,000. As a few other file descriptors are consumed by the process under normal operation, this limit is more like 49,900.
In order to determine how many idle connections are needed, consider that the peak connections could be calculated by multiplying throughput by response time. Example: if a single router receives 1000 requests per second, and response time is 1 second, at any given time there are likely to be 1000 connections open to backends. Accommodating for growth of 2x, an operator might configure a maximum of 2000 idle connections per router.
The Gorouter has been hard coded with a limit of 100 idle connections per backend. The configurable property
max_idle_connections governs idle connections across all backends.
When you deploy an app that requires Diego cells to restart or recreate, the app may not respond to a Gorouter request before the keepalive connection breaks. The following table describes how the Gorouter behaves if it cannot establish a TCP connection to an app:
|If the Gorouter …||then the Gorouter …|
|cannot establish a TCP connection to the routing backend for the app||waits 15 minutes for a response.|
|establishes a TCP connection to the routing backend, but the app does not respond||retries the request three times.|
In both cases, if the app still does not respond to the request, the Gorouter returns a 502.Create a pull request or raise an issue on the source for this page in GitHub