Gorouter Back End Keep-Alive Connections

Page last updated:

This topic describes how to enable support in the Gorouter for keep-alive connections with back ends, and considerations for configuration.

For more information about support for keep-alive connections, see Keep-Alive Connections in HTTP Routing.

Enable Keep-Alive Connections from the Gorouter to Back Ends

By default, support for keep-alive connections with back ends is disabled. An operator can enable the feature by configuring a non-zero value for the manifest property router.max_idle_connections.

Considerations for Configuring Maximum Idle Keep-Alive Connections

Each Gorouter 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 back end. For this reason, the number of maximum idle connections Cloud Foundry recommends is 50,000 or fewer. 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. For example, if a single Gorouter receives 1000 requests per second, and response time is 1 second, at any given time there are likely to be 1000 connections open to back ends. Accommodating for growth of 2x, an operator might configure a maximum of 2000 idle connections per Gorouter.

The Gorouter has been hardcoded with a limit of 100 idle connections per back end. The configurable property max_idle_connections governs idle connections across all back ends.

Considerations for Apps when Keep-Alive Connections are Enabled

When keep-alive connections with back ends is enabled, the Gorouter must be reponsible for closing connections. If an app instance closes a connection at the exact same time that the Gorouter sends a new request using that connection, the request fails.

With keep-alive enabled, the Gorouter closes idle connections after 90 seconds. Configure app servers with a keep-alive idle timeout greater than 90 seconds to make sure that the Gorouter always closes connections first.

Create a pull request or raise an issue on the source for this page in GitHub