A Review Of Hosting Options
Considering the wide scale changes taking place in the infrastructure options available to us, via virtual server options, cloud computing options and hybrids of the two I thought it a good idea to list the options available to us as users of ColdFusion. Some of this is obvious I know, but sometimes re-stating the obvious is useful. One thing I find intriguing is that any experience we have had with what is typically considered to be the lowest echelon of CF infrastructure, shared hosting, might be the closest we have yet come to experiencing cloud computing.
1/ ColdFusion Shared Hosting - Here we are usually granted an API to both ColdFusion and a database. We can pay for enhancements such as more storage, database options; for instance SQL Server instead of MySQL and various levels of higher bandwidth. The usually differentiation between competing offerings here is how good the API's are and the efficiency of the level of help we can get. Also, upload ease and control of remote files is another important issue. Lastly, the prohibiting of the use of parts of ColdFusion, such as some of the tags, can be a deciding factor in whom we might chose as a vendor of shared hosting.
2/ ColdFusion VPS Server - This is usually directly analogous to a virtual server, using various technologies such as VM Ware, Xen, Microsoft Virtual Server 05-08 etc. Here we are given a fully functional server which is based on software virtualization. There is fairly clear delineation of RAM and CPU which we should consider as clearly allocated to our particular VPS. However, storage will be shared and we will be allocated a shared amount of hard-drive capacity. We will probably not get a ColdFusion administrator interface.
3/ Dedicated Server - There can be various levels of this offering from an "empty" server with no operating system or a server with an operating system installed. In essence we are responsible for maintaining our own software and are in essence either renting a server or purchasing one outright that will then be maintained in a third-party data-center. In this case we have full control over everything and are responsible for all except the network tier. After installing ColdFusion, we of course have access to the ColdFusion Administrator GUI.
4/ ColdFusion Managed Server - In this case the third-party hosting company provides with a physical server with all software we requested installed, including ColdFusion. The hosting company has full responsibility for software installation and maintenance.
5/ Co-Located Server - Here we have purchased the server and are responsible for software installation and maintenance. We are renting space in a third party data center and they are responsible for the network tier.
6/ Purchased Server - This is exactly the same as a Co-Located Server except that we, or our company, host the server in our own data center. In terms of control and influence over all aspects of hardware, software and the network, this is the most complete control we can have.
7/ Cloud Computing - As I mentioned in the preface to this blog post, Cloud Computing is in some ways like shared hosting in that all aspects of the notion of a single physical entity or in many ways even the notion of a virtual server entity is obscured from us. What we typically get, in current offerings, is a unit of processing power with an amount of memory and some amount of bandwidth. We can add what software we want, ColdFusion for instance and we are in a totally shared environment. Those of us who have dealt with ColdFusion, in shared hosting environments, know full well the effects of badly written, poorly performing code on all other applications. This is where issues get a little cloudy (pardon the pun) in my view. So the closest reference point I can think of in what has gone before is perhaps grid computing?
It is sort of ironic and perhaps not co-incidental, that cloud computing is emerging just at the time that processing power made a quantum leap, in terms of 64-bit architectures and as users of the Java platform we have not felt the full benefit of 64-bit yet. Current versions of the JVM seem to hit some sort of plateau at around 32GB of heap memory, this is a known issue and is being addressed by the major JVM providers. With the amazing leap that 64-bit gives us in potential performance gains we are just about to enter a whole new world of server-application power.
In addition, there are unresolved issues revolving around privacy and security in cloud computing; PCI compliance and Sarbanes Oxley are very relevant points which we have to consider and I have yet to see or hear adequately dealt with. From the standpoint of hosting level entities, cloud computing is a marvelous opportunity to maximize server capacity. We typically do not want to see servers we own or operate to be running permanently at 100%, in fact when I see systems running at 70% regularly it signals a time to think of adding capacity. In a cloud environment, the total server capacity is shared among all users, so in theory we should get better more balanced use and availability of total resources.
Cloud computing is no doubt here to stay and we will probably get pressure from those looking to save costs, to use cloud computing and in fact some of us want to use cloud computing for technical or perhaps curiosity reasons. There are issues to be resolved before I could recommend clients to run production applications on a cloud computing platform, I have mentioned them before, security, application isolation etc. However I definitely see cloud computing as a good option for development support operations such as development-integration servers or even QA-Staging servers. The immediacy of commissioning a new "server" or increasing the capacity of an existing "server" is very pervasive in my opinion.
As always, I welcome any feedback or experiences.