In additions to all the bugs and improvements done to the code and plugins, the following new features are available when you upgrade from v3.2 to v4.0. For details on what has changed to existing features and configurations that might affect your upgrade, please see the Upgrading to v4.0.x document.

Tagging disks in storage.config

The intent of this feature is to allow content to be assigned to specific disks. As an example, using storage.config tagging, together with rules in hosting.config and volumes.config, you can force certain URLs to go to SSD disks.  TBD more details, Phil and Jan ?

Jira Ticket: https://issues.apache.org/jira/browse/TS-1728

HTTP transaction buffering control

To avoid potential memory consumption issues, transactions can now be set to be throttled when their buffer usage exceeds a bound, and released when it becomes lower. This can also be used as a rough bandwidth throttle per transaction, as limiting the buffer space will throttle origin server connection bandwidth if the client or cache is unable to keep up. This can be set per transaction via the plugin API.

The following configurations have been added to control this feature (the default values are shown):

 CONFIG proxy.config.http.flow_control.enabled INT 0
 CONFIG proxy.config.http.flow_control.high_water INT 65536
 CONFIG proxy.config.http.flow_control.low_water INT 65536

Jira Ticket: https://issues.apache.org/jira/browse/TS-1496

CPU thread affinity

It is now possible to set thread affinity for the main worker threads. This can improve performance, particular on NUMA systems. This is configured via

 CONFIG proxy.config.exec_thread.affinity INT 1

In addition, you can also control how large the memory pools for each thread is, via a new configuration (default is 512):

 CONFIG proxy.config.allocator.thread_freelist_size INT 512

The setting means that each freelist on every thread can hold 512 objects each. Remember that there are many freelists, bumping this up could cause your memory to increase significantly during a traffic spike. If memory is not an issue, bumping this up can increase performance, since it helps avoiding falling back to the global freelist allocator.

Jira Ticket: https://issues.apache.org/jira/browse/TS-1356
Jira Ticket: https://issues.apache.org/jira/browse/TS-1966

Delay proxy services until cache is enabled

When Traffic Server starts, we load meta-data information from the cache. For very large caches, this can take a fairly long time (several seconds). During this load and initialization time, the server will by default proxy requests to the origin. A new configuration has been added, which prevents proxying while the cache is being initialized:

 CONFIG proxy.config.http.wait_for_cache INT 1

Jira Ticket: https://issues.apache.org/jira/browse/TS-1487

Controlling chunking size

A new configuration option is added, which lets you control the size of the chunk sizes for content that is Transfer-Encoding with chunking (default value shown):

 CONFIG proxy.config.http.chunking.size INT 4096

This feature can be used to optimize performance around chunking, and was implemented to solve a high pressure memory issue.

Jira Ticket: https://issues.apache.org/jira/browse/TS-1457

Caching empty documents

In previous versions of Apache Traffic Server, content with empty bodies were never cacheable, regardless of what the HTTP header said. We now provide a new option, which allows this type of content to (possibly) be cached. This is particularly useful for caching e.g. redirect responses which has no body. The new configuration is (default is off):

 CONFIG proxy.config.http.cache.allow_empty_doc INT 0

Jira Ticket: https://issues.apache.org/jira/browse/TS-621

Allow cluster cache to duplicate objects

A new feature and configuration allows for objects to be stored in more than one cluster member. The new configuration is (default off):

 CONFIG proxy.config.http.cache.cluster_cache_local INT 0

Jira Ticket: https://issues.apache.org/jira/browse/TS-1270

Host resolution control

Resolving the IP address of an origin server can be set to prefer IP address families in specific orders, both globally and on a per port basis.

 CONFIG proxy.config.hostdb.ip_resolve STRING ipv4;ipv6

Jira Ticket: https://issues.apache.org/jira/browse/TS-1307

Overridable configurations

The following configurations are now overridable through plugin APIs and/or the conf_remap.so plugin:

  proxy.config.http.chunking.size
  proxy.config.http.flow_control.enabled
  proxy.config.http.flow_control.low_water
  proxy.config.http.flow_control.high_water
  proxy.config.http.cache.range.lookup
  proxy.config.http.normalize_ae_gzip
  proxy.config.http.default_buffer_size
  proxy.config.http.default_buffer_water_mark
  proxy.config.http.request_header_max_size
  proxy.config.http.response_header_max_size
  proxy.config.http.negative_revalidating_enabled
  proxy.config.http.negative_revalidating_lifetime
  proxy.config.http.accept_encoding_filter_enable

New Plugin: cacheurl

TBD: More details.

New plugin: gzip

The gzip plugin allows you to off-load content compression to your proxy cache, which can be a way to reduce CPU pressure on your origins. It also lets you control compression on the caches even if you can't control the origin servers. This plugin is now part of the default build and installation.

API additions and changes

Lifecycle hooks

Hooks have been added for port initialization, ports ready (accepting connections), and cache ready. See TS-1487 and the TSLifecycleHookAdd man page.

Milestone metrics

The following API has been added for plugins to examine transaction milestone timers:

TSReturnCode TSHttpTxnMilestoneGet(TSHttpTxn txnp, TSMilestonesType milestone, TSHRTime *time);

Cache no-store API

Port Descriptors

Background fill indicator

TBD: please edit / add.

HTTP Range requests

Wasn't working with 3.2, is hopefully working with 3.4...

  • No labels