Defining Cloud Computing
Okay, so what is â€œcloud computingâ€?
Much like â€œrich internet applicationâ€ or â€œservice-oriented applicationâ€, the terminology has been co-opted by so many companies as to almost completely lose its meaning. But, since this is my blog, Iâ€™ll define cloud computing as it pleases me.
As a useful, functional definition, I think cloud computing should cover any service that allows individuals or companies to change the primary home of their data from being self-hosted to being â€œin the cloudâ€.
Thatâ€™s it. Itâ€™s the outsourcing of your data.
Of course, that implies some API or application to access your data. Some simple examples:
Webmail: Gmail, Hotmail, and Yahoo mail hold usersâ€™ email on their own servers, and (MS Exchange notwithstanding) many companies are moving away from self hosted IMAP servers.
Online office apps: Google Docs, Zoho, etc. This one should be obvious.
Personal Finance: Mint.com and itâ€™s competitors attempt to replace Quicken and MS Money. Your financial data is stored (with appropriate privacy and security safeguards) on their servers. Itâ€™s accessible from anywhere, updated automatically, and you get the benefit of everyone elseâ€™s aggregated data, to see where you fall, for example, compared to the average food dollars spent per month.
CRM: If individuals now trust the cloud with their personal financial data, itâ€™s only because corporations led the way. Salesforce.com holds the sales, marketing, and financial data for lots of companies, big and small. Iâ€™m not sure which ones Iâ€™m allowed to talk about, so Iâ€™ll leave out the examples. Suffice to say, the market adoption hurdle has been overcome. CTOâ€™s have realized that Salesforce.com has better uptime than their own IT departments, and CFOâ€™s have realized that security breaches are at least as likely with disgruntled IT employees, and weâ€™re easier to sue.
Also, if you make, say, canned fruit, why do you have employees who are experts in the minutiae of Oracle administration? Itâ€™s much cheaper and easier to buy that as a service.
Now, these examples are all single applications (or suites of applications). Adoption is strong, and the cloud computing market is moving into a new phase.
The cloud computing platform.
Okay, so we have a workable definition of cloud computing: itâ€™s the outsourcing of data. But so far, weâ€™ve only examined data associated with certain specific applications. Most companies have all kinds of data in their Oracle databases, Excel spreadsheets, and custom applications. None of this fits neatly in existing off-the-shelf apps.
This is why custom app development is where most software development is really done. This is why SAP has been so successful for so long.
So, if weâ€™re interested in the benefits of outsourcing our data, we need a way to write custom applications to access it. We could write a desktop app or self-hosted webapp to talk to the data over SOAP or REST. But, as any CS major will tell you, programs and data are really the same thing. Those programs, too, can live in the cloud.
There are several approaches:
Amazon.comâ€™s EC2 and S3: Basically, you outsource the hardware management, and provision your own virtual machines. Very flexible. Gives you lots of control, but you still need Oracle admins, system admins, and application development is done basically the same way it always has been.
Google App Engine: The developer comes in at a higher level here. You must use their Python interface to code the app. However, youâ€™re not administrating the machines (or VMs). Youâ€™re not running the database. You have access to some pre-existing data (like Google user accounts for authentication). For the most part, youâ€™re still coding your application from scratch.
Salesforceâ€™s Force.com: Here, the developer comes in at an even higher level. Basically, youâ€™re getting our CRM application (or a subset of it, depending on your license), and a bunch of hooks to extend it. Instead of Java or Python, youâ€™re using Apex, which is a DSL (domain specific language) for the Force.com cloud, with syntax familiar to anyone accustomed to Java (except itâ€™s got properties!). You can create your own pages with a JSF-like template engine called VisualForce, with Apex-written controller classes.
As with Google App Engine, youâ€™re not administering machines, or a database. You have access to a much wider set of data (a whole pre-built schema with common objects for the enterprise, users, profiles, and a fully fleshed out permissions hierarchy). Sure, the focus of the platform is much more narrow, but if youâ€™re writing things like intranet apps, the development cycle is much, much shorter. Our basic platform tutorial takes you through building a full HR recruiting app in a single session. And integrations are extremely simple. Creating your own SOAP services in the cloud is as easy as annotating your Apex methods with the webservice keyword. Our customers are writing and deploying apps in a few weeks which would take many months to do on a traditional self-hosted app server.
The concept is marketed as â€œPlatform as a Serviceâ€. There are obvious benefits, like not having to be responsible for backups or uptime. Thereâ€™s more location independence, and cloud solutions tend to be cheaper, quicker and easier than self-hosting.
Drawbacks? Well, there are privacy risks, some loss of control, and thereâ€™s definitely a discussion to be had about openness. Iâ€™ll get to that one in another post.
Overall, itâ€™s bound to be compelling for a certain subset of the types of apps currently being written in a self-hosted, Java app server environment. Iâ€™ve seen some of the stuff our customers are writing, and itâ€™s incredible to me how much more code it would be on a self-hosted platform.