Skip to content

Releases: cloudfoundry/routing-release

0.154.0

11 May 22:52

Choose a tag to compare

  • Fixes a bug whereby router logs stopped appearing in cf logs details
  • Includes a fix to access.log such that logs with high latency now include response codes details

Performance Comparison

Performance comparison of 0.153.0 vs 0.154.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Manifest Property Changes

No changes

0.153.0

11 May 16:39

Choose a tag to compare

Release Highlights

  • Includes a bug fix for an unintentional change to how Gorouter measures latency. Gorouter once again measures latency as it did in routing release v147 and prior, by calculating the time between when a request was received by Gorouter and when a backend app sends the first byte of the response details
  • API client authors can now create HTTP router groups details
  • Gorouter logs now include a new isolation_segment property upon startup, and for registry, unregistry, and pruned-route events details
  • Operator can now configure Gorouter to register routes only for specified isolation segments or for those which do not have a specified isolation segment using new property routing_table_sharding_mode details, details, details

Performance Comparison

Performance comparison of 0.152.0 vs 0.153.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Manifest Property Changes

Gorouter

0.152.0 0.153.0 Default Value
did not exist isolation_segments
did not exist routing_table_sharding_mode all

0.152.0

28 Apr 17:57

Choose a tag to compare

Release Highlights

  • When a route service is run as an application on CF, Gorouter now forwards requests to it directly details
  • Consul links are ignored in the routing-release template details

Known Issues

  • There is a latency measurement bug whereby instead of calculating when a request was received by Gorouter and when a backend app sends the first byte of the response, we started calculating the time between when a request was received by Gorouter and when the last byte of the response was returned from Gorouter. Fix will be in v153.

Performance Comparison

Performance comparison of 0.151.0 vs 0.152.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Epic in progress:

Gorouter shards routes by isolation segment name details

Manifest Property Changes

No changes

0.151.0

24 Apr 21:55

Choose a tag to compare

Release Highlights

  • Routing acceptance and smoke tests no longer fail when multiple router groups have been seeded details
  • Gorouter now provides its address via Links for other jobs to consume details

Known Issues

  • There is a latency measurement bug whereby instead of calculating when a request was received by Gorouter and when a backend app sends the first byte of the response, we started calculating the time between when a request was received by Gorouter and when the last byte of the response was returned from Gorouter. Fix will be in v153.

Performance Comparison

Performance comparison of 0.150.0 vs 0.151.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Manifest Property Changes

Gorouter

Note: Gorouter now provides its address from BOSH via Links

0.150.0

13 Apr 18:38

Choose a tag to compare

Release Highlights

  • Client authors can now use the Routing API to retrieve a particular router group for a specified name details
  • Fixes an issue whereby Gorouter only supported the default cipher suites, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384; any others configured in router.cipher_suites would cause a panic. Now all cipher suites supported by Golang 1.7 can be configured using that property details
  • Gorouter no longer panics when a X-Cf-App-Instance header is curled with a non-corresponding host header and instead returns a 404 details

Known Issues

  • There is a latency measurement bug whereby instead of calculating when a request was received by Gorouter and when a backend app sends the first byte of the response, we started calculating the time between when a request was received by Gorouter and when the last byte of the response was returned from Gorouter. Fix will be in v153.

Performance Comparison

Performance comparison of 0.149.0 vs 0.150.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Manifest Property Changes

acceptance_tests

0.149.0 0.150.0 Default Value
did not exist acceptance_tests.tcp_router_group default-tcp

0.149.0

24 Apr 20:50

Choose a tag to compare

Release Highlights

  • If NATS becomes unavailable, Gorouter no longer crashes. Instead, Gorouter now attempts to reconnect forever, and logs a periodic message that it is disconnected details
  • Gorouter no longer forwards a request to an application when the secret used to decrypt the X-CF-Signature header matches the router.route_services_secret_decrypt_only property and the router.route_services_timeout has expired details
  • A password can now be configured for users created by Routing Acceptance Tests and Routing Smoke Tests details
  • Default timeout for Gorouter idle keepalive connections is now 90 seconds details
  • Gorouter no longer logs AccessLogRecord-not-set-on-context for requests to the healthcheck endpoint /health details
  • router.status.password is now a required field and router.status.user now has a default details
  • X-B3-SpanId and X-B3-ParentSpanId headers are no longer generated by Gorouter when router.tracing.enable_zipkin: true. Gorouter continues to generate the X-B3-TraceID header when X-B3-TraceID and X-B3-SpanId are not present in the request details

Known Issues

  • There is a latency measurement bug whereby instead of calculating when a request was received by Gorouter and when a backend app sends the first byte of the response, we started calculating the time between when a request was received by Gorouter and when the last byte of the response was returned from Gorouter. Fix will be in v153.

Performance Comparison

Performance comparison of 0.147.0 vs 0.149.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Manifest Property Changes

acceptance_tests

0.147.0 0.149.0 Default Value
did not exist acceptance_tests.user_password
did not exist acceptance_tests.default_timeout 120

smoke_tests

0.147.0 0.149.0 Default Value
did not exist acceptance_tests.user_password
did not exist acceptance_tests.default_timeout 120

gorouter

  • New default value is set to router-status for router.status.user
  • router.status.password is now a required field

0.147.0

07 Mar 19:18

Choose a tag to compare

Important

With version 0.147.0, routing-release now requires configuration of a relational database for Routing API.

If you are upgrading from a version between 0.141.0 and 0.146.0, and are using etcd for the datastore, you may migrate to a relational database by configuring routing_api.sqldb in the same deploy as your upgrade.

If you are upgrading from a version before 0.141.0, you must first upgrade to a version between 0.141.0 and 0.146.0, inclusive, while keeping etcd as the datastore. Then, with a subsequent deploy you may migrate to a relational database by configuring routing_api.sqldb in the same deploy an upgrade to this or a newer version.

For additional information, see our deployment instructions:

Note: If your strategy for enabling TLS in etcd involves destroying the etcd cluster, TCP Routing will fail. Before configuring etcd to require TLS or destroying etcd, migrate Routing API to use a relational database as described above.

Release Highlights

  • Routing API now requires a relational database; migrations from etcd are still supported details
  • Default for router.drain_wait is now 20 seconds details
  • When router.max_idle_connections is greater than 0 (keepalive connections enabled), gorouter will retry a backend when an idle connection is severed by the server details

Performance Comparison

Performance comparison of 0.146.0 vs 0.147.0 can be found in the attachment below. Raw results for the performance tests can be found in the following files:

Manifest Property Changes

gorouter

Default for router.drain_wait is now 20.

0.146.0

28 Feb 20:11

Choose a tag to compare

  • Gorouter's default cipher suites are now TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256:TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384. Support for other ciphers can be maintained using the router.cipher_suites manifest property. details
  • Routing-release now supports a smoke test errand that quickly runs a subset of the acceptance tests details
  • Routing API no longer allows router groups with duplicate names details
  • Two new metrics are now emitted via firehose: origin: gorouter unregistry_message and origin: route_emitter RoutesUnregistered details
  • Gorouter no longer appends an additional ? to URL params details
  • Debug server on gorouter, routing-api, tcp-emitter, and tcp-router only listens on localhost by default details
  • Two new metrics are now emitted for gorouter origin: router websocket_upgrades and origin: router websocket_failures details

Performance Comparison

Here is a report demonstrating the consistent performance in this release.

Performance Comparison: 0.145.0 vs 0.146.0

Raw results for the performance tests can be found in the following files:

Manifest Property Changes

No changes

0.145.0

24 Feb 01:51

Choose a tag to compare

  • Gorouter now rejects connections using versions of TLS lower than 1.2
  • Routing-release now offers a smoke test errand that can be used to periodically verify that TCP routing is operational details
  • Gorouter now respects case-sensitivity with respect to context paths in generation of the VCAP_ID cookie used for sticky sessions details
  • Route-registrar can be configured to register a different route for each instance using a new property details
  • Gorouter now includes tags in response for /routes endpoint details
  • The format of gorouter.log messages has been documented details
  • Routing release will now fail on deploy if two router groups with the name are seeded details

Performance Comparison

Here is a report demonstrating the consistent performance in this release.

Performance Comparison: 0.144.0 vs 0.145.0

Raw results for the performance tests can be found in the following files:

Manifest Property Changes

route_registrar

0.144.0 0.145.0 Default Value
did not exist routes.[].prepend_instance_index false

smoke_tests

0.144.0 0.145.0 Default Value
did not exist acceptance_tests.verbose false

0.144.0

03 Feb 01:35

Choose a tag to compare

Performance Improvements in this Release

Here is a report demonstrating the performance improvements made in this release.

Performance Improvements: 0.143.0 vs 0.144.0

Notice in the third graph, titled "Headroom plot" that at 5s latency, throughput has increased from ~1000 requests per second to more than 3000 requests per second!

The report is generated using a Jupyter Notebook provided with our Routing Performance Release.

Raw results for the performance tests can be found in the following files:

The report can be regenerated from the test results by following instructions in the README for Routing Performance Release.

The tests were run against a standalone Gorouter and a static app running on a raw VM, not against a full Cloud Foundry deployment. The test environment was comprised of two deployments on AWS:

  • We use a modified cf-release manifest to deploy Gorouter and NATS only. Gorouter is run on our default VM type of c3.large.
  • Load was generated using the Routing Performance Release, which also includes the static backend, and a job that registers a configurable number of routes. The report above shows results of a test with one route in the routing table.

Release Enhancements

Enhancements that have improved performance of Gorouter throughput and latency

  • Gorouter now supports idle keepalive connections, and operators can control the maximum idle connections details
  • Gorouter now uses Uber's Zap library for logging, instead of cloudfoundry/lager details
  • Dropsonde bumped from d802ac9 to 37777ab details
  • Copying of response from backend to client has been optimized in Gorouter details

Misc

  • Gorouter and Route-registrar jobs will now consume nats properties from BOSH via Links if provided
  • HAProxy in TCP Router has been upgraded to 1.5.19 and PCRE to 8.40 details
  • Manifest generation for routing release no longer fails when cf-release manifest does not contain properties.databases details
  • Gorouter can now be run in garden-runc containers details
  • Gorouter now logs status code of non-200 responses from route services details
  • Gorouter logs now contain messages start-pruning-routes and finished-pruning-routes instead of start-pruning-droplets and finished-pruning-droplets details
  • Route-registrar logs now contain the NATS server hostname and port for disconnected and reconnected events, and when NATS is unavailable on initial connect details
  • Removed unused blob for golang1.6 details

Updated Licenses and Notices

  • Updated LICENSE for routing-release details
  • Updated NOTICE for src/code.cloudfoundry.org/cf-routing-test-helpers details
  • Added NOTICE for src/code.cloudfoundry.org/cf-tcp-router details
  • Updated LICENSE for src/code.cloudfoundry.org/gorouter details
  • Added NOTICE for src/code.cloudfoundry.org/multierror details
  • Added NOTICE and updated LICENSE for src/code.cloudfoundry.org/route-registrar details
  • Added NOTICE and updated LICENSE for src/code.cloudfoundry.org/routing-acceptance-tests details
  • Updated NOTICE for src/code.cloudfoundry.org/routing-api details
  • Added NOTICE for src/code.cloudfoundry.org/routing-info details
  • Added NOTICE for src/code.cloudfoundry.org/tcp-emitter details
  • Added NOTICE for src/code.cloudfoundry.org/trace-logger details
  • Updated NOTICE for src/code.cloudfoundry.org/uaa-go-client details

Manifest Property Changes

gorouter

Note: Gorouter will now consume nats properties from BOSH via Links if provided

0.143.0 0.144.0 Default Value
did not exist router.max_idle_connections 0

route_registrar

Note: route_registrar will now consume nats properties from BOSH via Links if provided