Sunday 31 July 2011

To be run only in a single server instance

One day when I was talking with my colleague about the past software development projects, it occurred me to ask, why isn't it ever specified that the software to be developed only needs to be run in a single server instance? The reason for my thought is that it would remove unneeded complexity from the application, allowing more straight forward solutions and optimisations that couldn't otherwise be done. In essence it would save both development and maintenance time, thus saving money.

Of course it isn't possible or sensible in all situations to make this specification, but there are cases where it could and should be done. For example SMEs many times have simple applications that just take input from users and other systems, do simple processing and then save it, serving the end result to other users and systems. These kind of CRUD -applications really don't need to be clustered. The reasons why they are specified to be run in a cluster have usually more to do with beliefs or with ignorance about what kind of systems we have to day. For example reason given on why the applications has to be have multiple could be...

"We have too many users, we need to have multiple servers"
No. The servers we have today have amble of power, memory and storage. You can easily rent a server with 2 x 2,5GHz Quad Core, 8GB of memory and hundreds of gigabytes of storage with less than few hundred Euro per month. This setup should be more than enough for your average run-of-the-mill business application and it should be able to handle hundreds of simultaneous users easily.

"It needs to be fail safe, we need to have multiple servers"
No. The server where the application is deployed is probably either an virtual server or an card server attached to a NAS that has RAID enabled and timely backups done. In case of a hardware failure, the virtual server instance is deployed to a new server, and the card server is replaced with a new blade. Depending on the service and automation level, a server failure will cost us a downtime ranging from minutes to hours.

Now to be on the safe side, there are applications and usage situations where what I suggest can't simply be done, and even when we have a suitable case it doesn't mean that we have to throw good engineering practices away. No. If and when we have a case where we know that we aren't going to need multiple servers, let us give the developers the added guidance of not needing to have the application to be clusterable, and let them produce a better application with less unneeded complexity.

No comments:

Post a Comment