Discrete Components

This post is part of a series based on a presentation I did to the London VMware User Group on February 25th, 2010 about the reality of Enterprise scale internal cloud platforms. To find other posts in the series, just look for the tag “Bringing the Cloud Down to Earth”.

Following on from the previous topic of “API First” is another very important principle – that of discrete components (not to be confused with discreet components :D). We see it time and time again, applications or systems that are built in a monolithic style – with every piece of functionality imaginable crammed in and inseparable from the rest. But it is an easy trap to fall into, and indeed I am speaking from experience. Not everyone is as forward thinking as you or I, there is no shortage of people who subscribe to the “when all you have is hammer, everything looks like a nail” view of the world. My advice is to let them hold that view of _their_ world, but do not let that spill into _your_ world. The points in this slide are fairly self explanatory, so this will be brief.

Loose Coupling
When it comes to loosely coupled systems, you can’t really go wrong with web services. REST, SOAP, even (god forbid) XML-RPC… it’s not difficult to assemble components using any of these technologies into a system. Kind of like Voltron. When evaluating different products to use, web services should be right up near the top of your evaluation criteria. Be wary of product suites that only implement web services in a single outward facing component – if you’re only interested in a few specific parts of a larger suite, you shouldn’t have to implement the entire suite just because the sub-components are tightly coupled / only accessible by other components of the same suite. And if you’re writing anything yourself, like the internal API implementation, then you should consider it mandatory to work to this principle.

If you want to go a step further, you can look for apps that are implemented using an Event Driven Architecture because the last thing you want is your entire system being slowed down by a single component that blocks on everything until it has run it’s part to completion. And if you have no idea what that last sentence meant, don’t worry about it – it’s not that important I guess ;).

Documented Interfaces
But of course it’s not good enough for a vendor to just say they have a web services API – it should be documented, and supported! Sure reverse engineering is fun for the most part, but it can be time consuming. That time could be much better spent doing other things. Have a look at the documentation available for the vSphere API – comprehensive is an understatement. And although not perfect, it makes for a great yardstick with which to measure up other vendors.

One of the core tenants of loosely coupled systems is that of interoperability – something cannot be loosely coupled if it only integrates with something specific like another component from the same vendor (difficult to imagine I know… NOT!). The question is not whether a piece of software can integrate with external systems or not, it’s how easy it is to do so. For example, having a *nix based Java app talk to a Kerberised Windows based web service can drive you up the fucking wall be challenging – are there any other options available (on either side) to make life easier?

That’s about all I have to say on this one… if all of us require this of our vendors, the world will indeed be a better place for everyone.



One Response to “Discrete Components”

  1. Most Tweeted Articles by Virtualization Experts: MrTweet Says:

    Your article was most tweeted by Virtualization experts in the Twitterverse…

    Come see other top popular articles surfaced by Virtualization experts!…

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: