Frans Bouma's blog

Generator.CreateCoolTool();

Syndication

News

    Visit LLBLGen Pro's website

    Follow FransBouma on Twitter

    Add to Technorati Favorites

About me

Fun stuff I created

My work

"Cloud Cloud Cloud, if you're not in it, you're out!"... or something

After I graduated from the HIO Enschede (B.Sc level) in '94 I have worked with a lot of different platforms and environments: from 4GL's like System Builder, uniVerse and Magic to C++ on AIX to Java to Perl on Linux to C# on .NET. All these platforms and environments had one thing in common: their creators were convinced their platform was the best and greatest and easiest to write software with. To some extend, each and every one of them were decent platforms and it was perfectly possible to write software with them though I'll leave the classification whether they were / are the greatest and easiest to the reader. I'll try to make clear below why this dull intro is important.

Yesterday I watched the live stream of the PDC '09 keynote and in general it made me feel uncomfortable but I couldn't really figure out why. This morning I realized what it was and I'll try to explain it in this blog.

Cloudy skies

If one word was used more often than anything else in the keynote it was likely the word 'cloud'. Cloud, cloud, cloud, azure, cloud, cloud, azure, cloud, azure... and so on. Perhaps it's the weather in Seattle which made Microsoft fall so in love with clouds, I don't know, but all this cloud-love made me a little uneasy. This morning I woke up and realized why: it's too foggy. You see, the whole time I was watching the keynote, I had the idea I was watching the keynote of some conference about some science I have no knowledge about whatsoever.

"Cool, another guy talking about azure clouds with yet another set of fancy UIs I've never seen, giving me the feeling that not using those is equal to 'doing it wrong', but what the heck azure clouds are and what problem they're solving is beyond me". That kind of thing.

A long line of people were summoned on stage to tell something about some great tool / framework / idea / wizardry related to clouds and with every person I more and more lost grip about what problem they all wanted to solve. All I saw was a long line of examples of Yet Another Platform with its own set of maintenance characteristics, maintenance UIs, maintenance overhead and thus maintenance nightmares.

More UIs, more aspects about things which were apparently new to software engineering nevertheless utterly essential to writing good software... more UIs I've never seen before, more cloudy weather, more azure flavors, more UIs I've never seen, more...

"Aaaaarrrgg!"

As I've tried to explain in the first paragraph, I've been around the block a couple of times. I have lived through internet bubbles, read McNealy's 'The Network is the computer' articles / propaganda, shaked my head when I heard about Ellison's Java client desktop idea, waded through the seas of SOA and SOA related hype material, so I have a bit of an idea what "Big computer with software somewhere + you" means. In this 'modern age' it's dubbed 'Cloud computing', though to me it looks like the same old idea that has been presented by various people in the past but with new labels. With all these platforms presented in the past, there was really one issue: what was the problem they all tried to solve? Why would one want to use it? With Cloud computing, that same old issue hasn't been solved.

"I built it, you run it"

One aspect all these 'big computer with software + you' systems tried to sell was that they could run the software you wrote for you and you didn't have to worry about a thing. Well, not to worry about a lot, but still you had to worry about things, as the system was still Yet Another Platform with its own set of characteristics, flaws and weaknesses and most importantly: differences with the development- and test environment the software was written with.

The problem with software once it is written, tested and ready for deployment is that last stage: will it run in the environment on-site the way it runs locally in the test environment? And is that on-site environment easy to maintain?

In other words: the problem is that the environment the software has to run in isn't necessarily the same as the environment the software was written with / tested in, which could cause a lot of problems during deployment and after deployment. Other aspects like updating the environment due to security flaws, bugs in software etc. are also factors which add to the overall unpleasant experience of deploying and keeping software running.

So the answer to that problem should be a system which provides the following things:

  • The environment equal to the one the software was written and tested with
  • The resources to keep the software running when the software requires them.
  • The security that the software keeps running, no matter what.

In other words: the software engineers built the software, tested it and defined the environment (as they've done that for development and testing anyway) and shipped that in one package, and at the place where the software has to run, that exact same environment is provided, together with the resources required (like memory, cpu, a database connection). So "I built it, you run it". How the environment is re-created isn't important, the important thing is that the exact same environment is provided to the software, 24/7.

Are EC2, Azure and other cloudware solving the problem?

No. They provide Yet Another Platform but not the same environment. As they're yet another platform, you've to develop for that platform. The most typical example for that is that the newly announced application server from Microsoft 'AppFabric', has two flavors: one for Windows and one for Azure. Why would anyone care? Isn't it totally irrelevant for a system in the 'cloud' what software (or what hardware) it is running? All that matters is that it can provide the environment the developer asked for so the developer knows the software will run the way it was intended.

Let's look at a typical example: a website of some company with a small database to serve the pages, a small forum and some other data-driven elements, not really complex. Today, this company has to hire some webspace somewhere, database space, bandwidth and most importantly: uptime. To make the web application run online, it has to match the rules set by the hosting environment. If that's a dedicated system, someone has to make sure the system contains all software the web application depends on, that the system is secure and stays that way. If it's a shared hosting environment, the web application has to obey the ISP's rules of hosted web applications, e.g. can use 100MB memory max., can't recycle more than 2 times in an hour etc.

When Patching Tuesday arrives, and the web application runs on a dedicated server (be it a VM or dedicated hardware, doesn't matter), someone has to make sure that the necessary patches are installed, and that those patches don't break the application. Backups have to be made so if disaster happens, things can be restored. These all count as 'uptime' costs.

With a VM somewhere on a big machine this doesn't change, you still have to make sure the VM offers the environment the application asks for. You still have to patch the OS if a patch for it is released, you still have to babysit the environment the application runs in or hire someone to do that for you, but it always involves manual labor to make sure the environment online is equal to the environment during development and testing.

In the whole keynote I didn't hear a single argument how Microsoft Azure is doing this differently. Sure I can upload some application to some server and it is ran. However, not with the environment I ask for, but inside the environment Azure offers. That's a different thing, because it requires that the developer has to write software with Azure in mind. If I have a .NET web application running on a dedicated server which uses Oracle 10g R2 as its database and I want to 'cloudify' () that web application with Azure, I can't because I have to make all kinds of modifications, for example I have to drop the Oracle database for something else and also make other changes as the environment provided by Azure isn't the same as the one locally.

EC2 and other cloudware do the same thing, they all provide 'an' environment with a set of characteristics, but not your environment. So in other words, they're not solving the problem, they only add another platform to choose from when writing software. Like we didn't have enough of those already. Sure, they offer some room for scaling when it comes to resources, but what happens when the image has to reboot due to a security fix that had been installed? Is the application automatically moved to another OS instance? Without loss of any data in-memory, so it looks like the application just ran along fine without any hiccup?

So what's the solution? What should Cloud computing be all about instead?

It should be about environment virtualization. I give you a myapp.zip and an environment.config and you run it. And keep running it. All dependencies on software of my application, like 3rd party libraries, are enclosed in the application's image. That's not an image of an OS with the app installed, it's just the application. The environment.config file is a file which contains the description of the environment that the software wants, e.g. .NET 3.5 sp1, Oracle 10g R2 database, 2GB ram minimum, IIS7, domain name example.com registered to app, folder structure etc. etc. So I outsource any babysitting of the environment of my application.

That is incredibly complex. It might not even be doable. But it's the only way to make cloud computing something else than a new name for an old idea, despite the long list of well-known names who showed an even longer list of UIs and tools during a keynote.

Can Azure do what I described above? I honestly have not the faintest idea, even after watching the keynote yesterday and by reading up some marketing stuff. That doesn't give me confidence, as it's in general not a good sign if a vendor has a hard time explaining what problem a product solves.

Published Wednesday, November 18, 2009 11:16 AM by FransBouma

Comments

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 7:07 AM

I was pleased to read this. I have been hearing about Azure and cloud computing for a while now and have had this feeling that maybe there is something here that I need to know. Whenever The Next Big Thing is announced you start to wonder if it will solve all your problems and you start to feel guilty if you haven't mastered it within a couple of weeks of its release.

But I get paid to deliver software. I spend hours every week trying to stay on top of things, but how many new methodologies and frameworks do I have to learn.

And then, as you say, there is deployment. Today I delivered an application to a client and, as always, my biggest fear was that it wouldn't run on their machine. I have a separate computer that runs tests and builds every time I check into source control. I have set up VMs to mimic the client's environment as closely as possible. But still, you never know until you deploy.

A few hours after I delivered the app today I got an email asking for a few changes. I was overjoyed, because that meant that they could run it. If I could remove that uncertainty from my work it would be a great leap forward. From what you have said it seems that Azure may be a few steps backward.

Richard Wright

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 7:29 AM

The problem seems pretty obvious to me. Cloud computing itself is nothing new, it's just all the web apps like Gmail and Mint we have been running for years. The problem is:

1. Maintaining all the servers, including patching, backups etc that go along with running a server that hosts your product is a pain for many people.

2. Adding new servers when you are expecting and increase in requirement is painful, now you have just doubled the pain from point 1.

Azure will largely solve these problems.

Craig

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 7:42 AM

@Craig: you say Azure will largely solve these problems, but how will it do that? Does it provide to be a virtualized windows environment? Or do I run a VM with 2008?

I'm willing to believe what you say, but to me it's not clear that it will do that. For example Amazon's EC2 has the same selling point but also can't provide you a zero-maintenance OS layer: it provides a way to run an image (OS + app) at whatever spec you want, 1, 10 machines you name it. But that doesn't free you from patching tuesday. that your app can run on two VMs to provide 100% 'uptime' is not easy if your app isn't build with 'I run on multiple machines at once so there's no state' in mind.

FransBouma

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 7:56 AM

This article was a pleasure to read specially after having seen the following production from IBM. I didn't think it was possible to combine two buzz techs into the same product but they managed it.....

WebSphere CloudBurst Appliance

Extend Smart SOA applications and services into a private cloud

David Hope

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 8:12 AM

What if as a developer I want to be able to develop the app directly in the cloud space that the app will occupy while running. Does Azure offer that?

And as far as uptime is concerned, this "cycle" the machine is why I have moved to debian stable. The only reason you have to cycle the machine is to upgrade major kernel releases, and that's rare. Even with hardware upgrades, power failures and so on, it is not uncommon to have uptime exceeding 300 days. I don't know how that will translate with running debian stable on amazon ec3, but it might.

Christopher Mahan

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 8:51 AM

I thought one of ther main ideas around the 'Cloud' was reduced provisioning time when you need to increase capacity etc...

Awkward Coder

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 9:56 AM

Great post, Frans :-)

I also shared my thoughts here:

nayyeri.net/is-windows-azure-the-right-technology-for-the-future

Keyvan Nayyeri

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 10:00 AM

We are years away from a useful solution or useful offer in the cloud space. Who wants to part with their sensitive data? The whole thing feels a little like a solution in search of a problem. There will be something good that comes out of this... but I dont think its what the pundits and marketing people proclaim right now.

Thomas Wagner

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 11:20 AM

It seems you'd like cloud to be a virtualization platform allowing existing software to scale up without being significantly changed. But this won't work well, and the reasons are the same as for migration to multicore CPUs: software must be designed differently to take all the benefits of new environment.

E.g. in case with clouds it's theoretically impossible to provide isolation, scalability and performance all together, and you must consider this if you're going to use petabytes provided there.

The same about concurrent data processing: theoretically you can accomplish some tasks quite fast there (e.g. using DryadLINQ), but you must involve a special API to make this happen; moreover, you should take into account your planned data flows while utilizing it. So this is no the same as e.g. relying on TPL.

Finally, requirements to fail tolerance in cloud are different: you must admit any node you your code runs at may fail, and this is absolutely normal case. And it's your problem to implement a successful recovery there (if it isn't solved on lower layers). A good fail tolerance here implies implementation of distributed state machine - that's what you never need on regular servers.

So dealing with cloud is intrinsically different. Of course, in many many cases you don't need to think about this to get some benefits for free (multicore CPUs also provide some of them - e.g. different programs on your PC runs in parallel, because OS takes care of this). But generally, there is no free lunch.

Alex Yakunin

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 18, 2009 2:23 PM

The details of how the Windows Azure Platform solves the OS update problem haven't changed since last year's PDC. Maybe we didn't clearly communicate them enough.

Windows Azure is a virtualized OS currently based on Windows Server 2008 running on a specialized version of Hyper-V. You specify the number of virtual machines you want (per role) and we take care of the OS and app provisioning.

If the OS needs to be patched, a new VM is spun up based on the new OS image and your app is automatically deployed into that image. This new image comes online as soon as your app is initialized. The old machine is taken offline and recycled. If you have multiple machines per role, the load balancing will take care of the rest.

Updating your app or increasing capacity works largely the same.

Does this mean that your app needs to deal with state differently if you rely on in memory state? Yes! Your app should only rely on state in memory for caching and all data that needs to be persisted needs to be persisted on disk. This can either be persistent local storage (which *is* preserved across VM recycles), SQL Azure or Azure tables and queues.

But not relying on the persistence of in memory state is always a best practice. You need to be prepared for system failure at any time even if you run your app in your own datacenters on your own physical machines.

Regarding an identical test environment. You can use a staging environment that is identical to production. When you hit the take into production switch, this staging environment even instantly becomes the production environment. The development environment is different in scale and is simulated using the Dev Fabric provided with the Azure SDK and the Visual Studio Tools.

Erwyn van der Meer

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Thursday, November 19, 2009 2:30 AM

I guess you dont now about what problem the Cloud address. Please think about: resilency, on-demand scaling, business continuity and other problems that are becoming more and more complex to address inside organization.

Obviously to solve these problem the application must observe some rule by design. These rules are enforce on the cloud but not on the 99% of the other software platform.

Then, for a sysadmin like me, as these policy are enforced by infrastructure is much much simple to grow, to protect to enpower infrastructure

thebitstreamer

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Thursday, November 19, 2009 7:49 PM

Wow!!Thats some thoughtful insight:)Never thought about azure this way

Haripraghash

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 25, 2009 12:52 PM

There are premises to this post that I agree with, but there are also fundamental flaws.  the first is basing your learnings of cloud computing on a PDC keynote.  Second being limiting your focus to simply the platform (Azure, at that).

The reason Microsoft is over-hyping cloud, but not making any sense into how it solves any problems, is because "cloud" is the top technology search term - it's smart marketing.  Doesn't mean they have an understanding of cloud computing or an offering that's truly cloud computing.

Cloud computing, specifically the platform, solves business problems by allowing companies to develop apps 5x faster, and at half the cost.  There it is, the problem, and just one of the cloud's proven solutions.  If you're not seeing this at PDC, it's because the powers behind the PDC don't get it, it's not because cloud computing isn't a viable solution that's available today.

Specifically to your example: "Let's look at a typical example: a website of some company with a small database to serve the pages"...  You're right, Azure cannot solve this.  Perhaps you should take a look at Salesforce's Force.com Sites offering, though: www.salesforce.com/.../sites.jsp

Again, you hit the nail on the head in the fact that some companies have zero value-add with their "cloud" offerings.  Just be careful not to dismiss an industrial shift in technology just because some of the old players' "cloud" offerings are behind the times, and causing confusion.

For more along these lines, see my company's blog here: http://blog.appirio.com.  We run our own 200 person company completely server-less (aka, in the "cloud), spend about 1.7% of rev per employee on IT (industry standard is 7%), and have helped over 150 enterprise customers migrate to the cloud.

- Sal [sal@appirio.com]

@spartovi

Sal Partovi @spartovi

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Wednesday, November 25, 2009 10:26 PM

It is true that deploying to azure requires you to live by the limitations of the platform in terms of which software components you can use. It is also true that cloud computing has not solved every application deployment challenge. However IMO these new breed of services are moving in the right direction.

Let me explain from a point of view of a Lone ASP.NET MVC developer's perspective trying to launch the next FaceBook ( I know, I know its a one in a hundred million chance but for the purposes of illustration...) I download the new VS2010 Beta 2 and Azure deployment toolkit. I lock myself in my bedroom all weekend and hammer out the next big internet application)

I test it on the simulated azure app fabric environment on my PC. Through the azure tools,I create 2 web role instances (one of which acts as staging and the other as production - both with identical environments) and one sql azure database. I package my application and database with VS2010 and upload to staging instance using the azure portal tool right from my desktop. After making sure everything runs great on the staging web role ,I swap the two web roles where the production becomes staging and staging becomes production and I'm done.

I am so lucky that next day the site gets blogged about on TechCruch and I get a massive amount of traffic in the next 24 hours. So I quickly provison as many instances of the production web roles as I need to handle the spike. Alas people do not find the application as compelling as I thought it would be so traffic dies down quickly and I scale down the instances back to just two.

This is powerful stuff for a single developer

working from his home office. He can do all this from within VS sitting at his desk .

Of course this is just one scenario and different people and companies will have different needs. I do love the choice though.

BTW after all of this there is one reason I am still not sure if I will be using azure. It has to do with limitations of being able to set your own unique domain name. Now if they fix that, then were talking.

Areg Sarkissian

# re: "Cloud Cloud Cloud, if you're not in it, you're out!"... or something@ Thursday, November 26, 2009 3:01 PM

Your article is very convincing, however it would be nice to see you write a follow-up to this blog after a more detailed study of cloud/azure and related technologies. However you have to admit Cloud has caught a lot of people's attention and "Cloud Cloud Cloud" slogan is working for Microsoft!

From my limited knowledge what I can say is Virtualization is here to stay, this offering from Microsoft tries to address the problem and also garner itself a big space in this market. Kind of how .Net took the dev world to MS.

Will it gain momentum? Who are its consumers? Companies that want to provide cloud services? Medium to large enterprises that want to centralize?

Vishy