Sorry to keep the thread going, but I'll definitely say that there are easier things to try first rather than going into a caching layer.
The caching layer was needed because we had already exhausted all other optimization paths, and there were some serious tradeoffs we had to take to implement it -- like TLS termination at the caching layer rather than in Puppetserver.