| |
| Thousands of range requests for a very large object in the traffic server |
| cache are likely to increase system load averages due to I/O wait as |
| objects are stored on a single stripe or disk drive. |
| |
| This plugin allows you to remap individual range requests so that they |
| are stored as individual objects in the ATS cache when subsequent range |
| requests are likely to use the same range. This spreads range requests |
| over multiple stripes thereby reducing I/O wait and system load averages. |
| |
| This plugin reads the range request header byte range value and then |
| creates a new cache key url using the original request url with the range |
| value appended to it. The range header is removed where appropriate |
| from the requests and the origin server response code is changed from |
| a 206 to a 200 to insure that the object is written to cache using the |
| new cache key url. The response code sent to the client will be changed |
| back to a 206 and all requests to the origin server will contain the |
| range header so that the correct response is received. |
| |
| Configuration: |
| |
| Add @plugin=cache_range_requests.so to your remap.config rules. |
| |
| Or for a global plugin where all range requests are processed, |
| Add cache_range_requests.so to the plugin.config |
| |
| Parent Selection Mode (consistent-hash only): |
| |
| default: Parent selection is based solely on the hash of a URL Path |
| In this mode, all partial content of a URL is requested |
| from the same upstream parent cache listed in parent.config |
| |
| Cache_key_url: Parent selection is based on the full cache_key_url |
| which includes information about the partial content |
| range. In this mode, all requests (include partial |
| content) will use consistent hashing method for |
| parent selection. |
| |
| To enable cache_key_url parent select mode, the following param must be set: |
| |
| Global Plugin (plugin.config): |
| |
| cache_range_requests.so -p |
| cache_range_requests.so --ps-cachekey |
| |
| Remap Plugin (remap.config): |
| |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=--ps-cachekey |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=-p |
| |
| X-CRR-IMS header support |
| |
| To support slice plugin self healing an option to force |
| revalidation after cache lookup complete was added. This option |
| is triggered by a special header: |
| |
| This optional header looks like: |
| |
| X-CRR-IMS: Tue, 19 Nov 2019 13:26:45 GMT |
| |
| If the cache lookup was a cache hit and the cache header date |
| is *less* than this header value then the cache state is switched |
| from FRESH to STALE which results in If-Modified-Since or |
| If-Match request being passed to the parent. |
| |
| In order for this option to be enabled the the following parameter |
| must be set: |
| |
| Global Plugin (plugin.config): |
| |
| cache_range_requests.so --consider-ims |
| cache_range_requests.so -c |
| |
| Remap Plugin (remap.config): |
| |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=--consider-ims |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=-c |
| |
| Consider using the header_rewrite plugin to protect the parent |
| from using this option as an attack vector against an origin. |
| |
| Object Cacheability |
| |
| Normally objects are forced into the cache by changing the status code in the |
| response from the upstream host from 206 to 200. The default behavior is to |
| perform this operation blindly without checking cacheability. Add the `-v` |
| flag to cause the plugin to ensure the object is cacheable; when it is not, |
| the 206 status code is restored and the object will not be cached. |
| |
| Global Plugin (plugin.config): |
| |
| cache_range_requests.so --verify-cacheability |
| cache_range_requests.so -v |
| |
| Remap Plugin (remap.config): |
| |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=--verify-cacheability |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=-v |
| |
| Caching Complete Responses |
| |
| To enable caching of complete responses, that is, a 200 OK instead of a 206 Partial |
| Content response, add the `-r` flag to the plugin parameters. By default, complete |
| responses are marked as uncacheable. |
| |
| Global Plugin (plugin.config): |
| |
| cache_range_requests.so --cache-complete-responses |
| cache_range_requests.so -r |
| |
| Remap Plugin (remap.config): |
| |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=--cache-complete-responses |
| <from-url> <to-url> @plugin=cache_range_requests.so @pparam=-r |