Nine specifications for a Cloud Computer: A call to action
What is cloud computing? We recently asked a number of people in our industry, and got back a range of interesting, and sometimes self-referential, responses. According to our respondents, cloud computing means anything from a single-tenant, multi-user application cloud (also known as software-as-a-service or “Saas”) to multi-tenant, general purpose, on-demand clouds (sometimes called platform-as-a-service or “PaaS”).
I think the world of computing, generally, is moving away from a do-it-yourself approach to accomplish “shared” computing (and by computing is meant anything having to do with servers, in general) towards embracing or, better, stepping into the cloud for most computing the isn’t on the edge of the network.
The migration has begun from dedicated, collocated servers to the cloud. Buyers don’t want to take possession of servers, routers, switches, network drops, racks; they want this from the cloud.
But what is the cloud?
What sort of cloud computer(s) should we be building or expecting from vendors? Are there issues of lock-in that should concern customers of either SaaS clouds or PaaS clouds? I’ve been thinking about this problem for some time. Clouds should be open. They shouldn’t be proprietary. More broadly, I believe no vendor currently does everything that’s required to serve customers well. What’s required for such a cloud? I think an ideal PaaS cloud would have the following nine features:
1) Virtualisation Layer Network Stability
Cloud computers must operate on some sort of virtualisation technology for many of the following features to even be feasible. But as general purpose computing moves from dedicated hardware to on-demand computing, one key feature of the dedicated model for web applications is a stable, static IP address.
If the virtualisation layer borks (and this happens), when the cloud has recovered the cloud instances of compute, the developer should be able to rely on the web application just working without having to re-jigger network settings.
2) API for Creation, Deletion, Cloning of Instances
Developers should be able to interact with the cloud computer, to do business with it, without having to get on the phone with a sales person, or submit a help ticket. In other words, the customer should be able to truly get on-demand computing when they demand, whenever they demand. Joyent has offered this through Aptana and their Aptana Studio product. However, the API is only available to Aptana at this point.
The API needs to be publicly available to everyone. Provide a credit card (that works and is yours) and you should get compute, storage, and RAM on-demand. The challenge for cloud computing companies is to figure the just-in-time economics that allow us to provide on-demand infrastructure without having lots of infrastructure sitting around waiting to be used.
I think this means that cloud computing companies will, just like banks, begin more and more to “loan” each other infrastructure to handle our own peaks and valleys, but in order for this to happen we’d need the next requirement.
3) Application Layer Interoperability
Cloud computers need to support a core set of application frameworks in a consistent way. I propose that cloud computers should support PHP, Ruby, Python, Java and the most common frameworks, libraries, gems/plugins, and application/web servers for each of these languages.
Essentially, a developer should be able to move between Joyent, the Amazon Web Services, Google, Mosso, Slicehost, GoGrid, etc. by simply pointing the “deploy gun” at the cloud (having used the API mentioned above to spin up instances) and go. Change DNS, done. But, no cloud computing company is innovating by providing better application layer solutions. We ought to support the most popular languages and move on. However, for a developer to truly have cloud portability, we need to support another requirement.
4) State Layer Interoperability
This is the most difficult problem to solve when scaling a web application, and, consequently, the area in which cloud computing companies are innovating while sacrificing interoperability. It’s not simply a question of deciding that we should all support MySQL or Postgres because we will find that the needed requirement (“Automatic Scaling”) is practically impossible to achieve with these tools.
Amazon is innovating with SimpleDB, Google has BigTable as solutions for the problem, but developers can’t leave either cloud because neither SimpleDB nor BigTable are available anywhere else. What is needed, and I’m looking ahead to the next requirement when I say this, is an XMPP-based state-layer that can flush out to some SQL-y store. Think open-source Tibco.
The financial markets fixed these problems years ago. This datastore needs to speak SQL, be built using open-source and free software, and be easy for developers to adopt. The value cloud computing companies provide to developers is running the state layer for them, without requiring developers to use some proprietary state layer that may or may not provide scalability upon success and represents lock-in.
5) Application Services (e.g. email infrastructure, payments infrastructure)
A cloud computer should provide scaled application services consumable by developers in developing and delivering their own applications. There are two types of application services. The first group is delivered using open protocols/formats. Examples would beIMAP/SMTP, LDAP/vCARD, iCAL/ICS, XMPP, OpenID, OPML.
All clouds should offer these open protocols/formats so that developers can move between clouds without having to rewrite their application. The second group is delivered as web services, often proprietary to the cloud (therefore a means of differentiation), and include services such as payments, inventory.
6) Automatic Scale (deploy and forget about it)
All things being equal, a competent developer should be able to deploy to a cloud and grow to five billion page views a month without having to think about “scale”. Just write the code, the cloud computer does the rest.
Is this achievable? Today, no. No cloud computer automatically scales applications. Part of the problem lies in the state layer. Part of the problem lies in what it means to scale. What is the measure of scale? Responsiveness? Scaling the state layer (e.g. the database) is a black art. Scaling the application layer or the static assets layer relies, in part, on load balancing and storage.
7) Hardware Load Balancing
The cloud computer should provide the means to achieve five billion page views a month. I picked that number because it is big. If you’re writing an application, and you want to be able to achieve tremendous scale, the answer shouldn’t be to move off the cloud onto your own “private” cloud of dedicated servers.
Of course, if the cloud computer is open as we’ve described, you can build your own cloud. It’s also true you can generate your own electricity from coal, if you want to bother. But why bother? Software load balancers will get you nowhere close to the throughput required to achieve 5 billion page views per month. The state of the art is hardware load balancers.
8) Storage as a Service
Storage should be available to developers as a service. Where this is done today, it is done using a proprietary API and represents lock-in. The storage service should allow customers to consume endless amounts of storage and pay for only what is used. Objects on the storage service should be accessed by developers as objects rather than as nodes in a hierarchical tree. This way developers don’t have to understand the hierarchy.
WebDAV could be an open protocol version of the storage service, but fails to provide the abstraction of treating objects as objects rather than nodes in a hierarchical tree. At present, I don’t believe there is a reasonable solution to the problem that isn’t also proprietary. We need to develop one that is open and free.
9) “Root”, If Required
The cloud computer vendor can’t think of everything a developer or application might need or want to do. So the cloud needs to be hackable and extensible by the developer and that means an administrative account of some sort that allows the developer to shape and mold the cloud to their specific needs. By definition, cloud computers must be built on top of some sort of virtualisation technology, so the developer never has “root” to the cloud, only “root” to the developer’s part of the cloud.
Operating Systems Don’t Matter for Cloud Computing
People often confuse the “userland” with the operating system. An operating system provides the means for the userland to interact with hardware. The userland, especially in a (virtual) server context is “where stuff lives”. Where is the document root for Apache? Where do plug-ins get installed?
At Joyent, we use Solaris Express as the basis for our distribution of Solaris. It has a radically simplified userland designed for web applications, not for laptop computers, graphical user interfaces, mp3 libraries. Developers care about the userland, not the operating system. Wouldn’t it be great if you logged into your cloud and you saw:
How do we extend this so that the cloud is entirely “RESTful” and everything is just a URI?
The choice of the operating system (and the consequent virtualisation technology) is critical to the cloud computing service provider. Whether we choose Solaris Zones or Xen, VMWare ESX, Linux KVM or Windows Server 2008 tells you about the ability of the cloud computer to scale reliably. Developers should care about the choices their cloud computing vendor makes because it speaks, in part, to the ability of the cloud to scale. But for using the cloud, deploying an application, it makes no difference.
I’ve left aside talking about the business model of a cloud computer, since that is best left up to the vendor. The issues of whether there are contracts or not, whether one can pay with a credit card, is there hourly or monthly billing, these things don’t matter for the definition of a cloud computer. It is in these areas that vendors can innovate and differentiate.
The nine factors that make up a cloud computer can be applied by you, the buyer, to any cloud computer out there to determine a “CloudScore”. Joyent’s Accelerator offering currently scores a CloudScore of 7 out of 9. We are working hard to achieve a Cloud 9.