Tuesday, July 8, 2008

Adaptogens for Software System ?

A general problem of Card Systems is that their high level of complexity is hindering their adoption. This complexity comes from the high number of components and technologies employed (databases, application servers, web-based interfaces for users and systems, cryptographic and security mechanisms, imaging and printing...). For the system to work as a whole each components and technologies must work individually as well as integrated within one single system.

In fact complication, rather than complexity, would be a better term to describe the situation, as the root cause of the problem is the number of interactions due to the aggregation of many components and technologies. Complexity would rather apply to components which are more than the linear functions of their properties. In Card Systems security or biometrics mechanisms are intrinsically complex since you can not comprehend their whole behaviour without complete knowledge of all its properties and rules that governs them, e.g. the factoring problem in public key (PK) cryptography. But many components (databases, application servers, printers….) are straightforward enough and can be described in simple –albeit lengthy, terms.

So having make this clear distinction between complexity and complication, I am now taking the artistic license to use complexity in place of complication.

This complexity problem is nothing new, and it is faced by any large modern distributed computing system. Organisations are employing large-scale computer networks to deploy their systems. Those systems are performing a wide variety of tasks ranging from database processing, workflow, to presenting web content and to helpdesk… Often if one task aborts unexpectedly the whole system is put to a halt or don’t perform correctly.

So how do we tackle this problem? The industry has come with various solutions, that we will review shortly then we will see what further steps we could take.

Looking at the hardware and software stacks, we first find fault tolerant systems that address hardware issues. Here redundancy is the key word. UPS (uninterruptible power supply) powered computers run on multiple CPU (central processing units) and rely on RAID (Redundant Array of Independent Disk) system to store data, on dual network cards to access the network. All those hardware components are hot-swappable making the system tolerant to hardware fault.

However in any computer systems there is much more than hardware that can go wrong. Taking an analogy with the human body, it is great to have 2 kidneys, 2 lungs, 2 eyes, 2 hears, 2 hands… but you also need mechanisms to regulate your heartbeat, to control temperature, to alert you when you require food… Similarly in computer you also need mechanisms to load balance processing request, to control i/o activity.

IBM, in its effort toward tackling the skill shortage within the IT industry, has come up with the concept of autonomic system. And right now, the autonomic technology from IBM and other vendors build-up on mechanisms designed for fault tolerant systems to provide more resilient and responsive IT infrastructures. This includes monitoring application; supporting cluster-based deployment with and automatic node switch over, managing basic network and database parameters. Such innovations are really in the right directions. For example, in today’s world there is no reason why a database application should fail because a tablepsace got filled-up and didn’t extend automatically. As Alfred North Whitehead said "Civilization advances by extending the number of important operations which we can perform without thinking about them.", so would computer systems it seems; or a more exact paraphrase would be "Computer Systems advance by extending the number of important operations which they can perform without a Human thinking about them.”. This is similar to the reflex system in the human body, you don’t need to engage the brain to remove your hand from an hot source that will prevent you to get burn or to increase your heart beat in response to an additional effort.

Still there is more to be done, computer systems need to evolve to consistently adapt to their ever changing environment. So I am very hopeful of initiatives such as Spring Dynamic Modules for OSGi(tm). As for the human body, computer system should have the ability to take on new skills, update existing ones and get rid of bad old habits. The ability to dynamically add, remove, and update modules in a running system, goes a long way toward this goal.

These mechanisms are important as they provide a way to adapt to radical changes to the environment. However, what seems still to be lacking is the ability for software system to counter adverse user interaction, unexpected request or response with other systems. Today’s solution is in the initial design that can be validated through negative testing. But we haven’t engineered yet something like adaptogens, which are non-toxic metabolic regulators that can enhance metabolic homeostasis during stress, or in simpler terms increase the body’s resistance to adverse physical, chemical, or biological stressors by raising non-specific resistance toward such stress. This isn’t like Dynamic Modules, discussed in the previous paragraph, such mechanisms should work without a Human thinking about them.

No comments: