Wednesday, June 25, 2008

Building scalable software objects.

With the computing resources available today, practicing software developers need to build an architecture that can easily take advantage of these resources. Does this mean that every new application built needs to be a globally distributed grid computing architecture? No. However, your code can be built with scalability in mind even when this is not a requirement.

The leading cloud computing (buzzword) resource at the moment is Amazon EC2. The elastic compute cloud offering from Amazon provides a consistent, stable API that allows developers to manage virtual machines on Amazon's network. This is an extremely powerful tool that provides computing on demand. You only pay for the computing resources that you need. When you are finished with your machine, you terminate it. This essentially eliminates the need for a massive server setup in which most of the time, machines could be sitting idle.

So how does this all come together? Do you hire someone that manages these machines? Someone to launch new machines when the need arises and terminate them when they are no longer needed? This job is much better suited for the actual software that requires the resources. Ideally, the architecture should be built in such a way that it can determine when these distributed resources are needed and when they can be negated.

This is simply a concept of resource management and is already implemented in operating systems and many applications in existence today. The main difference being that these resources may not necessarily live on the same physical hardware. When designing modern software, the potential use of remote resources should not be neglected.

Enomalism uses this approach for much of the machine control functionality. Put simply, an attempt to perform some action on a machine in Enomalism will result in a simple redirect to the hypervisor that could potentially be on some remote machine. The key word here is potentially; the same functionality is still realized if the hypervisor is on the same machine in which the request originated.

This approach applies to almost component you may build. Allowing for the potential to use remote resources is critical for scaling. Even if the need may not be now. It will someday.