Former ColdFusion team member, Mike Brunt, has written an article for the Adobe Developer Connection entitled Using ColdFusion to enhance scalability and high availability. Mike covers high availability concepts, hardware considerations, clustering, and more. This one is well worth the read.
In my opinion if you're at the point were you need to scale to multiple servers you probably shouldn't be using session-based variables anyway. They won't fail over correctly when a server drops offline, and if traffic levels are that high you shouldn't be storing a bunch of "complex" variables per user anyway.
Also fails to mention additional scalability enhancers like using dedicated "application" servers to manage membership information, logins, registrations, etc.. In which case dumping CF's session/client system may be in order.
The only time high-scalability sites should consider sticky sessions, again in my opinion, is when you're using HTTPS/SSL to the server in question. And even then you may be better off with a load balancer that can handle SSL on the front end with dedicated hardware.
It doesn't mention verity, and due to the OEM license, you will have major issues if you try to run it on a cluster.
he says 'The replication mechanism is the key here' but doesn't really say what options you have ? are there alternatives to robocopy ? what other techniques could be used? This is a massive headache if you have an app that does content uploads.
Also, if you go for a setup like this the costing can go up by a factor of 10 over a single server setup. This is in the extra hardware, configuration and CF licensing costs.
Im not saying im against CF clustering. Its a great solution for high availability sites, but you really have to have a good business case to support it.
There are many points to discuss. Some of my own questions would be:
Should sticky sessions ensure availability if one server goes down? (It doesn't appear to be that reliable) What is the performance hit if client vars are used instead? How can you use client vars if you have complex data types? What about the performance hit if you WDDX the client vars? What if the CF servers have tons more spare resource than the db servers, how can we work that into a clustering plan?
@Ben, you must have encountered many different cluster and scoping configurations on your travels, not to mention stories about what worked for people, what didn't and how problems were overcome. Are you storing this up for a forthcoming book? ;-)
Put another way, CF tends to effectively double the cost of every server you field.
You are all right that this article mostly covers concepts which in my opinion are important. Each actual design of clustering will be very application/infrastructure specific and it is difficult to be more detailed in a general way. I have been involved in several and it takes a lot of planning and also testing of each concept to validate before production roll-out. Things such are replication always poses challenges whether for clustering needs or not.
Thanks for all the comments, you have given me food for thought for future articles.