I've managed to get distributed caching working - both as an implementation of ICacheManager for the model objects and also using an implementation of OutputCacheProvider along withe the DevTrends DonutCache attribute. I'm using a Memcached server to perform the caching.
It's running really nicely - even after restarting my local ASPNET process, the site still starts up and retrieves all it's content from the distributed cache - meaning the site is 'warmed up' even after a restart. Performance wise, it seems much faster. Response time is improved and it's running a lot less code for each http request, meaning CPU load is reduced.
This was actually pretty simple to get up and running and offers some real benefits - it would allow nopCommerce to scale, something I think it struggles with now.
In an environment with a Network load balancer, a number of web servers + a number of caching servers etc, this would simply allow you you to throw more power at the solution by introducing another web or caching server to the cluster.
I know nopCommerce isn't really geared to this end of the market yet, but it certainly could be if a few things happen in the source. It probably wouldn't apply for most people who are using the solution in a simple hosted enviroment, but I think if the foundations are laid then it has the possibility of becoming a credible enterprise solution.
Issue:
Memcached and other distributed caching providers will use TCP to serialize objects. Memcached will currently throw an exception 'The type <Some.Nop.Type> is not marked as serializable.' when trying to cache objects - most Nop models and settings aren't marked as serilizable - simple fix though..
* Work item: Mark all items (models \ settings) that could possibly be cached with the [System.Serializable] attribute.
I'm happy to send what I've done to get distributed caching working - it's not much...a few new references + config changes + Serializable attributes!
Obviously, you'd need a Memcached server to see it in operation.
Thanks