Space-based Archetypes

Part 3 of 3: Patterns from inner space

By Julian Browne on June 27, 2007. Filed Under architecture, development, requirements

This is the third of three articles on the space-based architecture. The first was a general introduction, and description of a commercially deployed example, the second looked at how the SBA supports Agile because of its complimentary nature to how businesses think and work, and this final episode looks at some of the subtle technicalities of the SBA.

Before I start, let me make clear my relationship with the SBA - I am not connected in any way with Gigaspaces (the originators of the formalised SBA concept) nor indeed any other grid vendor. Nor would I zealously advocate an SBA approach over all alternatives. For most of my career I have worked in end-user environments buying, developing and integrating software. My customers have therefore usually been the people who pay for the services of my employer, or people who sit in the same building, so indeed if I did go about only deploying SBAs then, sooner or later, I would do it in an inappropriate setting and get into some serious trouble. Anyway, glad that's cleared up. So, as Macbeth said, I go, and it is done; the bell invites me..

In the previous articles I focused on the Space aspects of the SBA, but what about the Architecture aspect? In the context of end-user environments, what is architecture anyway? Well, I think it's three things that conspire together to deliver an overarching forth:

  1. It's a way to compartmentalise software functionality into logical abstract categories

  2. It's a way to physically deploy these logical structures to make the abstraction real

  3. It's a manner of seeing projects in their wider context, because, as I'm very fond of saying, projects are merely transitions: what you really build are products, and each decision you make in a project setting threatens to come back and haunt you in the longer term.

These three elements: the logical, the physical and the strategic, combine to deliver the primary output of architecture: an ability to meet non-functional requirements - a term which, these days, I try not to use because it isn't conducive to supporting effective analysis, preferring instead to use "systemic requirements" or the slightly more fusty "system qualities and constraints".

But whatever you call them, they are something that businesses rarely like to talk about - hard to define, and devilishly difficult to measure on occasion, but disastrous to get wrong. All the stuff they teach at college about the cost of fixing a bug increasing by factors the later in the life cycle it is found, go double for all those requirements that exist above and beyond the visible functionality. It may be annoying and expensive to change business logic in an application, but try telling a board of directors that the way the entire fabric of a solution operates is wrong, and that's why it won't scale to meet demand, or remain available for long, and that the only way to fix things is a ground up rebuild. Architecture is important. And very tricky to get exactly right.

To determine whether any one architectural approach is appropriate or not, I always look at it against systemic requirements first, illustrating each with a meaningful story so that business sponsors can understand the pros and cons. There are no best practises in architecture, only workable ones that can support business growth after reasonable (proportional) effort but inappropriate designs can be shown to be unusable quite quickly using this method.

Let's walk through some system qualities and see how an SBA would, or wouldn't, deliver based on it's archetype.

So there you have it. An SBA discussed in the light of a few standard NFRs. And I guess my summary of all this is that if you have a simple application, with predictable growth and reasonably contained business logic a tiered approach will do fine. If it's a database-driven web site that's not going to get heavy throughput, or generating lots of business transactions, then one of the MVC frameworks will probably cover it.

But once you get into distributing that logical architecture across nodes, and the words scalability and transactional safety start to become important to the business, you really do need to look into better ways to break away from some of the heaviness of JEE, you'll probably have to do a bit more work to get some operational aspects to the same level as for the big application servers, but it's more than likely to be worth it in the long run.