The Cloud

I have a sticker on my laptop that's says "There is no cloud, it's just someone else's computer".

This is true, and I think it's indicative of how "the cloud" has for the most part failed to live up to its potential.

To me, what makes the cloud something other than a marketing term for existing data centers is dynanacism.  The ability to transparently scale capacity to the appropriate size for the workload.

There are services that offer this but most of them require manual intervention to "scale" the service, and even then the units are typically very simple and large-grained like adding another computer or perhaps a processor.  Most don't account for resources that relate to the software they are running in a direct way, and lack the instrumentation to make it clear that sizing should take place or to what degree.

One explanation for this is that it is advantageous for the service provider to encourage premature scaling, as this increases revenue.  Conversely, it is not advantageous to encourage a reduction in scale, for the same reason.

Aside from the non-dynamic nature of cloud resources within a particular service, there is essentially no heterogeneity between vendors, which means even if there were transparent, dynamic scaling it would be limited to the range of products from a given company.  This is a step backward from the pre-cloud era as when The Cloud is looked at as "just the Internet", there is a baseline platform on which services can be built that are portable, specifically TCP/IP.

For The Cloud to supersede the utility of "just the Internet" there needs to be a standard or set of protocols in place that allow applications to scale both vertically within the service of a particular vendor, as well as across vendors, in a dynamic way that requires no additional cognitive load on developers.  The existence of "devops" (really another word for sysadmin) is evidence that we are not there yet.

This may justify the creation of new programming tools capable of modeling software whose structure and syntax make the programmer oblivious to the components and divisions of the underlying architecture.  This is nothing new, and tools like these have been somewhat commonplace in high-performance and scientific computing systems for decades.  In several ways HPC systems have the same needs that The Cloud is trying to fulfill at Internet scale.

If the problem is addressed at this level of abstraction, additional technologies that are traditionally considered niche or specialist areas could be made available through The Cloud and be put to work seamlessly to power existing software with no changes.  Examples might include small-grained distributed processing across clusters of low-power nodes (i.e. a dynamic mesh of idle mobile phones) or highly specialized processing units constructed for on-demand jobs (GPU, FPGA, etc.).

The foundation of this is less about technology and more of a change in philosophy, and perhaps economics.  Instead of designing The Cloud as individual products from separate companies, what is needed is the development of open standards that are sufficiently valuable to consumers (programmers, product managers, etc) that supporting them become a a prerequisite for any serious cloud resource vendor.  The design and development of these tools must not favor any existing company, and must not be developed with any obligation that would create a similar conflict of interest.

The design and implementation of such a system will be the subject of future posts, but as always I'm happy to discuss anytime.