ProCache Sync
Synchronises ProCache clearing across a multi-instance environment.
Overview
The main purpose of this module is to allow ProCache to be used in an auto-scaling multi-instance environment.
How it works
When a page is saved and cache clearing is triggered, the page id(s) associated with that clear are saved to the database. ProCacheSync runs a check every minute via LazyCron to look for records in the database since ProCache was last cleared. If it finds any it processes them as ProCache would. Any records it finds will have been generated by a clear on another server instance, thus enabling multiple instances of ProCache to stay approximately synchronous.
However, as LazyCron requires an actual PHP page to be run, and the whole point of ProCache is to serve static HTML without touching PHP/MySQL, it is recommended that you also implement the following in your site's Javascript:
const key = 'ProCacheSync'; if (!sessionStorage.getItem(key)) { navigator.sendBeacon(`?${key}=1`); sessionStorage.setItem(key, 1); }
This will trigger a request to sync once per user session. Given that a multi-instance environment is for high traffic sites, it should be reasonable to assume that this will trigger the sync often enough. Alternatively, a cron job could be set up to request an uncached page (via a cache buster URL or POST request etc) every minute should regular traffic not be guaranteed.
Installation
- Download the zip file at Github or clone the repo into your
site/modules
directory. - If you downloaded the zip file, extract it in your
sites/modules
directory. - In your admin, go to Modules > Refresh, then Modules > New, then click on the Install button for this module.
ProcessWire >= 3.0.210 and PHP >= 8.1.0 are required to use this module.
License
This project is licensed under the Mozilla Public License Version 2.0.
Install and use modules at your own risk. Always have a site and database backup before installing new modules.