A recent post on Brian Kotek's blog about future directions for ColdFusion sparked a lot of debate over whether or not ColdFusion should support AS3 server-side. I want to change the focus here a bit and talk about a feature I've been thinking about that would be potentially useful to a lot of people. I'd like to see ColdFusion 9 support deployment of various services across multiple JVMs - without having to have multiple instances of the full ColdFusion server.

Why would you want to do this? Let me lay out a few scenarios and see if this starts to make more sense. Imagine you have a ColdFusion application deployed on a 32-bit Windows server with 4 GB of memory. The ColdFusion application in question does a lot of XML manipulation and PDF document generation. If you've ever had a similar application in a similar environment, then you know that your ColdFusion application can really only make use of about 1.6 GB of RAM as that's a limit of the JVM on 32 bit platforms. You also know that both XML parsing and PDF document generation are very expensive operations, especially from a memory utilization perspective. Now imagine if you could configure your ColdFusion application such that it was able to off-load the PDF document generation and the XML parsing and transformation to separate JVMs. This would allow your core application to handle the majority of your application functionality while off-loading the processing intensive operations to separate specialized JVMs (as opposed to separate threads on the same JVM). The difference here is that the additional JVMs wouldn't require a full instance of the application server - just the specific processing parts that can be off-loaded. This is exactly how most Enterprise Service Buses deal with distributed processing and I think it would be a killer feature for ColdFusion to have in its bag of tricks.

Of course the benefit isn't limited to just memory limited JVM instances in 32 bit environments. In 64-bit environments, it makes just as much sense as you are still segmenting processing, allowing for better thread utilization, and potentially allowing you to scale out just the type of processing you need to.

What do you think? Does this make sense?