Symmetrical and asymmetrical system design
Here is a small social experiment I like to engage in during technical
design meetings. Whatever the problem under discussion, I will put
forward a solution which involves splitting the problem into exactly
*three* pieces. Without saying any more than that, a percentage of the
participants normally shift uneasily in their seats.
Why? Because three is an odd number. Both figuratively and literally. A
proportion of IT people feel more comfortable if there are an even
number of options in any logical decomposition of a problem.
Binary thinking is a powerful force in IT. We technologists think
George Boole's algebra[1] is very cool indeed. We appreciate it at two
levels. The logic of splitting things into binary camps appeals
strongly. But so too does the aesthetic balance and symmetry associated
with visualizations of binary logic. It appeals to both sides of the
brain (which has two sides). It also leads to more aesthetically
pleasing Powerpoint slides. How bad can that be?
Ad hoc field studies I have conducted lead me to believe that the
percentage who prefer even to odd numbers is around 50%. I hope it's
around 50% because that would be very symmetrical - a revelation that
tells you which side of the divide I am on.
My love affair with symmetrical logic has another side-effect. It makes
me very suspicious of designs that are *nearly* symmetrical. Pondering
such designs I find myself mentally re-working them either make them
completely symmetrical or completely asymmetrical. Completely
asymmetrical is fine. PKI for example, based as it is on asymmetrical,
"one way" functions is a good example of a completely asymmetrical
design which does not offend my highly strung design sensibilities. It
offends in other ways, but that is fodder for future articles.
Then of course, there is the biggest - in every sense of the word -
asymmetrical design in IT right now - the Internet. Of course, we do not
go around the place describing the Internet as an example of an
asymmetrical design. Indeed, we use phrases like 'client/server' which,
on the face of it, split Internet technologies nicely into two pieces -
the height of symmetric decorum.
To illustrate the asymmetric nature of the Internet, let me ask you a
question. When new mail arrives in your mailbox, does your computer
notify you through beeping or flashing? Do you use an RSS aggregator
that automatically updated when new entries appear in blogs? Both of
these technologies appear symmetric to the user. That is to say, stuff
can get pushed out and stuff can get pulled in, without human
intervention.
However, the push side of both of these technologies is a user-level
illusion. Under the hood, the protocols being used - POP3/IMAP4/HTTP -
are asymmetric. There is no such thing here as "push" in these
protocols. Mail does not arrive in your mailbox, your mail client runs
out there to retrieve it.
Your mail is pulled for you by the protocol. Similarly, new entries in
blogs appear in your aggregator because the aggregator runs out there to
hunt out new postings. Your news is pulled for you by the protocol.
This is odd - again both figuratively and literally. It is odd because
one level further down, at the level of the socket abstraction they all
use for connecting host to host, the protocol is *symmetric*.
Information can flow both ways on a single socket connection.
Let's recap. We have a symmetric channel (a socket). On top of that we
have an asymmetrical protocol (such as HTTP). On top of that, we have
asymmetric software such as e-mail pollers and RSS aggregators that
re-create the symmetric channel we had in the first instance but never
utilized.
Also of interest is the fact that this approach recreates symmetric in a
resource intensive fashion - by polling asymmetric connections.
Odd as this is, I'm always wary of jumping to unwarranted conclusions
concerning performance. I'm convinced that the performance problems
associated with polling will be dealt with in clever ways on the
Internet. The Internet has a standard approach to performance problems -
it routes around them using us all as a hive-mind. I don't think any of
us fully grasp how this works!
Here is the big question in my head. Is symmetric application behavior
best implemented the way it has been implemented on the Web? Would we
have been better off implementing a symmetric, two-way Web from day one
by utilizing the two-way capabilities of the socket abstraction that
sits beneath all the asymmetric stuff we have layered on top of it?
I don't know, but I see exactly three possibilities...
1 - Implement symmetric on top of asymmetric
2 - Implement asymmetric on top of symmetric
3 - Actually, no, there are only two. I just threw in a third to see if
you would feel uncomfortable with an asymmetric set of design
possibilities.
Did you?
[1] http://www-gap.dcs.st-and.ac.uk/~history/Mathematicians/Boole.html
» posted by ITworld staff
ITworld
Essential JavaFX
Get started building rich Web apps quickly with an introduction to the power of JavaFX key features -- scene node graphs, nodes as components, the coordinate system, layout options, colors and gradients, custom classes with inheritance, animation, binding, and event handlers.Enter now!
The Nomadic Developer
Consulting can be hugely rewarding, but it's easy to fail if you are unprepared. To succeed, you need a mentor who knows the lay of the land. Aaron Erickson is your mentor, and this is your guidebook. Enter now!













hi
yjhghhfghhgghfggsrhtsdjy