I am looking for help from anyone who has run AEM Communities, on how to best optimize for performance.
An AEM Communities site I am supporting, backed by MongoDB & SolrCloud (MSRP) is running into severe performance constraints. The performance constraints stem from the sheer number of calls our blog pages are making back to Solr, and I've not found any good way as yet to optimize such.
The site primarily uses Communities for blog post likes, comments and comment likes, on which the out-of-the-box components are being used. The site also uses Communities for user forums.
The issues we're facing here stem from the fact that on an average blog post page with, say, 25 comments on it (10 of which are being displayed, rest are hidden behind comment pagination) as well as 3 post likes, AEM then generates 88 backend calls to Solr. Minimally, this seems to include:
At least one call for every displayed comment (sometimes more)
At least one call per comment to get the number of likes for each comment
More calls when the comment has more than one like
Calls to find out how many likes the page itself has.
Some of the calls seem duplicative, and the number of calls can vary on page refreshes.
MSRP does have inbuilt caching logic, which can be configured in configMgr on the com.adobe.cq.social.datastore.op.impl.SocialMSResourceProviderFactory, but after going back & forth with Adobe on this evidently this caching logic only applies to MongoDB reads, and not to Solr.
We are using what is essentially the out-of-the-box Solr configurations from the AEM MSRP setup.
Aside from completely re-writing the UGC functionality of our site with custom components that can batch the backend calls back to Solr, does anyone know of any other performance optimizations that one can do that can successfully make MSRP faster?
Note: Infrastructure-wise, we have tried using Solr standalone as well as SolrCloud in a configuration like http://www.jetteroheller.com/diagrams-of-how-aem-solr-mongo-ugc-msrp-works/ The interesting effect is that whilst adding servers to SolrCloud will improve the number of concurrent requests AEM can process on the backend, it does NOT improve page performance. I can take a page in Solr standalone that takes 1800ms to render, and with SolrCloud it will ALSO take 1800ms to render no matter how many servers I throw at the SolrCloud cluster.