Varnish, Magento and frequent product updatesPradip Shah
Varnish and Magento 2
Use of varnish with Magento has been a popular speed increase. So popular, that Magento decided to incorporate in M2.
This has spread endless debates though
- Would it not have been better to improve the core code quality instead?
- How often and which pages do we put in cache?
- How to organize user personalization content? (Magento has answers in terms of ajax and ESI, but I am afraid the documentation is so spread around, many developers and plugin vendors are not sure).
The question raised by the reader is another point of debate – how can a Magento store, with frequent product updates be made ready for using varnish.
Magento cache has always (yup M1 also) supported tags in caches. A typical cache is a key->value pair, typically implemented as a hash table to lookup the key and return the value. In case of a full page cache, the key is made up of the the URL and parts of the HTTP header that forms the request. When the key is found in the hash table lookup operation, it is a hit and the content is returned. When the key is not found, the request is forwarded to magento to process it. When Magento processes it, the key and the content is stored. The content is the entire HTTP response, including HTTP response headers and HTTP body.
When Magento processes a request, it returns in a HTTP response header, a “hint” header called “X-Magento-Tags”. This header has information about what type of content the page holds.
For example, a category page will have tags that represent the category and each product in that category. A product page would have a tag that represents that product.
This allows Magento to selectively clear the Varnish FPC, say when a product’s content is modified, by sending a special header to varnish to PURGE pages that match the product’s tag.
This is a communication between Magento and Varnish.
(Magento is aware of the location of varnish by the “http_cache_hosts” setting, Varnish is aware of Magento backend IP in its acl_purge list).
In order to understand how Magento triggers cache clear events, we need to understand indexing.
Magento has many indexes – a mechanism by which changes made to admin are reflected on the frontend (the end user UI). Varnish only needs to be cleared when Magento moves products to frontend.
If index modes are set to update on save, each product save will result in corresponding pages to be removed from varnish. When making large changes such as with a csv upload, this will result in many pages being cleared multiple times. Note that a product save results in both the product as well as all the category pages of the category / categories the product belongs to.
If indexing mode is set to on schedule, a cron task that processes the “index” group is responsible for running indexing. If acceptable to the business, indexing can be set to run every few hours, reducing the rate at which varnish clears.
If you want a no hassles managed hosting, get in touch with luroConnect. We even give you a free assessment of your website.