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...