Friday, December 12, 2008
« Some thoughts on Windows Azure | Main | CSLA .NET 3.6 for Windows and for Silver... »

My previous blog post (Some thoughts on Windows Azure) has generated some good comments. I was going to answer with a comment, but I wrote enough that I thought I’d just do a follow-up post.

Jamie says “Sounds akin to Architecture:"convention over configuration" I'm wholly in favour of that.”

Yes, this is very much a convention over configuration story, just at an arguably larger scope that we’ve seen thus far. Or at least showing a glimpse of that larger scope. Things like Rails are interesting, but I don't think they are as broad as the potential we're seeing here.

It is my view that the primary job of an architect is to eliminate choices. To create artificial restrictions within which applications are created. Basically to pre-make most of the hard choices so each application designer/developer doesn’t need to.

What I’m saying with Azure, is that we’re seeing this effect at a platform level. A platform that has already eliminated most choices, and that has created restrictions on how applications are created – thus ensuring a high level of consistency, and potential portability.

Jason is confused by my previous post, in that I say Azure has a "lock-in problem", but that the restricted architecture is a good thing.

I understand your confusion, as I probably could have been more clear. I do think Windows Azure has a lock-in problem - it doesn't scale down into my data center, or onto my desktop. But the concept of a restricted runtime is a good one, and I suspect that concept may outlive this first run at Azure. A restricted architecture (and runtime to support it) doesn't have to cause lock-in at the hosting level. Perhaps at the vendor level - but those of us who live in the Microsoft space put that concern behind us many years ago.

Roger suggests that most organizations may not have the technical savvy to host the Azure platform in-house.

That may be a valid point – the current Azure implementation might be too complex for most organizations to administer. Microsoft didn't build it as a server product, so they undoubtedly made implementation choices that create complexity for hosting. This doesn’t mean the idea of a restricted runtime is bad. Nor does it mean that someone (possibly Microsoft) could create such a restricted runtime that could be deployed within an organization, or in the cloud. Consider that there is a version of Azure that runs on a developer's workstation already - so it isn't hard to imagine a version of Azure that I could run in my data center.

Remember that we’re talking about a restricted runtime, with a restricted architecture and API. Basically a controlled subset of .NET. We’re already seeing this work – in the form of Silverlight. Silverlight is largely compatible with .NET, even though they are totally separate implementations. And Moonlight demonstrates that the abstraction can carry to yet another implementation.

Silverlight has demonstrated that most business applications only use 5 of the 197 megabytes in the .NET 3.5 framework download to build the client. Just how much is really required to build the server parts? A different 5 megabytes? 10? Maybe 20 tops?

If someone had a defined runtime for server code, like Silverlight is for the client, I think it becomes equally possible to have numerous physical implementations of the same runtime. One for my laptop, one for my enterprise servers and one for Microsoft to host in the cloud. Now I can write my app in this .NET subset, and I can not only scale out, but I can scale up or down too.

That’s where I suspect this will all end up, and spurring this type of thinking is (to me) the real value of Azure in the short term.

Finally, Justin rightly suggests that we can use our own abstraction layer to be portable to/from Azure even today.

That's absolutely true. What I'm saying is that I think Azure could light the way to a platform that already does that abstraction.

Many, many years ago I worked on a project to port some software from a Prime to a VAX. It was only possible because the original developers had (and I am not exaggerating) abstracted every point of interaction with the OS. Everything that wasn't part of the FORTRAN-77 spec was in an abstraction layer. I shudder to think of the expense of doing that today - of abstracting everything outside the C# language spec - basically all of .NET - so you could be portable.

So what we need, I think, is this server equivalent to Silverlight. Azure is not that - not today - but I think it may start us down that path, and that'd be cool!

Friday, December 12, 2008 2:28:51 PM (Central Standard Time, UTC-06:00)
Accessing server resources through services and running in a sandbox (aka Medium or Low trust) seems pretty close to a "Silverlight for the server". What are you envisioning beyond this?

You're asking for a completely different .NET runtime (subset) rather than just security restrictions?
Friday, December 12, 2008 2:43:00 PM (Central Standard Time, UTC-06:00)
I want abstract data access technology and storage (table/xml/blob storage) and NO option to do anything else directly. I want an abstract worker role, with a consistent queued async messaging model.

Right now I can use .NET in medium trust. And then I can choose of of the 9 ways to talk to SQL Server, and I can use SQL Server with or without sprocs. Right there I've made a ton of choices that totally fubar any attempt to be portable.

Then think about how I interact with the UI. And services. And do background tasks.

Every problem we face has numerous solutions in .NET. The problem is that .NET is not focused. It is good for building business apps, enterprise apps, games, web apps - you name it. And to be good at all those things it needs numerous solutions to each problem, because solutions for business may not work for a game, etc.

As an architect, it is my role to help a client make these choices - arriving in the end at a subset of .NET that they'll use to build their app. But every time an organization starts to build an app, they have to go through this process - and they usually end up with different choices.

Which brings us back to the original problem - with that much variation in the end result there can be no portability, and very limited code reuse, etc.

Either we say "that's ok" and just put VMs in the cloud, or we say "enough is enough" and devise a more restricted architecture/platform where at least the big choices have already been made - so we can get portability and better reuse.

This is a progression. We started with hardware and invented the operating system to get better abstraction. Then we invented the VB runtime, the JDK and .NET runtime (I know, I'm leaving out other runtimes like Smalltalk) to abstract the OS. Now we're building runtimes that abstract the runtimes - or at least restrict them.
Friday, December 12, 2008 2:58:30 PM (Central Standard Time, UTC-06:00)
At DEC, I once was unable to avoid a project to port a substantial body of HP-1000/RTE Pascal to PDP-11/RSX Pascal and we were told it had to be a direct port, not a rewrite. We ended up having to emulate all the RTE calls - quite a painful exercise given the impedance mismatch between RTE and RSX architectures / API's.

That level of disparity between any two architectures / APIs should drive the decision on whether to rewrite or abstract to resolve the differences. Sometimes it's a wash, other times it's worth hiding / isolating the impedance mismatch (or vendor 'lock-in' in the case of the cloud).

Given it's likely to take another decade to come up with ratified cloud OS / API standards I think it's probable the combination of existing WS-* experience, the influence of the ideas behind REST, and a degree of homogeneity in today's architectural thought will mitigate some of the difficulty in achieving such standards in the long run.

All I know is I'm not writing another one of those suckers - more power to anyone who does - but carefully [re]consider your reasons for doing so.
Friday, December 12, 2008 3:05:31 PM (Central Standard Time, UTC-06:00)
It's happening: MOE (Mesh Operation Environment) on the client and in the cloud. Please look at Windows Live Mesh.

Out of MS, Flash Air is another runtime works on multiple OS platforms.

Currently Javascript runtime is everywhere due to web browser everywhere.

AFAIK, Windows Live Mesh MOE Client = Javascript runtime + .NET runtime (Siverligtht version of Core .NET Execution Engine).

Adobe Air is another one trying to be universal runtime everywhere.

I bet with SilverLight .NET runtime everywhere, but I like the competition between MOE/Air. And they will coexist for long time.

Enlightening reading of your thoughts on Azure.

Cheers and Happy holiday season.


Kevin
Friday, December 19, 2008 1:41:22 PM (Central Standard Time, UTC-06:00)
There is nothing preventing a company to host their Azure applicatons in house...It's medium trust ASP.NET and SQL Data Services. Of course I agree that there might be need for a runtime that does a lot of what Azure does...basically, let me deploy the same package that I send up to my azure account to a local server.

I'd be surprised if this didn't make it's way to the commercial versions of Windows Server. Probably with caps on the scalability all layered on top of hyper-v
Comments are closed.