I should have rephrased this better. I have no doubt Java scales, and I have no doubt that CFML scales, as I have seen it all first hand.
I should have asked, if anyone has scaled out Lucee to distribute sessions between lucee instances so it can scale.
Being more of a systems guy first and a programmer second, I always tend to lend myself to product guides. Since its Lucee, and open source awesomeness that is ever evolving, I leave the question to the community and people who are far more suited than I to answer
Yes, at Ortus we’ve deployed several Lucee clusters that use external session storage in Couchbase and Redis. In fact, I wrote the Ortus Couchbase cache extension. (It’s a commercial extension, but you can get free open source ones too.) We just really love Couchbase because it has true horizontal scaling, auto-sharding, and amazing clustering features.
But enough about Couchbase, using it in Lucee is super simple. I swear, I’m not trying to turn this into a sell for our extension, but I don’t know of any other guide as comprehensive right off, so here are the docs i wrote which show the basics of installing an extension, creating a named cache that uses that cache driver, and hooking that cache up to your session or client scope as well as using it for CFML caching, query caching, etc. https://docs.ortussolutions.com/couchbase-cache/3.0.0/index.html
You can swap out any of those specifics for the Redis or Memcached extension and it’s pretty much the same. That’s the beauty of the cache abstraction is your code doesn’t know or care the back-end cache implementation. In fact, I’ll setup a Ram cache (in memory) for dev, and then switch the config to Couchbase, etc on stage and production.
This Lucee feature lets you avoid load balancing shortcuts like sticky sessions and do true round robin, or deploy to a Docker swarm, etc. Then a CF node can disappear at any time from your cluster and your users never notice.